iOS 9からAPNSデバイストークンがアプリインストールの度に変わるようになったようです

  • 211
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

iOSのAPNSデバイストークンの変更タイミングは不定で、例えばAPNSデバイストークンの登録(通知サーバーへのリクエスト)は、毎回起動する度に行うことなど推奨されています。

とはいえ、観測・実験ベースで、変更タイミングが大体分かっていて、この記事など参考になります。(iOS 8までの挙動)

iOS 7にアップデートのタイミングで変わるようですが、iOS 8・9にアップデートのタイミングで変わるかは把握していません。
(むしろそれに頼るより、不定であるということを意識することが重要だと思っています。)

iOS 9からはAPNSデバイストークンがアプリインストールの度に変わる模様

しばらく前から気付いていましたが、iOS 9がGM版になってもこの挙動なので、記事にしました。
アプリをインストールし直す度に、UIApplicationのこのメソッドを初めて呼んだタイミングで通知確認ダイアログが表示されるようになりました。

public func registerUserNotificationSettings(notificationSettings: UIUserNotificationSettings)

Untitled.png

さらに、こちらに渡されるdeviceTokenも変わることを確認しています。

func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!)

これによる影響は?

基本的には、開発しやすくなると思っています。

今まで、通知確認ダイアログを再表示するには、端末をリセットしたり、時間ズラして再表示させる技など、使う必要があって面倒でした。

参考: iphone - Reset push notification settings for app - Stack Overflow

さらに、デバイストークンが変わるような状態を再現となると、冒頭に書いたとおりさらに大変になります。

シミュレーターの場合は、簡単に端末リセットが出来るのでダイアログを出すことまでは簡単ですが、そもそも通知はシミュレーターには届かなかったりで一貫した確認が出来ませんし、最終的には実機での確認もしたいところですし。

それらの苦労が無くなり、アプリをインストールするだけで再現出来るようになるので、かなり捗るかと思っています。

気になることとしては、今までよりもデバイストークンの変更頻度が増えて無効なデバイストークンの増加ペースが上がるので、そのあたりの処理をこれまでよりきちんとしていかないと良くないと思います。