FirebaseInstanceId.getInstance().getToken() 不使用默认 FirebaseApp
FirebaseInstanceId.getInstance().getToken() without using Default FirebaseApp
我正在尝试使用 FCM 发送 Firebase 通知,但我有一个使用一个 Firebase 项目的应用程序和一个使用另一个 Firebase 项目的库。我想从库 Firebase 项目接收令牌以接收 Firebase 通知。
当我尝试使用以下方式直接接收令牌时:
FirebaseInstanceId.getInstance().getToken();
我收到了一个有效令牌,但来自 Application Firebase Project。如果我尝试强制进入 getInstance()
库 Firebase 项目,使用:
FirebaseInstanceId.getInstance(FirebaseApp.getInstance("ABC")).getToken();
我收到了null
。如果我尝试使用应用程序或库 Firebase 项目将 getToken()
中的参数传递为:
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 项目收到了相同的有效令牌。
the R.string.gcm_defaultSenderId is from library project resources
还有另一种接收 Library Firebase 项目令牌的方式,或者我做错了什么?
这是我根据我的实验和文档对您所观察到的内容的理解。
当您第一次调用 getToken()
使用 FirebaseApp
而不是默认值时,没有令牌,需要与服务器通信才能生成令牌。 returned 为空值,并启动了获取令牌的过程。 documentation for getToken() says it returns "the master token or null if the token is not yet available". After a few seconds the token is received. You can detect that event using the onTokenRefresh()
method of FirebaseInstanceIdService,如果你已经实现了。在随后为非默认应用程序调用 getToken()
时,令牌将出现并由 getToken()
立即 returned。
我认为获取作用域令牌的调用总是 return 令牌,因为它们正在阻塞 (see docs),并在 return 之前等待与服务器的交互完成正在获取结果。
我写错了FirebaseApp.initializeApp()
,因为我忘记设置了:
.setGcmSenderId(getApplication().getResources().getString(R.string.gcm_defaultSenderId))
在 FirebaseOptions.Builder()
中。
更改后,我在 getToken()
和 onTokenRefresh()
中收到有效的图书馆 Firebase 令牌
我正在尝试使用 FCM 发送 Firebase 通知,但我有一个使用一个 Firebase 项目的应用程序和一个使用另一个 Firebase 项目的库。我想从库 Firebase 项目接收令牌以接收 Firebase 通知。
当我尝试使用以下方式直接接收令牌时:
FirebaseInstanceId.getInstance().getToken();
我收到了一个有效令牌,但来自 Application Firebase Project。如果我尝试强制进入 getInstance()
库 Firebase 项目,使用:
FirebaseInstanceId.getInstance(FirebaseApp.getInstance("ABC")).getToken();
我收到了null
。如果我尝试使用应用程序或库 Firebase 项目将 getToken()
中的参数传递为:
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 项目收到了相同的有效令牌。
the R.string.gcm_defaultSenderId is from library project resources
还有另一种接收 Library Firebase 项目令牌的方式,或者我做错了什么?
这是我根据我的实验和文档对您所观察到的内容的理解。
当您第一次调用 getToken()
使用 FirebaseApp
而不是默认值时,没有令牌,需要与服务器通信才能生成令牌。 returned 为空值,并启动了获取令牌的过程。 documentation for getToken() says it returns "the master token or null if the token is not yet available". After a few seconds the token is received. You can detect that event using the onTokenRefresh()
method of FirebaseInstanceIdService,如果你已经实现了。在随后为非默认应用程序调用 getToken()
时,令牌将出现并由 getToken()
立即 returned。
我认为获取作用域令牌的调用总是 return 令牌,因为它们正在阻塞 (see docs),并在 return 之前等待与服务器的交互完成正在获取结果。
我写错了FirebaseApp.initializeApp()
,因为我忘记设置了:
.setGcmSenderId(getApplication().getResources().getString(R.string.gcm_defaultSenderId))
在 FirebaseOptions.Builder()
中。
更改后,我在 getToken()
和 onTokenRefresh()