You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:35:19