Comienza a usar Firebase Remote Config


Puedes usar Firebase Remote Config para definir los parámetros en tu app y actualizar sus valores en la nube, lo que te permite modificar el aspecto y el comportamiento de la app sin distribuir una actualización de la app.

La biblioteca de Remote Config se usa para almacenar los valores de los parámetros predeterminados en la app, recuperar los valores de los parámetros actualizados del backend de Remote Config y controlar cuándo están disponibles los valores obtenidos para la app. Para obtener más información, consulta Estrategias de carga de Remote Config.

En esta guía, se explican los pasos para comenzar y se proporcionan códigos de muestra que puedes clonar o descargar desde el repositorio firebase/quickstart-unity de GitHub.

Paso 1: Agrega a tu app de Remote Config

Antes de poder usar Remote Config, tendrás que hacer lo siguiente:

  • Registra tu proyecto de Unity y configúralo para usar Firebase.

    • Si tu proyecto de Unity ya usa Firebase, significa que ya está registrado y configurado para Firebase.

    • Si aún no tienes un proyecto de Unity, puedes descargar una app de ejemplo.

  • Agrega el SDK de Firebase Unity (específicamente, FirebaseRemoteConfig.unitypackage) a tu proyecto de Unity.

Ten en cuenta que agregar Firebase a tu proyecto de Unity implica realizar tareas en Firebase console y en tu proyecto abierto de Unity (por ejemplo, descargar archivos de configuración de Firebase desde la consola y moverlos a tu proyecto de Unity).

Paso 2: Configura los valores de parámetros predeterminados en la app

Puedes configurar los valores de los parámetros predeterminados en la app en el objeto de Remote Config, de modo que la app se comporte según lo previsto antes de conectarse al backend de Remote Config y para que los valores predeterminados estén disponibles si no hay ninguno configurado en el backend.

Para esto, crea un diccionario de strings y llénalo con pares clave-valor que representen los valores predeterminados que deseas agregar. Si ya configuraste los valores de los parámetros de backend de Remote Config, puedes descargar un archivo que contenga estos pares clave-valor y usarlo para construir el diccionario de cadenas. Para obtener más información, consulta Descarga los ajustes predeterminados de la plantilla de Remote Config.

Las propiedades que no sean strings se convertirán en el tipo de propiedad cuando se llame a SetDefaultsAsync().

System.Collections.Generic.Dictionary<string, object> defaults =
  new System.Collections.Generic.Dictionary<string, object>();

