Control de versiones y plantillas de Remote Config

La plantilla de Remote Config es la configuración del servidor de los parámetros y las condiciones en formato JSON que creaste para tu proyecto de Firebase. Puedes modificar y administrar la plantilla con Firebase console, que muestra el contenido en formato gráfico en las pestañas Parámetros y Condiciones. También puedes usar las API de backend de Remote Config o Firebase CLI para modificar y administrar la configuración.

Este es un ejemplo de un archivo de plantilla:

  {
    "conditions": [
      {
        "name": "ios",
        "expression": "device.os == 'ios'"
      }
    ],
    "parameters": {
      "welcome_message": {
        "defaultValue": {
          "value": "Welcome to this sample app"
        },
        "conditionalValues": {
          "ios": {
            "value": "Welcome to this sample iOS app"
          }
        }
      },
      "welcome_message_caps": {
        "defaultValue": {
          "value": "false"
        }
      },
      "header_text": {
        "defaultValue": {
          "useInAppDefault": true
        }
      }
    },
    "version": {
      "versionNumber": "28",
      "updateTime": "2020-05-14T18:39:38.994Z",
      "updateUser": {
        "email": "user@google.com"
      },
      "updateOrigin": "CONSOLE",
      "updateType": "INCREMENTAL_UPDATE"
    }
  }

Cada vez que actualizas los parámetros, Remote Config crea una versión nueva de la plantilla de Remote Config y almacena la anterior a fin de que puedas recuperarla o revertirla según sea necesario. Los números de versión aumentan de manera secuencial a partir del valor inicial que almacenó Remote Config. Todas las plantillas incluyen un campo version que contiene metadatos sobre esa versión específica.

Con Firebase console, Firebase CLI o las API de backend de Remote Config, puedes realizar las siguientes tareas de administración de versiones:

  • Crear una lista con todas las versiones de plantilla almacenadas
  • Recuperar una versión específica
  • Revertir a una versión específica

Cuando administres las plantillas de Remote Config, ten en cuenta el umbral de vencimiento. La plantilla activa de Remote Config que usa tu app no vence. Sin embargo, si se reemplaza por una actualización, la versión anterior solo se almacenará durante 90 días, luego de ese período vencerá y no se podrá recuperar. También hay un límite total de 300 versiones almacenadas. Si quieres almacenar o revertir a una plantilla que supere esos límites, guárdala y almacénala manualmente.

Administra las versiones de plantillas de Remote Config

En esta sección, se describe cómo administrar las versiones de tu plantilla de Remote Config. Si quieres obtener más detalles para crear, modificar y guardar plantillas de manera programática, consulta Modifica Remote Config de manera programática.

Crea una lista con todas las versiones almacenadas de la plantilla de Remote Config

Puedes recuperar una lista de todas las versiones almacenadas de la plantilla de Remote Config. Por ejemplo:

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

Java

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions

Firebase console

En la pestaña Parámetros, selecciona el ícono de reloj que se muestra en la esquina superior derecha. Esta acción abrirá la página Historial de cambios, en la que encontrarás una lista de todas las versiones almacenadas de la plantilla en un menú de lista ubicado en el lado derecho.

Los detalles que se muestran de cada versión almacenada incluyen información que determina si los cambios se originaron en Console, con la API de REST, por una reversión o si fueron cambios incrementales de la plantilla que se guardaron de manera forzosa.

Firebase CLI

firebase remoteconfig:versions:list

Usa la opción --limit para limitar la cantidad de versiones que se muestran. Pasa “0” para recuperar todas las versiones.

La lista de plantillas incluye los metadatos de todas las versiones almacenadas, entre ellos la hora de actualización, el usuario que la realizó y si se hizo mediante la consola o la API de REST. Aquí encontrarás un ejemplo de un elemento de versión:

