单个Firebase项目接入多Android应用初始化报错如何解决
初始化未生效原因
你当前的初始化代码传入了第三个参数"adminapp"作为自定义实例名,只会生成非默认的命名Firebase实例。如果后续调用Firestore、Auth等服务时没有显式指定该实例,系统会默认读取未初始化的默认实例,就会抛出你遇到的报错:
java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process [package name]. Make sure to call FirebaseApp.initializeApp(Context) first.
同项目多Android应用接入正确方案
方案1:自动初始化(优先推荐)
无需手写初始化代码,操作更稳定:
- 进入Firebase控制台的对应项目,在项目设置页分别添加普通用户端、教练端两个Android应用,正确填写各自的包名、签名SHA-1值
- 分别下载两个应用对应的
google-services.json文件,放到各自Android项目的app/目录下 - 两个项目的顶层和应用级
build.gradle正确配置google services插件即可,编译后Firebase会自动完成默认实例的初始化。
方案2:手动初始化
如果确需手动写初始化代码,分两种场景处理:
场景A:单应用仅对接一个Firebase项目
不需要指定第三个实例名参数,直接初始化默认实例即可:
private fun firebaseInit() { val options = FirebaseOptions.Builder() .setProjectId("你的项目ID") .setApplicationId("当前应用对应的Firebase应用ID") .setApiKey("当前应用对应的API密钥") .build() // 不传第三个参数,初始化默认实例 FirebaseApp.initializeApp(this, options) }
后续调用Firebase服务时直接用默认调用方式即可,比如FirebaseFirestore.getInstance()。
场景B:单应用需对接多个Firebase项目
需要保留命名实例,调用服务时显式指定对应实例即可:
// 初始化命名实例 val adminApp = FirebaseApp.initializeApp(this, options, "adminapp") // 调用服务时传入实例 val db = FirebaseFirestore.getInstance(adminApp)
参数获取路径
所有参数都可以在Firebase控制台的项目设置页获取:
projectId:在「常规」标签的「项目」板块直接查看项目ID字段即可ApplicationId、ApiKey:在「常规」标签的「您的应用」板块,切换到对应Android应用的卡片:- ApplicationId对应卡片内的「应用 ID」字段
- ApiKey对应卡片内的「Web API 密钥」字段
注意:两个应用的ApplicationId、ApiKey是相互独立的,不要混用,配置错误也会导致初始化失败。
内容的提问来源于stack exchange,提问作者Dávid Koplányi
相关产品推荐
相关产品推荐

