设置Firebase Database Url导致Android构建执行中断
问题分析与解决方案
核心原因
Firebase SDK 9.x及以上版本(包括你使用的10.3)对FirebaseApp.Options的访问权限做了修改——已初始化的FirebaseApp实例的Options变为只读,直接修改会触发静默内部错误;同时Unity 2020 LTS与新版Firebase的初始化流程耦合更严格,Android平台会严格执行权限限制,而编辑器环境出于调试便利性保留了宽松规则,导致表现不一致。
另外,新版Firebase在Android上的初始化是异步执行的,如果在依赖未完全初始化时就操作Database,也可能导致代码阻塞且无崩溃日志(异常被内部捕获但未向外抛出)。
具体解决方案
1. 初始化阶段配置DatabaseUrl(推荐)
不要在FirebaseApp初始化完成后修改Options,而是在创建实例时就指定DatabaseUrl:
FirebaseApp firebaseApp; if (FirebaseApp.DefaultInstance == null) { // 构建自定义配置并创建FirebaseApp实例 var options = new FirebaseOptions.Builder() .SetDatabaseUrl("https://my-app-name.firebaseio.com/") // 如果需要其他配置(如API Key),也在这里添加 .Build(); firebaseApp = FirebaseApp.Create(options); } else { firebaseApp = FirebaseApp.DefaultInstance; // 注意:高版本SDK中已初始化的Options无法修改,若配置不一致需删除旧实例重建 // 可选:如果默认实例配置不符合需求,先销毁再重建 // FirebaseApp.DefaultInstance.Delete(); // firebaseApp = FirebaseApp.Create(options); } // 通过指定的FirebaseApp实例获取Database引用 reference = FirebaseDatabase.GetInstance(firebaseApp).RootReference;
2. 等待Firebase依赖初始化完成
确保所有Firebase依赖加载完成后再执行数据库操作,避免异步初始化导致的阻塞:
IEnumerator InitializeFirebase() { // 检查并修复Firebase依赖 var dependencyTask = FirebaseApp.CheckAndFixDependenciesAsync(); yield return new WaitUntil(() => dependencyTask.IsCompleted); if (dependencyTask.Result == DependencyStatus.Available) { // 初始化FirebaseApp并配置DatabaseUrl var options = new FirebaseOptions.Builder() .SetDatabaseUrl("https://my-app-name.firebaseio.com/") .Build(); var firebaseApp = FirebaseApp.DefaultInstance ?? FirebaseApp.Create(options); reference = FirebaseDatabase.GetInstance(firebaseApp).RootReference; // 所有后续数据库相关代码放在此处执行 Debug.Log("Database reference initialized successfully"); } else { Debug.LogError($"Firebase dependency initialization failed: {dependencyTask.Result}"); } } // 在Start或其他初始化方法中调用协程 void Start() { StartCoroutine(InitializeFirebase()); }
3. 验证Android配置文件
确认Assets/Plugins/Android/google-services.json文件已正确放置,且文件中databaseURL字段与代码中设置的地址完全一致。新版Firebase会优先读取配置文件中的值,若代码设置与配置文件冲突,可能导致内部逻辑阻塞。
内容的提问来源于stack exchange,提问作者Doruk Okbay
相关产品推荐
相关产品推荐

