FirebaseData
Resumen
Namespace Imova.Flux.Data. Clase abstracta FirebaseData : MonoBehaviour, singleton. Se apoya en FirebaseInstance (ya conectada y autenticada) para leer el contenido de Firebase Realtime Database y transformarlo en el modelo de datos del sistema (Sequence, Step, Action, CategoryResult), así como para postear resultados y realizar login/logout de usuarios.
Al ser abstracta, no se usa directamente en escena: el proyecto instancia una de sus dos implementaciones concretas según la plataforma de compilación.
Cuándo usarla
- Para cargar el listado de secuencias disponibles o una secuencia específica al iniciar el flujo.
- Para autenticar usuarios (login/logout) más allá de la autenticación anónima que maneja
FirebaseInstance. - Para registrar el token de mensajería (push notifications) del dispositivo.
- Para extender el parser (mediante los hooks virtuales) cuando un proyecto necesita campos adicionales en el JSON de secuencias/pasos que no forman parte del modelo base.
- Para cargar una secuencia desde un archivo local (
LoadLocalSequence) en escenarios sin conexión o de desarrollo.
Propiedades
| Propiedad | Tipo | Descripción |
|---|---|---|
ArchetypeChecked | bool | Indica si el arquetipo/plataforma del usuario ya fue validado contra los datos remotos. |
Platform | string | Identificador de la plataforma/arquetipo activo, usado para filtrar contenido específico. |
CategoriesResult | List<CategoryResult> | Resultados acumulados por categoría de evaluación durante la sesión actual. |
Métodos
virtual void LoginUser(string email, string password, Action<bool,string> callback)
Autentica un usuario con email y contraseña contra Firebase. Al finalizar invoca callback con el éxito de la operación y un mensaje (de error, si corresponde).
virtual void LogOut()
Cierra la sesión del usuario actualmente autenticado.
virtual void UpdateTokenMessaging(string token)
Registra o actualiza en el backend el token de mensajería push del dispositivo actual.
virtual void GetSequences(Action<bool, List<Sequence>> callback)
Obtiene el listado completo de secuencias disponibles en Firebase, parseadas al modelo Sequence, e invoca callback con el resultado.
virtual void LoadSequence(string uidSequence, Action<bool, List<Sequence>> callback)
Carga una secuencia específica (y sus pasos/acciones asociadas) identificada por uidSequence desde Firebase.
void LoadLocalSequence(string uidSequence, Action<bool, List<Sequence>> callback)
Carga una secuencia desde un archivo JSON local ubicado en Resources/Sequences/<uid>.json, sin depender de conectividad. Útil para desarrollo o como respaldo cuando no hay backend disponible.
string Fix(string input)
Desescapa secuencias como \n y \" en strings provenientes de Firebase (donde el contenido suele llegar con caracteres de escape literales en lugar de sus equivalentes reales), devolviendo el texto listo para mostrar en UI.
Puntos de extensión (hooks virtuales)
| Hook | Propósito |
|---|---|
GenerateClassSequence() | Permite que una subclase construya una instancia de Sequence (o de una subclase de Sequence) con campos adicionales, sin reescribir el resto del parser. |
GenerateClassStep() | Análogo a GenerateClassSequence(), pero para Step. |
GetExtraParamsSequence() | Permite que una subclase parsee y agregue campos custom del JSON de secuencia que no forman parte del modelo base. |
GetExtraParamsStep() | Análogo a GetExtraParamsSequence(), pero para el JSON de paso. |
Estos hooks existen para que un proyecto concreto agregue campos propios al contenido de Firebase (por ejemplo, metadatos específicos de un cliente) sin duplicar la lógica de parseo general.
Campos de Firebase Realtime Database
FirebaseData expone como constantes protegidas los nombres de los nodos/campos que espera encontrar en la base de datos:
| Constante | Nodo/campo en Firebase |
|---|---|
"Secuencias" | Raíz del listado de secuencias. |
"Pasos" | Raíz del listado de pasos de una secuencia. |
"Trigger" | Campo con el tipo de disparador (TriggerType) de un paso. |
"Arquetipo" | Campo con el arquetipo/plataforma asociado. |
"Modulo" | Campo con el módulo al que pertenece el contenido. |
"Happypath" | Campo con el orden/conjunto de pasos que conforman el "happy path". |
Implementaciones
FirebaseDataMobileFirebaseDataWeb
Ejemplo de código
FirebaseData.Instance.GetSequences((success, sequences) =>
{
if (success)
{
foreach (var sequence in sequences)
{
Debug.Log(sequence.UID);
}
}
});