以前の記事、「プッシュ通知(APNs)の初期確認ダイアログについて」の続き。今になってはじめて気がついたというか、前々から変だと思っていたけど端末のせいにして自分は悪くない!と思っていた自分が一番馬鹿だった、というものです。

 

プッシュ通知の確認ダイアログ自体は書いたとおり一度しか表示されない、というのは変わらないのです。が、特定の再通知条件を満たさない間に再インストールするとデバイストークンが取得できないというものです。特殊なパターンなので具体的な例で言えば、

  1. enabledRemoteNotificationTypesをコールして現在のプッシュ通知が有効かどうかを調べる
  2. 有効なtypeがない場合にregisterForRemoteNotificationTypesをコールして通知ダイアログを表示する
  3. アプリケーションを再インストールする
  4. enabledRemoteNotificationTypesの値は正常なのにデバイストークンの値が取れない

というパターン。確認する限りは、再インストールの場合は既に[設定]上にプッシュ通知が有効になっているものの再度enabledRemoteNotificationTypesをコールしないとdidRegisterForRemoteNotificationsWithDeviceTokenがコールされないようで、これがデバイストークンの値を取得できない要因となっていたようです。なので、解決策としては2.で既に有効になっていてもregisterForRemoteNotificationTypesをコールする、ってのが手っ取り早い模様。

何も考えずにそれをコールしていればこんなにハマることはなかったのでしょうが、何かを変えるということはそれだけリスクを伴う場合があるってことですね。いい勉強になりました。