1

複数のデバイスに通知を送信しようとしています。したがって、配列へのトークンを取得し、接続を開き、ループで通知を送信し、接続を閉じます。

ただし、デバイスが 9 ~ 10 台になると、送信が停止します。Apple はどういうわけか接続を切断していると思います。

これが私のコードです:

$message = 'Push';
$passphrase = 'mypass';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'MyPemFile.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
    'ssl://gateway.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 Apple service. ' . PHP_EOL;

// Encode the payload as JSON
$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );
$payload = json_encode($body);

$result = 'Start'.PHP_EOL;
$tokenArray = array('mytoken');
foreach ($tokenArray as $item)
{
// Build the binary notification
$msg = chr(0).pack('n', 32).pack('H*', $item).pack('n', strlen($payload)).$payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
    echo 'Failed message'.PHP_EOL;
else
    echo 'Successful message'.PHP_EOL;
}
// Close the connection to the server
fclose($fp);

私のコードに何か問題がありますか? 一度接続を開き、通知を送信してから閉じる必要があると思います。複数のトークンで fwrite() を実行する必要がありますか? 方法はわかりませんが。どんなアイデアや解決策も受け入れられます。

ちなみに答えはこんな感じです。

Successful message  
Successful message  
Successful message  
Successful message  
Successful message  
Successful message  
Successful message  
Successful message  
Successful message  
Successful message
Failed message
Failed message
Failed message
Failed message
Failed message
...
Failed message

PS同じコードで文字の問題がありましたが、別の質問で解決されました。これは別の問題であり、重複ではありません。

4

1 に答える 1

1

最初に失敗したメッセージに問題がある可能性があります。その時点で、Appleは接続を閉じて、問題が発生したことを通知します。拡張フォーマットを使用している場合は、Appleが接続を閉じる前にフィードバックを取得して、送信した通知の何が問題になっているのかを確認する機会があります。これが発生した後、さらにメッセージを送信するには、接続を再確立する必要があります。

失敗する理由はいくつかあります。無効なデバイストークンを送信したか、ペイロードが無効であるか、長さが間違っている可能性があります。

APNSのドキュメントを確認してください:http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html

于 2012-10-03T12:48:39.663 に答える