【问题标题】:Unable to generate FCM token from dynamically instantiated Firebase无法从动态实例化的 Firebase 生成 FCM 令牌
【发布时间】:2017-04-07 04:58:47
【问题描述】:

我们的业务逻辑要求我们在运行时实例化 Firebase。我们从默认 Firebase 位置获取 Firebase 凭据(应用 ID、API 密钥等)知道用户的公钥并使用这些凭据创建 Firebase 实例。

这意味着应用中使用了两个 Firebase 实例:

  1. 默认的“索引”Firebase 为我们提供了 第二
  2. 从那时起我们打算使用的实际 Firebase 前进

第二个 Firebase 的初始化如下:

FirebaseApp app = FirebaseApp.initializeApp(<context>, <options>, <app_label>);

我们的问题是使用FirebaseInstanceIdServiceonTokenRefresh() 检索FCM 令牌的传统方法失败了,因为onTokenRefresh() 方法仅由第一个 Firebase 实例调用。

直接调用String token = FirebaseInstanceId.getInstance(app).getToken(); 会返回 null,因为它在调用时永远不会准备好。我们甚至尝试轮询它以测试是否在某个时候生成了令牌。没有运气。

我们如何从运行时实例化的 Firebase 实例可靠地生成 FCM 令牌?

【问题讨论】:

    标签: android firebase google-cloud-messaging firebase-cloud-messaging


    【解决方案1】:

    一般来说,只有获取令牌 (getToken()) 的传统 方法是唯一引用主 Firebase 实例的方法。这几乎可以在您的应用程序中的任何位置调用(但通常在初始活动中调用)。这将返回与您的 google-services.json 中显示的发件人 ID 关联的令牌。 if 令牌仍在生成中,这也可能返回 null。在这种情况下,onTokenRefresh() 在生成时被触发。

    但是,如果您打算为不同的 Firebase 项目生成 FCM 注册令牌,则必须使用 FirebaseIntsanceId.getInstance.getToken(String authorizedEntity, String scope),其中 authorizedEntity 是该不同 Firebase 的发件人 ID项目和scope 是“FCM”(您可以使用FirebaseMessaging.INSTANCE_ID_SCOPE 作为默认值)。

    简而言之,生成令牌时不需要指定 Firebase Instance。

    另请参阅我的回答 herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多