1

サーバーから定期的に APN を受信するアプリケーションがあります。開始時に registerForRemoteNotificationTypes を呼び出し、定期的に (作業中に) 再要求します。デバイス トークンを正しく受信し、後で使用するためにバックステージ サーバーに送信します。

しかし、問題があります:
-アプリの起動後、アプリの起動時にiphoneによって生成されたデバイストークンを介してサーバーから送信されたすべてのapnsを正しく受信します。
-しかし、アプリが(再起動せずに)8〜12時間ほどバックグラウンドに留まると、何も
受信しなくなります-アプリ/サーバーログを確認すると、アプリが定期的にregisterForRemoteNotificationTypesを介して新しいトークンを適切に再要求し、まったく同じトークンを適切に受信することがわかりますバックステージサーバーは最初からapnsを送信し、ソケットを介してエラーなしでAppleに送信するためにそれを使用し続けて います
-しかし、メッセージは単にデバイスに表示されなくなり、didReceiveRemoteNotificationはまったく呼び出されません
-アプリを手動で終了して再起動すると役立ちます-registerForRemoteNotificationTypes別のものを返すトークンは非常にうまく機能します-サーバーはそれを使用してapnsを送信し、デバイスは予想どおりすぐにそれらを受信します.

そのため、iPhoneはアプリの起動時にのみトークンをAppleサーバーに再要求し、それをハードキャッシュしているようです。しかし、トークンにはまだ ttl 期間のようなものがあります。

アプリが要求するたびに、iPhoneに新しい実際のデバイストークンを強制的に返す方法はありますか? iPhoneにAppleサーバーのデバイストークンを強制的に再チェックさせて、本当に正常で正常であることを確認する方法は?

助けてください!


UPD:問題を絞り込むことができました-サンドボックスAPN環境を使用して問題のアプリ(開発中のため)-APN送信手順を拡張プロトコルに変更しましたが、しばらくするとaplleサンドボックスサーバーがエラー8で応答し始めました-無効なトークン. 同時に、デバイスは registerForRemoteNotification から同じ古いトークンを受け取ります。したがって、iOSによるトークンのリフレッシュには間違いなく問題があります

4

1 に答える 1

3

サンドボックス環境から本番環境に切り替えた後、問題はなくなりました。そのため、サンドボックスと本番のゲートには違いがあります。サンドボックス環境のデバイス トークン ttl は、本番環境よりもはるかに短くなっています。それでも、電話機自体のデバイス トークンは両方の環境で同じです。そのため、サンドボックス環境を使用するとこの問題が発生します-電話はアプリケーションの無効な(サーバーですでに無効になっている)デバイストークンを返します

于 2012-06-08T08:13:55.613 に答える