{
  "versions": [{
    "version_number": "6",
    "update_time": "2018-05-12T02:38:54Z",
    "update_user": {
      "email": "jane@developer.org",
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

Recupera una versión específica de la plantilla de Remote Config

Puedes recuperar cualquier versión almacenada de la plantilla de Remote Config. Por ejemplo:

Node.js

Pasa getTemplate() sin argumentos a fin de obtener la versión más reciente de la plantilla o usa getTemplateAtVersion() para recuperar una versión específica.

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

El parámetro de URL ?version_number solo es válido para las operaciones GET, no puedes usarlo con el fin de especificar números de versión de las actualizaciones. Si usas una solicitud get similar sin el parámetro ?version_number, se recuperará la plantilla activa actual.

Firebase console

De forma predeterminada, se muestra la plantilla activa actual en el panel de detalles de la pestaña Historial de cambios. Para ver los detalles de otra versión de la lista, selecciónala en el menú de la derecha.

Puedes ver las diferencias detalladas entre la versión actual seleccionada y cualquier otra versión almacenada. Para ello, coloca el cursor sobre el menú contextual de cualquier versión que no esté elegida y selecciona Comparar con la versión seleccionada.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

De manera opcional, puedes escribir el resultado en un archivo especificado con -o, FILENAME.

Revierte a una versión almacenada de la plantilla de Remote Config

Puedes realizar una reversión a cualquier versión almacenada de la plantilla. Por ejemplo:

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

Java

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

REST

Para revertir a una plantilla almacenada de Remote Config, realiza una solicitud HTTP POST con el método personalizado :rollback. Incluye en el cuerpo de la solicitud la versión específica a la que quieres revertir. Por ejemplo:

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

La respuesta incluye el contenido de la plantilla almacenada que está activa y los metadatos de su versión nueva.

Firebase console

En la esquina superior derecha de la página Historial de cambios, se muestra un botón de opciones que podrás usar para elegir entre las plantillas aptas a las que puedes revertir. Haz clic en el botón y confirma la operación solo si estás seguro de que quieres realizar la reversión y usar esos valores de inmediato en todos los usuarios y las apps.

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

Ten en cuenta que revertir la plantilla crea efectivamente una versión numerada nueva. Por ejemplo, revertir de la versión 10 a la 6 crea una copia nueva de la versión 6, cuya única diferencia con la versión original es que su número de versión será 11. La versión 6 original seguirá almacenada (si no llegó al límite de vencimiento) y la versión 11 de la plantilla será la activa.

Descarga los valores predeterminados de las plantillas de Remote Config

Dado que es posible que tu app no siempre esté conectada a Internet, debes configurar los valores predeterminados de la app del cliente para todos los parámetros de Remote Config. Además, debes sincronizar periódicamente los valores predeterminados del cliente de la app y los parámetros predeterminados del backend de Remote Config, ya que pueden cambiar con el tiempo.

Como se describe en los vínculos específicos de la plataforma al final de esta sección, puedes configurar estos valores predeterminados de forma manual en tu app, o bien optimizar este proceso, descargando archivos que contengan solo los pares clave-valor para todos los parámetros y sus valores predeterminados en la plantilla activa de Remote Config. Luego, puedes incluir este archivo en tu proyecto y configurar la app para importar estos valores.

Puedes descargar los archivos en formato XML en las apps para Android, en formato de lista de propiedades (plist) en las apps para iOS y en formato JSON en las apps web.

Recomendamos descargar periódicamente los valores predeterminados de Remote Config antes de cualquier versión nueva para asegurarte de que la app y el backend de Remote Config permanezcan sincronizados.

Para descargar un archivo que contiene los valores predeterminados de la plantilla, haz lo siguiente:

REST

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

Usa XML, PLIST o JSON como el valor de format, según el formato de archivo que desees descargar.

Firebase console

  1. En la pestaña Parameters, abre el menú y selecciona Download default values.
  2. Cuando se te solicite, haz clic en el botón de selección que corresponde al formato de archivo que deseas descargar y, luego, selecciona Download file.

Si quieres obtener más información para importar valores predeterminados de Remote Config a tu app, consulta los siguientes recursos: