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

相關問題