Android Instant应用中FirebaseApp初始化失败

7

我目前正在开发一个令人兴奋的Android应用程序,以创建即时应用程序版本。

我的Android Studio现在分成几个模块:

  • 业务对象模块(一个库)
  • 基础特性模块
  • 模块A功能模块
  • 应用程序模块(一个手机/平板电脑模块)
  • 即时应用程序模块

我的即时应用程序模块可以在手机/平板电脑上编译和启动,但每次都因Firebase问题而崩溃。我在logcat中收到以下消息:

I/FirebaseInitProvider: FirebaseApp初始化失败

根据文档,Firebase库与即时应用程序兼容,但我非常确定我没有将google-services.json文件移动到项目的正确位置...

这是我所做的:

  1. 我在Android Studio项目的build.gradle文件中定义了以下类路径依赖项:classpath 'com.google.gms:google-services:3.1.1'

  2. 我将google-services.json文件放入了我的模块基础目录中(因为文档要求这样做)

现在,如果我尝试将插件(apply plugin: 'com.google.gms.google-services')应用到基础模块的build.gradle文件中,我无法编译。我收到以下消息:

Error:Execution failed for task ':base:processGooglePlayProductionDebugFeatureGoogleServices'.

> No matching client found for package name 'com.mycompany.myapp.base'

实际上,在google-services.json文件中定义的包名称是应用程序使用的名称(因为根据文档,基础库不能与已安装的Android应用程序具有相同的包名称。

我还尝试将插件应用于已安装的应用程序和即时应用程序模块的build.gradle文件,并将google-services.json文件保留在基础模块中。应用程序可以编译,但我收到日志:“FirebaseApp初始化失败”。

所以我尝试将google-services.json文件移动到我的即时应用程序模块中,但仍然出现日志:“FirebaseApp初始化失败”。
我还尝试强制初始化,调用FirebaseApp类的静态方法initializeApp,但日志仍然存在。
我在网上找不到实现示例。 实际上,Google Sample repository没有使用google-services.json文件。
感谢您提前的帮助!
编辑:这是我的模块依赖关系:
我的基本功能模块的依赖项:
  implementation project(':businessobject')
  feature project(':moduleA')
  application project(':app')

我的模块A的依赖项-特性-模块:

api project(':base')
api project(':businessobject')

我的应用程序模块(一个手机/平板电脑模块)的依赖关系如下:
implementation (project(':base'))
implementation (project(':businessobject'))
implementation (project(':moduleA'))

我的即时应用模块(即即时应用模块)的依赖项:

implementation project(':base')
implementation project(':businessobject')
implementation project(':moduleA')

根据文档 (https://developer.android.com/topic/instant-apps/guides/analytics.html#adding_google_analytics_to_an_instant_app_project), google-services.json 文件应放置在基础特性/模块中:切换到项目视图,将 google-services.json 文件移动到基础模块的根目录。此 SO 帖子说明如何为 Android 应用程序配置 Firebase https://dev59.com/xl0Z5IYBdhLWcg3wrB2H#40800682 - Julia K
这个示例应用程序展示了如何将Google Analytics for Firebase集成到即时应用程序中:https://github.com/googlesamples/android-instant-apps/tree/master/analytics 在克隆此示例应用程序后,您需要将项目添加到Firebase控制台,然后下载为该项目生成的google-services.json文件并将其放置在您的base/模块中。 - Julia K
你是怎么解决的?我也遇到了同样的情况。 - Pablo Cegarra
1个回答

2
因为根据文档,基础库不能使用与已安装的Android应用程序相同的包名。我认为文档有点过时了。每个“特性”模块都需要使用不同的包名,因为这是生成“R类”的名称所使用的内容。据我所知,没有理由可以阻止“基础”特性使用与应用程序本身相同的包名。
似乎需要更新“google-services”插件,使“功能”插件使用应用程序ID而不是在“AndroidManifest.xml”中指定的名称(稍后将被覆盖为与应用程序ID相同)。
简而言之,将“基础”包的名称更改为“com.mycompany.myapp”应该能使事情正常工作。

1
我遇到了相同的问题,但我不理解你的解决方案,能否请你更好地解释一下? - Pablo Cegarra
@PabloCegarra,你能找到解决方案吗? - karan vs
是的...我用基本的Android示例开始了一个新应用程序,现在它正在工作。 - Pablo Cegarra
2
即时应用程序是一个头痛问题,现在我可以从Play商店运行我的即时应用程序,但Firebase显示初始化失败。 - Pablo Cegarra
1
@Ezio 不好意思,我删除了我的即时应用程序,太痛苦了 xD - Pablo Cegarra
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接