FirebaseInstanceId.getInstance()。getToken(),不使用默认FirebaseApp

时间:2016-08-29 21:09:33

标签: android firebase firebase-cloud-messaging

我正在尝试使用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令牌,或者我做错了什么?

2 个答案:

答案 0 :(得分:2)

根据我的实验和文档,这是我对你观察的内容的理解。

当您第一次使用sortedTasks[0].sort_by do |task| task[:date] end 以外的默认值调用getToken()时,没有令牌,需要与服务器进行通信才能生成一个令牌。返回空值,并启动获取令牌的过程。 documentation for getToken()表示返回"主令牌,如果令牌尚未可用,则返回null" 。几秒钟后,收到令牌。如果已实现,则可以使用FirebaseInstanceIdServiceFirebaseApp方法检测该事件。对于非默认应用程序的后续onTokenRefresh()调用,该令牌将出现并由getToken()立即返回。

我认为获取范围标记的调用总是返回一个标记,因为它们阻塞(see docs),并在返回结果之前等待与服务器的交互完成。

答案 1 :(得分:0)

我在FirebaseApp.initializeApp()犯了一个错误,因为我忘了设置:

.setGcmSenderId(getApplication().getResources().getString(R.string.gcm_defaultSenderId))
FirebaseOptions.Builder()中的

。 更改后,我在getToken()onTokenRefresh()

中收到了有效的图书馆Firebase令牌