FCMで個別端末への通知を行うにはトークンを取得する必要があります。
このトークンはFCM初期化後のTokenReceived
で受け取るのですが、
8.0.0以降のバージョンでは2回目以降の起動時にTokenReceived
が呼ばれないことがあります。
Androidでのみ再現し、機種や環境などが原因ではなく稀に発生するようです。
このバグは10.7.0でも修正されていません。
対策
https://github.com/firebase/quickstart-unity/issues/1088#issuecomment-1191030814
同スレッドで対策方法が紹介されています。
FirebaseMessaging.TokenReceived
のデリゲートで受け取らず、
FirebaseMessaging.GetTokenAsync()
でトークンを取得します。
public async void InitFirebase() { try { var dependencyStatus = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync(); if (Firebase.DependencyStatus.Available != dependencyStatus) { // error. return; } #if UNITY_IOS // iOSは問題ない Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; #else // Androidは手動で取得 Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; var token = await Firebase.Messaging.FirebaseMessaging.GetTokenAsync(); // register token. #endif } catch (Firebase.FirebaseException) { // error. } catch (System.Exception) { // error. } }
asyncを使用せずメインスレッドで処理したい場合はContinueWithOnMainThread
を使います。
// using Firebase.Extensionsが必要 Firebase.Messaging.FirebaseMessaging.GetTokenAsync().ContinueWithOnMainThread(task => { if(true == task.IsCompletedSuccessfully) { // register token. } });