PHPでAPNSを使用し、次のメッセージを取得するのに問題があります。
stream_socket_client(): Failed to enable crypto
問題は時々発生するだけで、他の場合は実際にプッシュを送信します。
私は10回の反復のループでテストスクリプトを持っているので、時々これを取得します。
stream_socket_client(): SSL: Connection reset by peer
サンドボックスサーバーを使用してテストしていますtls://gateway.sandbox.Push.Apple.com:2195
ここに私が試したものがあります:
sslv3://
およびtls://
。644
755
Googleで見つけたすべての解決策とSOは、すべてプッシュに問題がある人々です。
サービスはレート制限されているように感じますか?しばらく(約15分)待ってから再試行し、そのメッセージを再度取得し始めるまで約100のメッセージを正常にプッシュできたためです。
サンドボックスプッシュサービスはレート制限されています。私はテスト時にこれを経験しましたが、実稼働APIを使用してこのような制限に遭遇したことはありません。
あなたは彼らの他の保護を打っているかもしれません。
接続を開いて、メッセージを送信し、接続を閉じてからループを繰り返しますか?
これにより、通知がドロップされます。 Appleは、毎回新しい接続ではなく、同じ接続を使用して複数のプッシュ通知を送信することを望んでいます。
接続管理のベストプラクティス
同じゲートウェイまたは複数のゲートウェイインスタンスへの複数の接続を確立できます。多数のリモート通知を送信する必要がある場合は、それらを複数の異なるゲートウェイへの接続に分散させます。これにより、単一の接続を使用する場合と比べてパフォーマンスが向上します。リモート通知をより速く送信でき、APNがより速く配信できます。
複数の通知でAPNsとの接続を開いたままにします。 接続を繰り返し開いたり閉じたりしないでください。 APNsは、迅速な接続と切断をDoS攻撃として扱います。長時間アイドル状態になることがわかっている場合を除き、接続を開いたままにしておく必要があります。 1日1回ユーザーに通知を送信します。毎日新しい接続を使用してもかまいません。
From Apple Docs @ https://developer.Apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html
私のPHPコードは次のエラーを生成していました:
PHP Warning: stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12
PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12
PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24
問題は、いまいましい証明書が昨日前に失効したことでした! :-)これを信じられますか?
そのため、PEMファイルを再作成する必要があります。
PEMファイルを再作成する必要はありません
誤ったPassPhraseを使用すると、このエラーが発生します
エミリアーノ
Local_certのファイルパスを指定するときにファイル拡張子(.pem)を含めるのを愚かに忘れていたため、この問題が発生しました。
私の場合、問題は私のMac(OSX Sierra)にありました。 phpとcertをサーバーにアップロードして実行し、通知が配信されました。
チェックが少ない:
spaces
なし、_<
または>
なしこの問題がありました。 .pemファイルの「全員」に書き込み許可を与えると消えました。