Я много раз искал этот вопрос в течение последней недели, но все, что я когда-либо мог найти, - это ответ на тот же вопрос, но для API-интерфейса Firebase Android, который отличается от 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, к которым я добавляю слушателей, чтобы делать вещи в зависимости отна что был результат.
Я делаю простое онлайн-табло, но я не хочу, чтобы два человека имели одинаковое имя пользователя на табло для целей логистики, поэтому я проверяю, существует ли имя пользователя, прежде чем позволить пользователю принятьit.
Вот правила, которые у меня есть для этого пути в 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?
Заранее спасибо.