2

私のサーバーに常に最新のAPNSデバイストークンがあることを確認したいのですが、これは特定の状況下で変更される可能性があります。APNSデバイストークンを更新するための標準的な方法ですか?

キーチェーンに保存する必要がありますか?起動時に違いがあるかどうかを確認し、そうであればサーバーを更新しますか?

これを行う最善の方法はありますか?

答えて

6

Appleは実際にデバイストークンをローカルに格納しないと言っています。デバイストークンが必要な場合は、registerForRemoteNotifications()に電話してください。アップルから:

Never cache a device token; always get the token from the system whenever you need it. If your app previously registered for remote notifications, calling the registerForRemoteNotifications method again does not incur any additional overhead, and iOS returns the existing device token to your app delegate immediately. In addition, iOS calls your delegate method any time the device token changes, not just in response to your app registering or re-registering.

だから、あなたが何をする必要があるか起動時に、リモート通知の登録、およびサーバーにそのトークンを送っています。アップルから:私は最後のビットを理解していないhttps://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW25

+0

それはかなり決定的です!ありがとうございました。 –

+0

いいえ問題はありません –

+5

私はそれをキャッシュすることが重要かもしれないそのIMOを追加します。キャッシュしておけば、OSがそれを変更したかどうかを知ることができます(非常に非常にまれです)。その場合、新しいものをサーバーに送る必要があります。キャッシュしないと、アプリケーションが実行されるたびにトークンをサーバーに送信し、99.999999%の時間が不要になります。 – Gruntcakes

0

確かに、アプリが起動されるたびにプッシュ通知に登録する必要があります。アップルからのドキュメンテーションのように、トークンがいつ/いつ、いつ/いつ、変わるのかは決して分かりません。

第2に、実際にサーバーに送信しようとすると、サーバーエラーまたはインターネットの損失の場合にトークンをローカルに格納するコードを持つことができます。そして、このロジックは遅延と最大試行回数で再試行できます。しかしこれはかなり過剰で、KISSのようなものではありません。

あなたができることはdidRegisterForPushNotificationから取得してローカルに保存し、アプリのユーザーが「設定を更新」すると同時に送信することです。

+0

Device tokens can change, so your app needs to reregister every time it is launched and pass the received token back to your server.

あなたはここで多くのドキュメントを見つけることができます。設定を更新するとどういう意味ですか? –

+0

私はあなたのアプリのコンセプトを持っている場合、あなたのアプリからあなたのサーバーに電話をかけてユーザー設定を保存/保存するかもしれないということを意味しました。それはちょうど大文字小文字のときにもデバイストークンを送る良い機会になります。 – vincentroyc

関連する問題