如何检查 Unity 的 Firebase 数据库中是不是已存在键/值

Posted

技术标签:

【中文标题】如何检查 Unity 的 Firebase 数据库中是不是已存在键/值【英文标题】:How to check if a key/value already exists in a firebase database in Unity如何检查 Unity 的 Firebase 数据库中是否已存在键/值 【发布时间】:2019-03-01 00:25:44 【问题描述】:

上周我一直在搜索这个问题,但我能找到的只是同一个问题的答案,但 android firebase API 与 Unity 不同。

这是我试图用来查看用户名/值是否已在数据库中的代码:

public void CheckIfUsernameExists(string nick)

    System.Threading.Tasks.Task t = db.Child("userinfo").Child(nick).GetValueAsync().ContinueWith(task =>
    
        if (task.IsFaulted)
        
            Debug.LogError(task.Result.ToString() + "faulted");
            usernameExists = false;
            usernameNotExistsEvent.Invoke();
        
        else if (task.IsCompleted)
        
            DataSnapshot snapshot = task.Result;
            if (snapshot != null)
            
                usernameExists = true;
                Debug.LogError(task.Result.ToString() + "completed");
                usernameExistsEvent.Invoke();
            
            else
            
                Debug.LogError(task.Result.ToString() + "elsecompleted");
                usernameNotExistsEvent.Invoke();
            
        
        else if (task.IsCanceled)
        
            Debug.LogError(task.Result.ToString() + "canceled");
            usernameNotExistsEvent.Invoke();
        
    );

其中 usernameExistsEvent 和 usernameNotExistsEvent 是 UnityEvent 对象,我根据结果添加侦听器以执行操作。

我正在制作一个简单的在线记分牌,但出于物流目的,我不希望两个人在记分牌上使用相同的用户名,所以我在让用户使用之前检查用户名是否存在。

以下是我在 Firebase 上的这条路径的规则:


  "rules": 
    "scores": 
      ".read": "data.child(auth.uid).exists()",
      "$user_id": 
        ".write":"$user_id === auth.uid"
      
    ,
    "userinfo": 
      "$user_id": 
        ".write":"!data.exists()",
        ".read": "true"
      
    
   

出于某种奇怪的原因,即使用户名不存在,任务也会被标记为已完成,因此我的代码并不能真正工作。

关于如何使用 Firebase 轻松做到这一点的任何想法?

提前谢谢你。

【问题讨论】:

【参考方案1】:

我实际上找到了一个简单的解决方案。问题在于,无论数据是否实际存在于数据库中,因为您向它传递了一个用于搜索的键,所以快照永远不会为空。

不过,快照对象中有一段很好的数据:.Exists。这将告诉您查询是否确实在数据库中。

【讨论】:

很高兴听到您找到了解决方案 Enrique,感谢您的分享。 DataSnapshot 永远不会是 null。如果快照中没有数据,则其Exists 属性将为 false 以表示如此。

以上是关于如何检查 Unity 的 Firebase 数据库中是不是已存在键/值的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Unity 将数据写入 Firebase 数据库

Unity/Firebase 如何使用 Google 进行身份验证?

Unity3D Firebase 访问冲突

如何在 Unity 和 Firebase 中使用异步

如何在 Unity 中测试 Firebase 动态链接?

Unity 中的 Google Firebase 身份验证:如何读取错误代码