Ошибка настройки Google Firestore - PullRequest
0 голосов
/ 14 февраля 2020

Я пишу из приложения Unity - это не проблема аутентификации, как я пытался с открытым БД и ограниченным. Пользователь проходит проверку подлинности, я проверял код на каждом шаге и вижу ожидаемые значения во всех переменных, кроме необработанной переменной, для которой установлено значение "{}", тогда как initialUser как JSON равно {"инвентаризации": [], "saves": []}

        private void InitialiseUser(FirebaseUser user, Action<bool> callback) {
        LoadJsonAsset<UserData>("initialise/user", initialUser => {
            if (initialUser != null) {
                userDataRef.SetRawJsonValueAsync(JsonUtility.ToJson(initialUser)).ContinueWithOnMainThread(task => {
                    if (task.IsCompleted) {
                        userDataRef.GetValueAsync().ContinueWithOnMainThread(getTask => {
                            var raw = getTask.Result.GetRawJsonValue();
                            userSnapshot = getTask.Result;
                            callback(getTask.IsCompleted);
                        });
                    } else {
                        Debug.LogError("Unable to set initial user data");
                        callback(false);
                    }
                });
            } else {
                Debug.LogError("Unable to initialise user");
                callback(false);
            }
        });
    }

Уменьшение проблемы, чтобы она была немного понятнее:

        const string setRaw = "{\"inventory\":[],\"saves\":[]}";

        userDataRef.SetRawJsonValueAsync(setRaw).ContinueWithOnMainThread(setTask => {
            if (setTask.IsCompleted) {
                userDataRef.GetValueAsync().ContinueWithOnMainThread(getTask => {
                    var getRaw = getTask.Result.GetRawJsonValue();

                    Debug.Assert(getRaw == setRaw);
                });
            }
        });

Что я вижу, так это то, что getRaw установлен на " {}». Кажется, что если у вас есть члены, которые являются пустыми массивами, они молча удаляются из хранимых данных, и, следовательно, вся запись молча завершается неудачей.

Если, например, setRaw установлен на "{\" inventory \ ": [ \ "test \"], \ "saves \": []} "тогда мы получаем сохраненную запись.

1 Ответ

0 голосов
/ 17 февраля 2020

Итак, ответив на мой собственный вопрос, я запишу его здесь для потомков.

Метод Firebase.Database.DatabaseReference.SetRawJsonValueAsyn c не будет записывать элементы, указывающие на пустой массив, они просто пропускаются и молча не могут быть добавлены в объект базы данных. Это не упомянуто в документации , которая гласит:

Установите данные в этом месте для данного представления строки json.

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