Я пишу из приложения 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 \": []} "тогда мы получаем сохраненную запись.