2016-06-25 4 views
1

プッシュ通知がうまく機能していました。しかし、どこから何回かは、それがエラーを与えて起動します:APNS - 通知プッシュios:ピアによる接続のリセットPHP

stream_socket_client():SSL:ピア

Weird thing is i don't have to do anything to resolve it but wait. After sometime, it starts working back again.

による接続リセット私はそれのような多くの質問の重複知っています: notifications-push-ios-connection-reset-by-peer しかし、それらのどれも私の問題を解決しません。

私が使用中のソケット接続

コードを生成するPHPのstream_socket_clientを使用していますがある:私は本当にそれの主な理由で私の指を置くことができない

<?php 
ini_set('display_errors','On'); 
error_reporting(E_ALL); 
$deviceToken= 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';  
$passphrase = ' '; 
$message = 'my first notification'; 
//////////////////////////////////////////////////////////////////////////////// 
$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 
if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 
echo 'Connected to APNS' . PHP_EOL; 
// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 
// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 
// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 
if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 
// Close the connection 
} 

答えて

1

。しかし、確認してください、あなたは間違っている以下のもののいずれかを行っていない

  • は並列で多くの接続をしないでください。プッシュ通知を送信した後、同じ接続を再利用するか、接続を閉じます。実際には、サーバーには並列接続の最大数に制限があり、しきい値に達すると問題が発生する可能性があります。また、Appleはアイドル状態になることがわからない限り、接続を開いたままにすることを提案しています。

Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day.

  • APNSを生きるために開発者プロファイルのトークンを送信しないでください。配信アプリと開発アプリのトークンを分けてください。サンドボックストークンをLIVE APNSに送信しようとすると、エラーが発生する可能性があります。逆の場合も同じです。
+1

接続が正しく閉じていない可能性があります。私はそれを確認します。 – Rythm

関連する問題