0

プッシュ通知のためにパケットを Apple に送信していますが、デバイスに表示されず、フィードバック サービスもエラーを報告しません。パッケージはこんな感じ。誰かがここで何が悪いのか分かりますか? パケットを処理しすぎるとエラーが返されるので、サンドボックスとの通信に成功したことがわかります。私が無効なトークンを与えた場合、それも教えてくれます。

# php send.php | xxd<br/>
0000000: 0100 0000 0151 09d1 af00 2070 d7d9 0472  .....Q.... p...r
0000010: 443b f4c5 cd59 d581 dc3c 3da9 ee68 413e  D;...Y...<=..hA>
0000020: 8a9f 2566 285e 354e 9b26 ae00 367b 2261  ..%f(^5N.&..6{"a
0000030: 7073 222c 7b22 616c 6572 7422 3a22 5365  ps",{"alert":"Se
0000040: 6e74 2030 363a 3036 3a33 3920 504d 222c  nt 06:06:39 PM",
0000050: 2273 6f75 6e64 223a 2264 6566 6175 6c74  "sound":"default
0000060: 227d 7d                                  "}}<br/>

PHPから次のようにパケットを作成しています:

pack('CNNnH*', 1, $id++, $expiration, 32, $token) . pack('n', $messageLength) . $message;
4

1 に答える 1

0

通常、Apple がエラーを検出すると、サーバーとのソケット接続を閉じます。fwriteを使用している場合は、fwrite が失敗したか、fwrite の長さが apns メッセージの長さよりも短いというキャッチがあることを確認してください。データを Apple に送信した後、接続に失敗しましたか? はいの場合、ペイロード形式は間違いなく間違っています。

プッシュ通知を送信する方法は 2 つあります。$expirationプロパティが表示されているので、ペイロードがわずかに異なるバイナリ メソッドを使用していると思います。使用している方法に応じて、適切なペイロード形式を使用していることを確認してください。最初に非バイナリ メソッドを使用してみて (より単純であるため)、次にバイナリ メソッドに進むことをお勧めします。

于 2013-01-30T14:08:09.967 に答える