// These are the values that are used if we haven't fetched data from the
// server
// yet, or if we ask for values that the server doesn't have:
defaults.Add("config_test_string", "default local string");
defaults.Add("config_test_int", 1);
defaults.Add("config_test_float", 1.0);
defaults.Add("config_test_bool", false);

Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults)
  .ContinueWithOnMainThread(task => {

Paso 3: Obtén los valores de los parámetros para usarlos en tu app

Ahora puedes obtener los valores de los parámetros desde el objeto de Remote Config. Si configuras valores en el backend de Remote Config, los recuperas y, luego, los activas, estos valores estarán disponibles para la app. De lo contrario, obtendrás los valores de los parámetros configurados en la app con SetDefaultsAsync().

Para obtener estos valores, usa GetValue() y proporciona la clave del parámetro como un argumento. Esto muestra un ConfigValue, que tiene propiedades para convertir el valor en varios tipos base.

Paso 4: Configura los valores de los parámetros

  1. En Firebase console, abre tu proyecto.
  2. Selecciona Remote Config en el menú para ver el panel de Remote Config.
  3. Define parámetros que tengan los mismos nombres que los que definiste en la app. Para cada parámetro, puedes definir un valor predeterminado (que, en última instancia, anulará el valor predeterminado de la app) y valores condicionales. Para obtener más información, consulta Parámetros y condiciones de Remote Config.

Paso 5: Recupera y activa valores (según sea necesario)

Para recuperar valores de los parámetros del backend de Remote Config, llama al método FetchAsync(). Todos los valores que establezcas en el backend se recuperan y almacenan en caché en el objeto de Remote Config.

// Start a fetch request.
// FetchAsync only fetches new data if the current data is older than the provided
// timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
// By default the timespan is 12 hours, and for production apps, this is a good
// number. For this example though, it's set to a timespan of zero, so that
// changes in the console will always show up immediately.
public Task FetchDataAsync() {
  DebugLog("Fetching data...");
  System.Threading.Tasks.Task fetchTask =
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync(
      TimeSpan.Zero);
  return fetchTask.ContinueWithOnMainThread(FetchComplete);
}

En el código anterior, FetchComplete es un método cuya firma coincide con los parámetros de una de las sobrecargas de ContinueWithOnMainThread().

En el siguiente código de muestra, el método FetchComplete recibe la tarea anterior (fetchTask), que permite que FetchComplete determine si finalizó. El código usa Info.LastFetchStatus para determinar si el resultado también se completó correctamente. Si es así, los valores de los parámetros de Remote Config se activan con ActivateAsync().

private void FetchComplete(Task fetchTask) {
  if (!fetchTask.IsCompleted) {
    Debug.LogError("Retrieval hasn't finished.");
    return;
  }

  var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
  var info = remoteConfig.Info;
  if(info.LastFetchStatus != LastFetchStatus.Success) {
    Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
    return;
  }

  // Fetch successful. Parameter values must be activated to use.
  remoteConfig.ActivateAsync()
    .ContinueWithOnMainThread(
      task => {
        Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
    });
}

Los valores recuperados a través de FetchAsync() se almacenan en caché de manera local cuando termina la recuperación, pero no están disponibles hasta que se invoca a ActivateAsync(), lo que permite asegurarse de que los valores nuevos no se apliquen en medio del cálculo ni en otro momento que pueda causar problemas o comportamientos extraños.

Paso 6: Detecta actualizaciones en tiempo real

Después de recuperar los valores de los parámetros, puedes usar Remote Config en tiempo real para escuchar actualizaciones del backend de Remote Config. Remote Config en tiempo real envía señales a los dispositivos conectados cuando hay actualizaciones disponibles y recupera automáticamente los cambios después de que publicas una nueva versión de Remote Config.

Las actualizaciones en tiempo real son compatibles con la versión 11.0.0 y versiones posteriores del SDK de Firebase Unity para las plataformas de Apple y Android.

  1. En tu app, agrega un OnConfigUpdateListener para comenzar a escuchar actualizaciones y recuperar automáticamente cualquier valor de parámetro nuevo o actualizado. Luego, crea un ConfigUpdateListenerEventHandler para procesar los eventos de actualización. En el siguiente ejemplo, se escuchan actualizaciones y se usan los valores recuperados recientemente para mostrar un mensaje de bienvenida actualizado.
// Invoke the listener.
void Start()
{
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
    += ConfigUpdateListenerEventHandler;
}

// Handle real-time Remote Config events.
void ConfigUpdateListenerEventHandler(
   object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) {
  if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) {
    Debug.Log(String.Format("Error occurred while listening: {0}", args.Error));
    return;
  }

  Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
  // Activate all fetched values and then display a welcome message.
  remoteConfig.ActivateAsync().ContinueWithOnMainThread(
    task => {
        DisplayWelcomeMessage();
    });
}

// Stop the listener.
void OnDestroy() {
    Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
      -= ConfigUpdateListenerEventHandler;
}

La próxima vez que publiques una versión nueva de Remote Config, los dispositivos que ejecutan tu app y detectan cambios llamarán al controlador de finalización.

Próximos pasos

Si aún no lo has hecho, explora los casos de uso de Remote Config y revisa algunos de los conceptos clave y la documentación de estrategias avanzadas, en las que se incluye lo siguiente: