複数のデバイスに通知を送信しようとしています。したがって、配列へのトークンを取得し、接続を開き、ループで通知を送信し、接続を閉じます。
ただし、デバイスが 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同じコードで文字の問題がありましたが、別の質問で解決されました。これは別の問題であり、重複ではありません。