3

PHP経由でiOSアプリケーションにプッシュ通知を送信しようとしています。そのため、iOS 開発者は私に pem ファイルを提供してくれます。ホスティング サーバーに開くように要求したところgateway.sandbox.push.apple.com:2195、ポートが開かれました。しかし、プッシュ通知を送信しようとすると、次のエラーが発生します。私のコードは次のようになります

$deviceToken='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

$passphrase="";

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '/home/sitename/public_html/push/ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', 
    $err, 
    $errstr, 
    60, 
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
    $ctx);

if (!$fp)
exit("Failed to connect amarnew: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

次のエラーを取得する

Failed to connect amarnew: 0 

それで、telnet経由でAppleに接続しようとしましたが、その結果は

root@uio3-i [~]# telnet gateway.sandbox.push.apple.com 2195
Trying XX.XXX.XXX.XX...
Connected to gateway.sandbox.push.apple.com.
Escape character is '^]'.
^\q
^]
telnet> q
Connection closed.
root@uio3-i [~]#

私はこれが初めてなので、ここで立ち往生しました。誰か助けてください

前もって感謝します

4

1 に答える 1

5

証明書/キー ペアの .pem ファイルが破損しているようです。再生成してください。私はプッシュ作業を自分で行ったばかりなので、トリッキーなトピックであることはわかっています。

単純に telnet (接続が正常であることを証明するだけ) ではなく、ターミナルからこのコマンドを実行して、証明書とキーが有効かどうかを判断します。

openssl s_client -connect gateway.sandbox.push.apple.com:2195 
-cert cert.pem -key key.pem

ボンネットの下で何が起こっているかを知らせる openssl である、大量の出力が表示されるはずです。

接続に成功すると、数文字入力できるはずです。Enter キーを押すと、サーバーが切断されます。接続の確立に問題があった場合、openssl はエラー メッセージを表示しますが、出力をスクロールして見つける必要がある場合があります。

いずれにせよ、少なくとも証明書/鍵のペアが適切かどうかはわかります。

本番環境では、連結された証明書/キーのペアを使用する必要があります。元のキーと証明書がない場合は、上記をテストするために開発者からこれを取得する必要があります。

于 2013-08-30T09:30:21.340 に答える