【问题标题】:Can't insert data with Firebase无法使用 Firebase 插入数据
【发布时间】:2017-10-08 02:10:27
【问题描述】:

在听说 Firebase 之后,我决定在我的 Unity 小游戏上试用它是个好主意。

我阅读了文档,按照“入门”配置教程,更改了身份验证规则,以便每个人都可以插入数据。

void Start()
{
    // Set up the Editor before calling into the realtime database.
    FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://magicast-bd2fc.firebaseio.com/");

    Firebase.Auth.FirebaseAuth.DefaultInstance.StateChanged += DefaultInstance_StateChanged;

    // Get the root reference location of the database.
    DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

    var u = new User();
    u.email = "sdjkdsdksadjsad";
    u.fb_id = "sakdsajdhasd";
    u.username = "jadhsjahjsda";
    reference.SetValueAsync(u);
}

此代码确实执行了,但是当我转到 Firebase 控制台时,我在“数据库”选项卡上看不到任何数据。我无法弄清楚我做错了什么,并且代码根本没有错误!我做错了什么?

这是我的用户类。它基本上是一个测试类,没什么大不了的:

public class User
    {
        public string username;
        public string email;
        public string fb_id;

        public User()
        {
        }

        public User(string username, string email, string fb_id)
        {
            this.username = username;
            this.email = email;
            this.fb_id = fb_id;
        }
    }

【问题讨论】:

    标签: c# firebase unity3d firebase-realtime-database


    【解决方案1】:

    您不能对 Firebase 数据库中的任意对象调用 .set(),它们必须属于以下类别之一:

    • string
    • long
    • double
    • bool
    • Dictionary<string, Object>
    • List<Object>

    而不是

    reference.SetValueAsync(u);
    

    你需要打电话

    string json = JsonUtility.ToJson(u);
    reference.SetRawJsonValueAsync(json);
    

    您实际上也没有登录任何用户。要登录匿名用户,首先转到 Firebase 控制台 -> 身份验证并打开“匿名”开关。然后使用以下代码进行身份验证:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    
    auth.SignInAnonymouslyAsync().ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAnonymouslyAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

    【讨论】:

      【解决方案2】:

      您未通过身份验证,默认的 Firebase 安全规则要求 auth != null。

      请参阅docs,了解如何使用 Unity 进行身份验证。

      【讨论】:

      • 正如我在问题上所说,我更改了身份验证规则,以便每个人都可以插入数据。我目前的规则是:“read”:“true”,“write”:“true”
      • @ArturoTemplário 在这种情况下,可能是 User 对象。您可以在简单值或 json 字典类型结构上调用 .set(),而不是在任意对象上调用。
      • 之前我使用 JsonUtility 类来序列化 User 对象,就像他们在示例文档中所做的那样。它不应该起作用吗?
      • 您需要先致电 string json = JsonUtility.ToJson(u);,然后再致电 reference.SetRawJsonValueAsync(json); - 来自文档。
      • 我确实做了那个 json 转换,但它仍然没有工作。好的,我会等着,提前谢谢
      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多