【发布时间】: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 轻松做到这一点的任何想法?
提前谢谢你。
【问题讨论】:
标签: c# firebase unity3d firebase-realtime-database