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

Unity中Firebase GetValueAsync()异步任务未完成问题排查

Unity Firebase Database GetValueAsync() 回调不执行问题排查与解决

问题描述

开发Unity项目时使用Firebase管理用户数据,遇到核心问题:异步任务GetValueAsync()始终无法完成,ContinueWithOnMainThread内的代码完全不执行。

已确认前置条件:

  • 正确配置google-services.json,Firebase App初始化成功(CheckAndFixDependenciesAsync()返回DependencyStatus.Available)
  • Firebase Auth功能正常,FirebaseAuth.DefaultInstance.CurrentUser不为空且拥有有效uid
  • 网络连接正常,Firebase Database安全规则设置为.write: true、.read: true
  • 使用Unity 2020.3.20f1编辑器,安装Firebase SDK 11.8.1,无任何错误抛出

测试场景:

  1. 在Firebase初始化完成的协程中调用GetValueAsync(),回调不执行
  2. 将调用逻辑独立到按钮点击事件(确保Firebase已初始化),回调仍不执行

排查与解决方法

1. 捕获任务异常状态

回调不执行大概率是任务抛出了未被捕获的异常,修改代码添加异常处理:

FirebaseDatabase.DefaultInstance.GetReference("users").GetValueAsync().ContinueWithOnMainThread(task => {
    if (task.IsFaulted)
    {
        Debug.LogError("GetValueAsync执行失败: " + task.Exception);
    }
    else if (task.IsCompleted)
    {
        Debug.Log("任务完成!数据内容: " + task.Result.Value);
    }
});

通过task.Exception可直接查看失败原因,比如数据库URL配置错误、网络拦截等。

2. 手动指定Firebase Database URL

默认实例可能读取google-services.json中的URL出错,手动指定控制台中的数据库URL验证:

// 替换为你的Firebase Database控制台URL
var database = FirebaseDatabase.GetInstance("https://your-project-id.firebaseio.com/");
database.GetReference("users").GetValueAsync().ContinueWithOnMainThread(task => {
    // 回调逻辑
});

3. 检查Unity编辑器网络设置

  • 打开Edit > Project Settings > Player > PC, Mac & Linux Standalone > Other Settings > Configuration,确认Internet Access设置为Require
  • 检查系统防火墙是否允许Unity编辑器访问网络
  • 若使用代理,在Edit > Preferences > Network中配置正确的代理信息

4. 验证SDK与Unity版本兼容性

Unity 2020.3.x LTS版本与最新Firebase SDK 11.8.1可能存在兼容性问题,可尝试:

  • 降级Firebase SDK至11.0.x版本
  • 升级Unity至2021.3.x LTS版本后重新测试

5. 改用协程等待任务完成

绕过ContinueWithOnMainThread,直接用Unity协程等待任务结束:

private IEnumerator LoadUserData()
{
    var task = FirebaseDatabase.DefaultInstance.GetReference("users").GetValueAsync();
    yield return new WaitUntil(() => task.IsCompleted);

    if (task.IsFaulted)
    {
        Debug.LogError(task.Exception);
    }
    else
    {
        Debug.Log("数据加载完成: " + task.Result.Value);
    }
}

调用时执行StartCoroutine(LoadUserData())即可。

6. 重新验证Mac系统网络权限

  • 打开系统偏好设置 > 安全性与隐私 > 隐私 > 网络,确认Unity编辑器在列表中且已勾选
  • 重启Unity编辑器和电脑后再次测试

内容的提问来源于stack exchange,提问作者Noel Diaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:54:51