Guardar datos en Local de Firebase Realtime Database | Unity
Actualmente todo se encuentra en la nube, tus datos, fotos, correos,
contactos, etc, es por ese motivo que cada vez más desarrolladores optan por
crear una aplicación que esté conectada a internet, ya sea para descargar
recursos o mantener una conexión con una base de datos en línea.
Realtime Database es una gran opción ya que tiene una tarifa gratuita de 1 GB
y 10 GB de descarga, si superas esos límites estarás en la obligación de pagar
por un plan que te permita una mayor capacidad; pero si recién empiezas es una
gran opción para almacenar y obtener datos en milisegundos.
Como primer paso debemos crearnos un proyecto en Firebase Console con tu cuenta de google, es bastante sencillo y te dirigirán paso a
paso hasta que te permita descargar un archivo .json para agregar a tu
proyecto en la carpeta StreamingAssets como muestra la siguiente figura: (El
primer archivo "google-services-desktop" se crea automáticamente, así que no
te preocupes)
En el mismo proceso de creación de tu proyecto en Firebase Console te pedirá
que descargues un archivo .zip que contiene todos los paquetes que requerimos
para utilizar Firebase es un archivo que contiene lo que muestra la siguiente
figura (En este caso utilizaremos solo lo seleccionado en la figura):
En Unity importamos el paquete "FirebaseDatabase.unitypackage" de la carpeta "dotnet4" y
si nos pide habilitar o aceptar licencias las aceptamos.
Ahora debemos crear una clase que inicialice Firebase en el método Start de
Unity en este caso llamamos a la clase "InitFirebase.cs" y tiene lo siguiente:
using Firebase.Extensions;
using UnityEngine;
using UnityEngine.Events;
public class InitFirebase : MonoBehaviour
{
public UnityEvent onFirebaseInitialized = new UnityEvent();
void Start()
{
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
var dependencyStatus = task.Result;
if (dependencyStatus != Firebase.DependencyStatus.Available)
{
return;
}
onFirebaseInitialized.Invoke();
});
}
}
Esta clase se encarga de inicializar Firebase y el Evento de Unity hace un
botón interactuable como muestra la siguiente figura:
El evento unity onFirebaseInitialized es llamado una vez que se ha cargado
Firebase y hace a un botón de la UI que se active y pueda ser presionado por
el usuario.
Ahora es momento de descargar la información desde la base de datos y
guardarlos en el almacenamiento local del dispositivo en un archivo .json.
using Firebase.Database;
using System.IO;
public class RealtimeDatabase
{
public void SaveDataToLocal(string path)
{
FirebaseDatabase.DefaultInstance.GetReference("FoodData").GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
}
else if (task.IsCompleted)
{
File.WriteAllText(path, task.Result.GetRawJsonValue());
}
});
}
}
Simplemente yo guardo el archivo .json en Application.persistentDataPath + "/data.json" con la función "File.WriteAllText", mi base de datos está estructurada de la siguiente manera en Firebase Console:
Como sabemos la base de dato en tiempo real se estructura como un archivo JSON es por eso que en la clase hacemos referencia a FoodData para que devuelva una lista de Foods.
Recuerda que esta base de datos está diseñada para ser en tiempo real, es decir para que cuando un usuario escriba o lea se realice en milisegundos pero tiene límites para una aplicación empresarial muy grande, debes tener eso en cuenta.
Comentarios
Publicar un comentario