Как проверить, существует ли ключ / значение в базе данных Firebase в Unity - PullRequest
0 голосов
/ 25 сентября 2018

Я много раз искал этот вопрос в течение последней недели, но все, что я когда-либо мог найти, - это ответ на тот же вопрос, но для 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?

Заранее спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

Я действительно нашел простое решение.Проблема заключалась в том, что независимо от того, существуют ли данные в базе данных или нет, поскольку вы передаете им ключ для поиска, снимок никогда не будет нулевым.

Хотя внутри объекта снимка есть хороший кусок данных:.Exists.Это скажет вам, был ли запрос на самом деле в базе данных или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...