0

我们的业务逻辑要求我们在运行时实例化Firebase。我们从默认Firebase位置获取Firebase凭据(应用ID,API密钥等),然后知道用户的公钥,并使用这些凭据创建Firebase实例。无法从动态实例化生成FCM令牌Firebase

这意味着有在应用程序中使用的两个火力地堡实例:

  1. 默认的“指数”火力地堡给我们,我们打算从使用的 第二
  2. 实际火力地堡凭据点 向前

第二火力地堡被初始化这样的:

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

我们的问题是,由于onTokenRefresh()方法由第一火力地堡实例只叫检索使用FirebaseInstanceIdServiceonTokenRefresh()的FCM令牌的传统方法失败。

直接调用String token = FirebaseInstanceId.getInstance(app).getToken();返回null,因为它在调用时从未准备好。我们甚至尝试过对此进行轮询,以测试某个点是否生成了令牌。没有运气。

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

回答

0

通常,只有传统获取令牌的方法(getToken())是唯一指向主Firebase实例的方法。这可以在您的应用程序的几乎任何位置调用(但通常在初始活动中调用)。这将返回与您在google-services.json中看到的发件人ID关联的令牌。如果仍然在生成令牌,则也可以返回空值。在这种情况下,onTokenRefresh()会在生成时触发。

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

简而言之,您在生成令牌时无需指定Firebase实例。

另请参阅我的回答herehere

相关问题