appstoreにアプリがあり、プッシュ通知が登録されています。それらは常に正常に機能していますが、「グローバル」プッシュを送信しようとしたところ、何か奇妙なことが起こりました。これは、サーバー側の.phpファイルにあるものです。
//Loop through tokens in tokenArray
$i = 0;
$t = 0;
foreach($tokenArray as $token)
{
$t++;
// Make notification
$msg = chr(0) . pack('n', 32) . pack('H*', $token) . pack('n', strlen($payload)) . $payload;
// Send
$result;
if($message != null)
{
$result = fwrite($fp, $msg, strlen($msg));
}
if ($result)
$i++;
}
// Close the connection to the server
fclose($fp);
if($i == 0)
{
echo 'The message was not delivered to anyone out of '.$t.'.';
}
else
{
echo 'The message was delivered to '.$i.' out of '.$t.'.';
}
これより前のコードは常に機能していましたが、それでも機能します。tokenArrayには、SELECT Token FROM Tokens;
SQLの場合と同様に、トークンを含むテーブルが含まれています。これは機能します。
開発中、自分のトークンだけが登録されると、携帯電話からアプリを削除したにもかかわらず、常に「メッセージは4つのうち4つに配信されました」と表示されていました。ここで、このコードを使用して、約1100の登録済みトークンすべてに送信しようとしました。メッセージが送信され、出力は「メッセージは1194のうち588に配信されました」でした。そして、私たちは自分たちで通知を受け取りませんでした!どういう意味ですか?
約5分後、自分のトークンのみを含む配列でtokenArrayを切り替えて、新しいプッシュを送信しました。それを電話で受け取りました。また、失敗した(チェックした)前の「tokenArray」に「working」トークンが存在することも知っています。
プッシュ通知は運が左右するゲームですか!?if($result)
失敗するとはどういう意味ですか?そして、なぜ500回以上フェイルオーバーしたのでしょうか。
証明書と.pemおよび.p12などはすべて機能しています。push1とpush2で行った唯一の違いは、SQLサーバーの元のテーブルからのクローンである別のテーブルを使用することでした。Table2には私のトークンしかなく、機能しました。その他の変更は行われませんでした。後で、すべてのトークンがに存在するSELECT Token FROM Tokens2
ことを証明しました。
誰かがプッシュを受け取ったかどうか、またはアプリがまだインストールされている1200の「ラッキー」588がそれを受け取ったかどうかはわかりません。Tokens2
Tokens
これの原因は何ですか?半分がすでに受信している場合に備えて、あえて別の送信を送信することはありません。一度にプッシュを送信できる速度に制限はありますか?または私たちは何が間違っているのですか?!助けてください、ありがとう。