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,无任何错误抛出
测试场景:
- 在Firebase初始化完成的协程中调用
GetValueAsync(),回调不执行 - 将调用逻辑独立到按钮点击事件(确保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
相关产品推荐
相关产品推荐

