😬

[iOS]DeviceTokenが急に取得できなくなったが、OSのupdateで解決した話

2024/01/09に公開

概要

"DeviceToken"が急に取得できなくなったため、解決策を模索した結果、iOSのupdateによって再び取得できるようになった。

背景

PushNotificationのdebugのために、 Push Notifications Consoleを利用して実機デバッグを行っていた。
PushNotificationをconsoleから送信するためには、送信対象のデバイスのDeviceTokenが必要となる。
気付くと、一ヵ月ほど前までは取得できていたDeviceTokenが取得できなくなっていた。

環境(2024/01/09)

デバッグしていたデバイス:iPhone 12 Pro max (iOS 14.6).

  • iOS 14.6は2021/05/24リリースだったらしい。
  • 現時点での最新のOSは、iOS 17.2.1

そもそも

APNsとは

"Apple Push Notification Service"の略。
APNsを経由することで、デバイスにPush Notificationを送信できる。

DeviceTokenとは

APNs上で一意である、デバイスを識別するためのトークン。デバイスとアプリケーションの組に対して、トークンがひとつ割り当てられる。
アプリケーションの起動時に、DeviceTokenをAPNsに送信し登録することで、PushNotificationを受け取ることができる。

試したこと

  1. Target設定のCapabilities -> Push Notificaoinsが有効になっているか。 -> なっている
  2. registerForRemoteNotificationsを呼んでいるか。 -> 呼んでいる
  3. 以下のどちらかが呼ばれているか。 -> どちらも呼ばれていない
    • application( application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
    • application( application: UIApplication!, didFailToRegisterForRemoteNotificationsWithError error: NSError! )
  4. OSのバージョンが古すぎることが原因と思い、iOSのversionを、updateしてみる。(iOS 14.6 -> iOS 17.2)-> DeviceTokenが取得できた!

まとめ

DeviceTokenが取得できなくなった場合、まず、以下のことをチェックする。

  • プロジェクトの設定を確認する。
  • registerForRemoteNotificationsdidRegisterForRemoteNotificationsWithDeviceTokenが呼ばれているかを確認する。

それでもダメな場合、かつ、OS versionが古いことが原因として疑われるなら、OS versionを上げてみると解決するかもしれない。(私の場合はこれで直りました)

Refs

Discussion