我正在尝试使用 FCM 发送 Firebase 通知,但我有一个使用一个 Firebase 项目的应用程序和一个使用另一个 Firebase 项目的库。我想从库 Firebase 项目接收 token 以接收 Firebase 通知。
当我尝试使用以下方式直接接收 token 时:
FirebaseInstanceId.getInstance().getToken();
我收到了一个有效 token ,但来自 Application Firebase Project。如果我尝试在 getInstance()
库 Firebase 项目中强制执行,使用:
FirebaseInstanceId.getInstance(FirebaseApp.getInstance("ABC")).getToken();
我收到 null
。如果我尝试使用 Application 或 Library Firebase Project 在 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 项目收到了相同的有效 token 。
the R.string.gcm_defaultSenderId is from library project resources
还有另一种方法可以接收 Library Firebase 项目 token ,或者我做错了什么?
最佳答案
这是我根据我的实验和文档对您观察到的内容的理解。
当您第一次调用 getToken()
使用 FirebaseApp
而不是默认值时,没有 token ,需要与服务器通信才能生成 token 。返回空值并启动获取 token 的过程。 documentation for getToken()说它返回 “主 token 或如果 token 尚不可用则返回 null”。几秒钟后收到 token 。您可以使用 FirebaseInstanceIdService 的 onTokenRefresh()
方法检测该事件,如果你已经实现了。在随后为非默认应用调用 getToken()
时, token 将出现并由 getToken()
立即返回。
我认为获取作用域 token 的调用总是返回一个 token ,因为它们是阻塞的(see docs),并等待与服务器的交互完成后再返回结果。
关于android - 不使用默认 FirebaseApp 的 FirebaseInstanceId.getInstance().getToken(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39215267/