我正在尝试使用FCM发送Firebase通知,但我有一个使用一个Firebase项目的应用程序和一个使用另一个Firebase项目的库。我想从库Firebase Project接收令牌以接收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);
我从Application Firebase Project收到了相同的有效令牌。
R.string.gcm_defaultSenderId 来自图书馆项目资源
还有另一种方法可以接收Library Firebase Project令牌,或者我做错了什么?
答案 0 :(得分:2)
根据我的实验和文档,这是我对你观察的内容的理解。
当您第一次使用sortedTasks[0].sort_by do |task|
task[:date]
end
以外的默认值调用getToken()
时,没有令牌,需要与服务器进行通信才能生成一个令牌。返回空值,并启动获取令牌的过程。 documentation for getToken()表示返回"主令牌,如果令牌尚未可用,则返回null" 。几秒钟后,收到令牌。如果已实现,则可以使用FirebaseInstanceIdService的FirebaseApp
方法检测该事件。对于非默认应用程序的后续onTokenRefresh()
调用,该令牌将出现并由getToken()
立即返回。
我认为获取范围标记的调用总是返回一个标记,因为它们阻塞(see docs),并在返回结果之前等待与服务器的交互完成。
答案 1 :(得分:0)
我在FirebaseApp.initializeApp()
犯了一个错误,因为我忘了设置:
.setGcmSenderId(getApplication().getResources().getString(R.string.gcm_defaultSenderId))
FirebaseOptions.Builder()
中的。
更改后,我在getToken()
和onTokenRefresh()