0

Appleサーバーに一括プッシュメッセージを送信するサーバー側のJavaアプリケーションがあります。最近、複数のSSLSocketException: Connection closed by remote hostまたはSSLSocketException: Broken pipe expcetions が発生しています。

無効なトークンを送信している場合、Apple が強制的に接続を閉じることを理解しています。フィードバック ループもありますが、失敗したトークンは、Apple によってさえ受け入れられないため、フィードバック ループに表示されることはありません。

デバイストークンが「無効」である理由を知るためのアルゴリズムまたは方法はありますか?

4

1 に答える 1

2

デバイストークンが無効なのはなぜですか?

Apple からすべてのデバイス トークンを取得し、ダミー トークンを作成しなかったと仮定すると、無効なトークンの最も可能性の高い原因は、運用トークンとサンドボックス トークンの両方を持つ DB です。

無効なトークンを見つける方法:

メッセージ ID を指定する拡張 APN 形式を使用する必要があります。Apple にメッセージを送信するたびに、タイムアウトを十分に大きな値に設定してから、ソケットからの読み取りを試行する必要があります。Apple は、メッセージ ID を指定する無効なトークンのエラー応答を送信します。これにより、無効なトークンを見つけて、DB から削除できます。DB をクリーンアップするには、この方法 (長いタイムアウトで各メッセージの後に応答を読み取る) のみを使用する必要があることに注意してください。DB で無効なトークンが削除された後は、通知の配信が非常に遅くなるため、DB を使用したくありません。

于 2013-02-12T23:05:01.527 に答える