1
こんにちは私は、プッシュ通知を送信しています。これはコマンドラインでうまく動作しますが、PHPのWebページとして実行していません。iOSのPHPプッシュ通知はコマンドラインでは動作しますが、Apacheでは動作しません
パスは正しいapnとpassphraseです(まったく同じコード)。
私はページを実行しますが、apacheによって呼び出されると失敗します。
Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in ..pushnotifications.php on line 31
Warning: stream_socket_client(): Failed to enable crypto in ..pushnotifications.php on line 31
Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in ..pushnotifications.php on line 31
Failed to connect: 0
コード:パスが問題だった
public function iOS($data, $devicetoken, $sandbox) {
$deviceToken = $devicetoken;
$ctx = stream_context_create();
if($sandbox) {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-dev-cert.pem');
} else {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-prod-cert.pem');
}
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase);
// Open a connection to the APNS server
// 'gateway.push.apple.com:2195'; //Production
// 'gateway.sandbox.push.apple.com:2195'; // Sandbox
if($sandbox) {
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
} else {
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
}
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
// Create the payload body
$body['aps'] = array(
'alert' => array(
'title' => $data['title'],
'body' => $data['body'],
),
'sound' => $data['sound'],
'badge' => $data['badge']
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
// Close the connection to the server
fclose($fp);
if (!$result)
return 'Message not delivered' . PHP_EOL;
else
return 'Message successfully delivered' . PHP_EOL;
}
31行目にコードが表示されることがありますか? –
.pemファイルのパスを確認できますか? –
$ sandbox = true; \t $ msg_payload =配列( \t \t 'タイトル' => 'テスト'、 \t \t '音' => 'デフォルト' 'あなたは新しい注文を受けている' => \t \tの体 ' \t \t 'badge' => 3 \t); \t \t \t $ deviceToken = '994A7663BCA0D0EC75BC6923D27741CC1D2C1E089995EF0BF632185CAAFDCA35'; \t エコーPushNotifications :: iOS($ msg_payload、$ deviceToken、$ sandbox); –