Firebase Unity项目中修改应用变体Provider名称以解决安装冲突的方法咨询
解决Unity双应用Firebase Provider冲突,实现同设备共存
我来帮你搞定这个问题——这个坑我之前也踩过!核心原因是FirebaseInitProvider的提供者名称(authority)还在沿用第一个应用的包名,系统检测到两个应用用了同一个Provider ID,自然就不让安装了。下面给你几种靠谱的解决办法,按操作难度从低到高排序:
最省心的办法:替换app2专属的google-services.json
虽然你已经在Firebase控制台添加了app2,但如果Unity项目里还在用app1的google-services.json,Firebase SDK会自动生成基于app1包名的Provider配置。你可以这么做:
- 打开Firebase控制台,找到app2的配置页面,下载它专属的
google-services.json - 替换Unity项目根目录(或者
Assets/Plugins/Android目录)里的旧json文件 - 重新构建app2,正常情况下Firebase会自动生成基于app2包名的Provider authority,冲突就解决了
要是换了json还是不行,说明Unity没正确解析配置,那就得手动干预了。
直接粗暴:手动覆盖AndroidManifest的Provider配置
Unity允许我们用自定义的AndroidManifest.xml来覆盖SDK自动生成的内容,步骤很简单:
- 先在Unity项目里建个
Assets/Plugins/Android文件夹(没有的话直接新建) - 新建一个
AndroidManifest.xml文件,把下面的内容粘进去:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.app2"> <application> <!-- 把这里的authority改成app2的包名后缀 --> <provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="com.company.app2.firebaseinitprovider" android:exported="false" android:initOrder="100" /> </application> </manifest>
- 确认
android:authorities的值是com.company.app2.firebaseinitprovider(和你的app2包名对应) - 重新构建app2,这个自定义配置会直接覆盖Firebase自动生成的Provider条目,冲突就没了
灵活进阶:用Gradle模板动态配置Authority
如果你以后要搞多变体构建,这个方法更灵活:
- 打开Unity的
Player Settings(路径:Edit > Project Settings > Player) - 切换到Android平台,展开
Publishing Settings,勾选Custom Gradle Template - 打开生成的
Assets/Plugins/Android/mainTemplate.gradle文件 - 在
defaultConfig块里加一行占位符配置:
defaultConfig { // 保留原来的其他配置,新增下面这行 manifestPlaceholders = [firebaseInitProviderAuthority: "com.company.app2.firebaseinitprovider"] }
- 同时在刚才创建的
Assets/Plugins/Android/AndroidManifest.xml里引用这个占位符:
<provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="${firebaseInitProviderAuthority}" android:exported="false" android:initOrder="100" />
- 重新构建app2,Gradle会自动把占位符替换成你指定的Authority值
额外提醒
- 别忘了确认app2的Player Settings里,
Package Name已经改成com.company.app2(路径:Edit > Project Settings > Player > Android > Identification > Package Name) - 既然app2构建后不用Firebase,你也可以在构建完成后用预处理指令或者构建脚本删掉Firebase相关的SDK组件,但这不是必须的——只要Provider的Authority唯一,两个应用就能和平共存
内容的提问来源于stack exchange,提问作者Theo
相关产品推荐
相关产品推荐

