昨日から一部のデバイスでプッシュ通知が受信されないという問題が発生しています。 昨日までにデバイスがプッシュ通知を正常に受信したため、証明書/デバイストークンは正しいと思われます( )。プッシュ通知は正常に送信されましたが、デバイスは受信しません(時々)
サーバー側では、エラーまたは接続の拒否はなく、 であり、毎回プッシュ通知が正常に送信されたようです。
しかし、まだデバイスがプッシュを正しく受信しない場合があります。
いくつかの周囲の情報:
- 私は、本番環境でこれをやっています。
- サーバー側のエラー/接続の拒否はありません
- 私は毎回まったく同じJSONを送信しています。私たちのデバイスの はAT ALL当社デバイスの
- 1は昨日よりも低い成功率(約70%)で、当社の機器の
- 1〜2プッシュ通知を受け、昨日はまだ受け取るため、プッシュ通知を受けていません今でも通知を正常にプッシュできます。
- 上記のすべてのデバイスは、昨日まで運用環境でプッシュ通知を適切に受信できました。
ありプッシュが成功したときのために、サーバー側の結果に違いはありません、デバイスは、それを受信しないとき... は、したがって、問題を特定することは事実上不可能です。
この私が使用しているサーバー側のPHPコードです:
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsData[$development]['certificate']);
$fp = stream_socket_client($this->apnsData[$development]['ssl'], $error, $errorString, 100, (STREAM_CLIENT_C ONNECT|STREAM_CLIENT_PERSISTENT), $ctx);
if(!$fp){
$this->_pushFailed($pid);
$this->_triggerError("Failed to connect to APNS: {$error} {$errorString}.");
}
else {
$msg = chr(0).pack("n",32).pack('H*',$token).pack("n",strlen($message)).$message;
$fwrite = fwrite($fp, $msg);
if(!$fwrite) {
error_log("[APNS] push failed...");
$this->_pushFailed($pid);
$this->_triggerError("Failed writing to stream.", E_USER_ERROR);
}
else {
error_log("[APNS] push successful! ::: $token -> $message ($fwrite bytes)");
}
}
fclose($fp);
をログにプッシュ(プライバシーのためのトークンを切り出し)成功したことを私に語った:
[Wed Dec 12 11:42:00 2012] [error] [client 10.161.6.177] [APNS] push successful! ::: aa4f******44 -> {"aps":{"alert":{"body":"\\u300casdfasdf\\u300d","action-loc-key":"OK"},"badge":4,"sound":"chime"}} (134 bytes)
方法私はこれを解決するのですか?
だから私はすべての単一のメッセージのためのソケットを開閉することはないというアドバイスを受けましたrアップルの公式文書に記載されているように推薦されています。 "複数の通知にまたがってAPNとの接続を維持する必要があります。 APNは、迅速かつ繰り返し確立され、サービス拒否攻撃として切断される接続を考慮する可能性があります。エラーが発生した場合、APNはエラーが発生した接続を閉じます。 " 複数のメッセージ間で接続を再利用するようにアーキテクチャを修正しようとしています。ありがとうございます – ashiina
いくつのプッシュ通知を送信していますか? – hjm
@hjm私は毎秒2を超えると言っています。 – ashiina