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

Unity中使用SetRawJson无法写入Firebase Database问题求助

解决Firebase Database中SetRawJson写入无效果的问题

既然你的用户邮箱注册功能正常,说明Firebase Auth已经正确配置,咱们可以从几个核心方向排查问题:

1. 先检查数据库规则的写入权限

你提到了数据库规则但没贴出来,这是最常见的失败原因。如果规则限制了目标路径的写入权限,即使用户已认证,写入操作也会被静默拒绝。

  • 举个错误示例(仅开放读取权限):
{
  "rules": {
    ".read": "auth != null",
    ".write": false
  }
}
  • 测试阶段可以先临时设置宽松规则验证(上线前务必收紧):
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

如果临时规则下能写入成功,就说明原规则的路径权限配置有误,需要根据你的数据结构调整,比如针对用户UID的私有路径:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}

2. 确认写入路径是否正确

很多时候看起来没写入,其实是写到了错误的路径里。检查你调用SetRawJsonAsync时的数据库引用路径是否和预期一致,比如有没有拼错路径名称(比如把users写成user)、有没有正确拼接用户UID。

3. 一定要捕获Firebase的异步错误

Unity中Firebase的异步操作默认不会主动抛出错误,你必须在回调里检查任务状态,才能拿到失败原因:

// 示例代码,替换成你的实际引用和JSON数据
FirebaseDatabase.DefaultInstance.GetReference("users/" + user.UserId)
    .SetRawJsonAsync(yourJsonString)
    .ContinueWith(task => {
        if (task.IsFaulted) {
            // 打印错误日志,这是定位问题的关键
            Debug.LogError("写入失败:" + task.Exception.ToString());
        } else if (task.IsCompleted) {
            Debug.Log("数据写入成功");
        }
    });

错误日志会直接告诉你是权限问题、JSON格式错误还是其他问题。

4. 验证JSON数据的合法性

SetRawJsonAsync要求传入的是标准合法的JSON字符串,如果存在语法错误(比如引号不配对、逗号遗漏),Firebase会静默拒绝写入。你可以用本地的JSON编辑器或者Unity的JsonUtility先校验数据格式。

5. 确认Firebase数据库模块初始化完成

虽然注册功能正常,但数据库模块的初始化可能滞后。确保你在执行写入操作前,Firebase依赖已经加载完成:

FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
    var status = task.Result;
    if (status == DependencyStatus.Available) {
        // 在这里执行数据库写入逻辑
    } else {
        Debug.LogError("Firebase依赖加载失败:" + status);
    }
});

先从错误日志和规则配置入手排查,大概率能快速找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:29:39