2012-12-12 17 views
9

昨日から一部のデバイスでプッシュ通知が受信されないという問題が発生しています。 昨日までにデバイスがプッシュ通知を正常に受信したため、証明書/デバイストークンは正しいと思われます( )。プッシュ通知は正常に送信されましたが、デバイスは受信しません(時々)

サーバー側では、エラーまたは接続の拒否はなく、 であり、毎回プッシュ通知が正常に送信されたようです。

しかし、まだデバイスがプッシュを正しく受信しない場合があります。

いくつかの周囲の情報:

  • 私は、本番環境でこれをやっています。
  • サーバー側のエラー/接続の拒否はありません
  • 私は毎回まったく同じ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) 

方法私はこれを解決するのですか?

+0

だから私はすべての単一のメッセージのためのソケットを開閉することはないというアドバイスを受けましたrアップルの公式文書に記載されているように推薦されています。 "複数の通知にまたがってAPNとの接続を維持する必要があります。 APNは、迅速かつ繰り返し確立され、サービス拒否攻撃として切断される接続を考慮する可能性があります。エラーが発生した場合、APNはエラーが発生した接続を閉じます。 " 複数のメッセージ間で接続を再利用するようにアーキテクチャを修正しようとしています。ありがとうございます – ashiina

+1

いくつのプッシュ通知を送信していますか? – hjm

+0

@hjm私は毎秒2を超えると言っています。 – ashiina

答えて

4

私はこれを自分で解決しましたので、回答を投稿します。私はアップル社の公式文書で述べたように、開口部と一つ一つのメッセージのためのソケットを閉じるが、推奨されていないことをアドバイス受け取った

を「あなたはまた、複数の通知間のAPNとの接続を維持する必要があります。APNは、迅速かつ繰り返し確立され、サービス拒否攻撃として切断される接続を考慮する可能性があります。エラー時には、APNのは、エラーが発生した接続を閉じます。」

接続は、複数のAPNSコール全体で保持されるように、私は私のアーキテクチャを固定し、今では何の問題もなく働いている。 私は、キューイング・システムを作成しました。のAPN-PHP(https://code.google.com/p/apns-php/)に基づいて

ここでは、私のコードは、それを必要とする人のために、次のとおりです。

https://github.com/ashiina/APNS-QueueServer

1

最初にデバイスが脱獄されていることを確認してから、PushNotificationをサポートしません。そのためには、CydiaからSAMPrefアプリをダウンロードし、そのアプリを開いてから、あなたの端末がプッシュ通知をサポートしている必要があります。アプリストアのiPusherアプリを使用して、プッシュ通知のために端末をテストすることができます。プッシュ通知を受信すると、デバイスがサポートされます。

最初に、プッシュ通知が有効な証明書を使用してアプリに署名していることを確認しますか?

ありがとう

関連する問題