Я не эксперт по Firebase.
Но вместо прямых запросов Http я бы предпочел использовать выделенный Firebase Unity SDK , а затем вы можете просто следовать инструкции для ИзвлечениеДанные и Сохранить данные .Я бы предположил, что вы используете «Базу данных в реальном времени».
Сначала вам всегда нужно инициализировать вашу ссылку
public class FirebaseController : MonoBehaviour
{
DatabaseReference reference
private void Start()
{
// Set these values before calling into the realtime database.
FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://YOUR-FIREBASE-APP.firebaseio.com/");
// If usig restricted access then also do
//FirebaseApp.DefaultInstance.SetEditorP12FileName("YOUR-FIREBASE-APP-P12.p12");
//FirebaseApp.DefaultInstance.SetEditorServiceAccountEmail("SERVICE-ACCOUNT-ID@YOUR-FIREBASE-APP.iam.gserviceaccount.com");
//FirebaseApp.DefaultInstance.SetEditorP12Password("notasecret");
// Get the root reference location of the database.
DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
}
...
}
Сохранить данные
Если вы используете JSON, вам нужна соответствующая структура для ваших данных в виде классов C #.Поскольку я не знаю вашу структуру данных, я просто воспользуюсь примерами из руководства по Firebase здесь
// I would always make these classes serializable so you can directly
// also see, edit and save them via the Inspector
[Serializable]
public class User
{
public string username;
public string email;
public User()
{
}
public User(string username, string email)
{
this.username = username;
this.email = email;
}
}
Затем вы можете сохранить данные в формате json, например
private void writeNewUser(string userId, string name, string email)
{
User user = new User(name, email);
string json = JsonUtility.ToJson(user);
reference.Child("users").Child(userId).SetRawJsonValueAsync(json);
}
Или вместо этого используйте полный путь в структуре firebase, чтобы установить только одно значение без необходимости использования JSON и соответствующего класса в c #, используя
reference.Child("users").Child(userId).Child("username").SetValueAsync(name);
Получение данных
Для извлечения вы делаете то же самое
reference.Child("users").GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
// Handle the error...
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
// Do something with snapshot...
// Again either using a JSON
var user = JsonUtility.FromJson<User>(snapshot.Child(userId).GetRawJsonValue());
var username = user.username;
// OR using the path to get a single value
var username = (string)snapshot.Child(userId).Child("username").Value();
// Now do something with the received data
}
});
Примечание : Как я видел это довольно часто здесь, на SO, есть также небольшая проблема с threading и ContinueWith
заканчиваются в потоке, где вы не можете вызывать API Unity.Поэтому вам, вероятно, лучше выбрать ContinueWithOnMainThread
вместо
Как уже говорилось, я не специалист по пожарной базе, а только пытаюсь понять и привести пример, следуя ссылкам руководств... нет гарантии, что так работают эти методы;)