【问题标题】:Android client FirebaseApp initialization errorAndroid客户端FirebaseApp初始化错误
【发布时间】:2016-06-30 20:34:05
【问题描述】:

我已经实施了 GCM,我现在正尝试将 GCM 导入 FCM。我不想使用 google-services.json,因为我想为不同的环境(Dev、Stag、Prod)使用不同的谷歌项目。

我尝试通过下面的代码初始化应用程序

 FirebaseOptions.Builder options=new FirebaseOptions.Builder();
       options.setGcmSenderId("<<project id>>"); 
       options.setApplicationId("<<Project name>>"); 
       FirebaseApp firebaseApp = FirebaseApp.initializeApp(getApplicationContext(),options.build(),"MyTestFCM");
       String refreshedToken= FirebaseInstanceId.getInstance(firebaseApp).getToken();

我在 Firebase 应用初始化时不断收到异常

原因:java.lang.IllegalStateException:名称为 [DEFAULT] 的 FirebaseApp 不存在。可用的应用名称:MyTestFCM

如果我删除了应用程序名称,那么我不会得到一个令牌,然后当我重新运行应用程序时,我会得到一个令牌。我试图从 Mainactivity 和 Application 类执行上述代码。在这两个地方我都得到同样的错误。

所以我的问题是如何在不使用 google-services.json 的情况下初始化 Firebase 应用程序

谢谢, P

【问题讨论】:

标签: android firebase-cloud-messaging


【解决方案1】:

Firebase SDK 需要通过 google-services.json 配置“默认”项目

一旦你有了这个,你就可以使用FirebaseInstanceId.getInstance(context).getToken(...)向其他发件人ID注册FCM sdk

但请注意,最新的 FCM 功能(自动重试注册、主题订阅)仅适用于默认项目。

【讨论】:

  • 但我想为不同的发布类型使用不同的项目。如果我只能使用一个 google-services.json,我该如何管理
  • 你应该可以通过 gradle 文件中的一些额外配置来做到这一点。
  • 是的,一旦您在 gradle 文件中定义了不同的构建类型,您就可以将相应的 google-services 文件放在适当的目录中,插件将在默认为应用程序之前查找该文件目录。查看已解决的这个 github 问题:github.com/googlesamples/google-services/issues/54
  • 如果 FCM 不是默认项目,是否有任何文档可以准确解释哪些功能不可用?
【解决方案2】:

事实证明,您需要将 google-services.json 用于 FCM,并处理多个构建变体的情况,

  1. 从 firebase 控制台为不同的构建变体生成相应的 google-services.json。
  2. 下载 google-services.json
  3. 在您的项目中为变体创建文件夹,例如,如果您想要发布版本,请创建一个名为“release”的文件夹并将 google-services.json 放入其中。

应用构建时,根据构建变体,它会在相应文件夹中查找 google-services.json 并从中获取项目详细信息。

更多细节可以在这个帖子上找到 google services issues 54

感谢亚瑟汤普森

【讨论】:

    【解决方案3】:

    您是否检查并确保将您的 FIREBASE_URL 设置为正确的字符串?您是否还确保拥有适当的应用设置配置?

    上次发生这种情况时,我需要设置我的 Android 应用配置。 https://support.google.com/firebase/answer/7015592

    之后,您可以按照此设置进行操作。 https://firebase.google.com/docs/cloud-messaging/android/client

    【讨论】:

    • 问题是我不想使用 App 配置,我想为不同的发布类型使用不同的项目 ID,所以我不能使用相同的 google-service.json 文件。这就是我尝试使用项目 ID 显式启动 FirebaseApp 的原因。当我使用 google-services.json 时,我可以毫无问题地接收通知。
    • 如果是这种情况,你可以根据你所处的环境指向不同的google-service-prod.json或google-service-dev.json。你试过了吗?
    • 在这种情况下,我如何使代码指向不同风格的 google-services.json
    【解决方案4】:

    请仔细检查,您已添加

    应用插件:“com.google.gms.google-services” 在应用程序的 gradle 文件的底部,然后清理并重建项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 2013-05-11
      • 1970-01-01
      • 2016-02-09
      • 2021-07-11
      相关资源
      最近更新 更多