2016-08-29 13 views
0

FCMを使用してFirebase通知を送信しようとしていますが、Firebaseプロジェクトを1つ使用するアプリケーションと、別のFirebaseプロジェクトを使用するライブラリがあります。ファイアベース通知を受け取るためにFirebase Projectの図書館からトークンを受け取りたい。FirebaseInstanceId.getInstance()。デフォルトのFirebaseAppを使用しないgetToken()

私が使用してトークンを受け取る直接しようとすると:

FirebaseInstanceId.getInstance().getToken(); 

私はしかし、アプリケーションFirebaseプロジェクトから、有効なトークンを受け取りました。私が使用して、getInstance()にライブラリFirebaseプロジェクトを強制しようとした場合:

FirebaseInstanceId.getInstance(FirebaseApp.getInstance("ABC")).getToken(); 

を私はnullを受けます。私のようにgetToken()でパラメータを渡すアプリケーションまたはライブラリFirebaseプロジェクトを使用しようとすると:

FirebaseInstanceId.getInstance().getToken(getApplication().getResources().getString(R.string.gcm_defaultSenderId), FirebaseMessaging.INSTANCE_ID_SCOPE); 

または

FirebaseInstanceId.getInstance(FirebaseApp.getInstance("ABC")).getToken(getApplication().getResources().getString(R.string.gcm_defaultSenderId), FirebaseMessaging.INSTANCE_ID_SCOPE); 

私は、アプリケーションFirebaseプロジェクトから同じ有効なトークンを受け取りました。

R.string.gcm_defaultSenderIdがあり図書館Firebaseプロジェクト・トークンを受信するための別の方法があるか、私は何か間違ったことをやっているライブラリプロジェクトのリソースから

のですか?

+0

に有効なライブラリのFirebaseトークンを受け取りました。同じ問題がありました。 もう一度起動すると、有効なトークンがありますか? – Initerworker

+0

@Initerworker、残念ながらいいえ。私はいつも同じ結果を受け取ります。 – davips

答えて

0

私が設定するのを忘れたので、私は、FirebaseApp.initializeApp()でミスを犯した:FirebaseOptions.Builder()

.setGcmSenderId(getApplication().getResources().getString(R.string.gcm_defaultSenderId)) 

を。 その変更後、getToken()onTokenRefresh()

2

これは私の実験とドキュメントに基づいてあなたが観察していることを私が理解したものです。

を最初に呼び出すときは、デフォルト以外のFirebaseAppを使用して、トークンがなく、サーバーとの通信が必要です。 NULL値が戻され、トークンをフェッチするプロセスが開始されます。 documentation for getToken()は、"マスタートークンを返します。トークンがまだ利用できない場合はnull"を返します。数秒後にトークンが受信されます。 onTokenRefresh()メソッドをFirebaseInstanceIdServiceとして使用してそのイベントを検出することができます。その後デフォルト以外のアプリのgetToken()への呼び出しでトークンが存在し、すぐにgetToken()によって返されます。

スコープ付きトークンを取得するための呼び出しは、ブロックされているため(see docs)トークンを返し、結果を返す前にサーバーとのやりとりが完了するのを待ちます。

+0

私が以下で説明した変更の後、getToken()とonTokenRefresh()にも有効なトークンを受け取ります。助けてくれてありがとう。 – davips

関連する問題