私はAppleのAPNサーバーにプッシュ通知を送信する小さなPHPスクリプトを実装してきました。アプリ内のプッシュ通知に登録されたすべてのデバイストークンを含むデータベースがあります。私のスクリプトはデータベースにトークンを照会し、それらをAppleに送信します。すべてが大きなものでうまく機能しますが...私は手動で間違ったトークンをテーブルに挿入し、スクリプトを再度実行しました。
その間違ったトークンがAppleに送信された後、それ以降のすべての通知がデバイスに届かないことに気づきました。Appleは、すべてが正常に機能した場合はOKを返さないようですが、問題が発生した場合はKOコードを送信します。その間違ったトークンについてAppleからエラーが発生しましたが、その後、他のすべての通知に対して応答がありません。
データベース内のすべてのトークンに対して1つの接続のみを開きます。
私はこの行でソケットコンテキストを準備します:
$streamContext = stream_context_create(array(
'ssl' => array(
'local_cert' => $this->signFile
)
));
次に、APNサーバーとの通信チャネルを開始します。
$this->hFile = stream_socket_client(self::$serverUrl[$environment], $err, $errstr, 60, STREAM_CLIENT_CONNECT, $streamContext);
最後に私はメッセージを送ります:
fwrite($this->hFile, $command);
通知ごとに新しい接続を設定することを考えましたが、最初にSOの意見を聞きたいと思いました...
ちなみに、PHPはこれに最適な選択ではないことは知っていますが、それは他の場所からの要件として来たものであり、システムをこのように設定することを余儀なくされています。
ありがとう。良い一日を、
アレックス。