OK、APNS 接続の失敗に関して多くの議論があったことは知っています。議論のほとんどは、送信サーバーのポート 2195 をチェックして、接続が許可されることを確認することを推奨しています。「接続が拒否されました」というエラー (111) が発生していますが、これは私の問題ではありません。
サーバーとサンドボックス サーバー間の通信が Apple Gateway から 200 応答を受信していることを確認しました。Mac から openssl を使用して接続をテストしたので、証明書が適切であることはわかっています。また、サーバーから一度ゲートウェイに接続できましたが、一貫した接続を取得できません。
私が使用しているテストコードは次のとおりです。
$ctx = stream_context_create();
stream_context_set_option($ctx,'ssl', 'local_cert', $pem);
stream_context_set_option($ctx, 'ssl', 'passphrase', $key);
$gateway = 'gateway.sandbox.push.apple.com';
$port = '2195';
$remote_socket = 'ssl://'.$gateway.':'.$port;
$fp = stream_socket_client($remote_socket, $err, $errstr, 60,STREAM_CLIENT_CONNECT, $ctx);
if (!$fp){
echo $err.'<br>';
echo $errstr.'</br>';
echo 'error=apple failed to connect';
} else {
fclose($fp);
echo 'success';
}
.pem ファイルをスクリプト ファイルと同じディレクトリに配置し、パスフレーズの使用を削除し、verify_peer を指定し、STREAM_CLIENT_ASYNC_CONNECT および STREAM_CLIENT_PERSISTENT フラグを使用しましたが、成功しませんでした。
これは私がやっていることの問題ですか、apnsサンドボックスサーバーの問題ですか、それともapnsに期待すべきことですか? あなたが提供できる洞察や助けは大歓迎です-私の髪はかなり薄くなっています!
よろしく。
PS -- パスフレーズを削除すると、キーにアクセスできないという 115 エラーが表示されます。