0

私たちのビジネスロジックでは、実行時にFirebaseをインスタンス化する必要があります。ユーザの公開鍵を知っているの後に、デフォルトのFirebaseの場所からFirebaseの資格情報(アプリケーションID、APIキーなど)を取得し、それらの資格情報を使用してFirebaseインスタンスを作成します。私たちはそれから使用する予定 秒 動的にインスタンス化されたFirebaseからFCMトークンを生成できません

  • 実際Firebaseの資格情報を提供します

    1. デフォルトの「インデックス」Firebase:

      これはアプリ内で使用される二つのFirebaseのインスタンスが存在することを意味しますポイント は前方

    二Firebaseは次のように初期化される:

    FirebaseApp app = FirebaseApp.initializeApp(<context>, <options>, <app_label>); 
    

    私たちの問題はonTokenRefresh()方法が最初 Firebaseインスタンスによってのみ呼び出されるためFirebaseInstanceIdServiceonTokenRefresh()を使用してFCMトークンを取得する従来の方法が失敗したということです。

    String token = FirebaseInstanceId.getInstance(app).getToken();を直接呼び出すと、呼び出し時に準備ができていないため、nullが返されます。トークンがある時点で生成されたかどうかをテストするためにこれをポーリングすることさえ試みました。運がない。

    実行時にインスタンス化されたFirebaseインスタンスから確実にFCMトークンを生成できますか?

  • 答えて

    0

    一般的には、伝統的なトークンを取得する方法(getToken())のみが、メインのFirebaseインスタンスを参照しています。これはアプリ内のほぼどこでも呼び出すことができます(ただし、最初のアクティビティでよく呼び出されます)。これにより、google-services.jsonに表示されている送信者IDに関連付けられたトークンが返されます。トークンがまだ生成されている場合は、これがNULL を返すことも可能です。このような場合は、生成時にonTokenRefresh()がトリガーされます。あなたが別のFirebaseプロジェクトのためのFCM登録トークンを生成する場合

    しかし、あなたは(使用FirebaseIntsanceId.getInstance.getToken(String authorizedEntity, String scope)authorizedEntityはその異なる Firebaseプロジェクトの送信者IDがあるとscopeは「FCM」であることを確認する必要がありますデフォルトでFirebaseMessaging.INSTANCE_ID_SCOPEを使用できます)。

    要するに、トークンを生成するときにFirebaseインスタンスを指定する必要はありません。

    私の回答herehereもご覧ください。

    関連する問題