FCMトークンの仕様
Firebase Cloud Messagingを使ってアプリへのプッシュ通知テストをする際に、Firebaseコンソール上で対象デバイスのFCMトークンを登録する必要があります。
このFCMトークンがデバッグ中にいつのまにか変わっていることがあり、挙動を把握するためドキュメントで仕様を確認してみました。
OS毎に挙動が異なるようだったので、それぞれの生成・更新タイミングをメモしておきます。
Android
【参照】Android で Firebase Cloud Messaging クライアント アプリを設定する | Firebase
生成タイミング
アプリを初めて起動すると、クライアント アプリのインスタンスの登録トークンが FCM SDK によって生成されます。単一のデバイスを対象にする場合、またはデバイス グループを作成する場合は、FirebaseMessagingService を拡張して onNewToken をオーバーライドすることで、このトークンにアクセスする必要があります。
https://firebase.google.com/docs/cloud-messaging/android/client?hl=jp#sample-register
更新タイミング
トークンは最初の起動後にローテーションされている可能性があるため、更新された最新の登録トークンを取得することを強くおすすめします。
登録トークンは次のような場合に変更されることがあります。
- アプリによってインスタンス ID が削除される場合
- アプリが新しいデバイスで復元される場合
- ユーザーがアプリをアンインストール / 再インストールする場合
- ユーザーがアプリのデータを消去する場合
https://firebase.google.com/docs/cloud-messaging/android/client?hl=jp#sample-register
iOS
【参照】iOS で Firebase Cloud Messaging クライアント アプリを設定する | Firebase
生成タイミング
デフォルトでは、FCM SDK はアプリの起動時にクライアント アプリのインスタンスの登録トークンを生成します。APNs デバイス トークンの場合と同様に、このトークンを使用すると、ターゲットとする通知をアプリの特定のインスタンスに送信できます。
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=jp#access_the_registration_token
更新タイミング
iOS が通常、アプリ起動時に APNs デバイス トークンを配信するのと同じ方法で、FCM は FIRMessagingDelegate の messaging:didReceiveRegistrationToken: メソッドによって登録トークンを提供します。FCM SDK は、アプリの初期起動時ならびにトークンが更新または無効化されるたびに、新規または既存のトークンを取得します。いずれの場合も、FCM SDK は有効なトークンを使用して messaging:didReceiveRegistrationToken: を呼び出します。
登録トークンは次のような場合に変更されることがあります。
- アプリが新しいデバイスで復元される場合
- ユーザーがアプリをアンインストール / 再インストールする場合
- ユーザーがアプリのデータを消去する場合
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=jp#access_the_registration_token
これまで受信できていた場合はトークン更新の有無を確認
Cloud Messagingの動作確認中、急にテスト通知が届かなくなった場合は、上記タイミングでFCMトークンの更新がかかっていないか確認しましょう。