Versiones y plantillas de configuración remota

La plantilla de Remote Config es el conjunto del lado del servidor de parámetros y condiciones con formato JSON que has creado para tu proyecto de Firebase. Puede modificar y administrar la plantilla usando Firebase console, que muestra el contenido de la plantilla en formato gráfico en las pestañas Parámetros y Condiciones . También puede utilizar la API REST de Remote Config y el SDK de administración o Firebase CLI para modificar y administrar su configuración.

A continuación se muestra 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 actualiza los parámetros, Remote Config crea una nueva plantilla de Remote Config versionada y almacena la plantilla anterior como una versión que puede recuperar o revertir según sea necesario. Los números de versión se incrementan secuencialmente a partir del valor inicial almacenado por Remote Config. Todas las plantillas incluyen un campo version como se muestra, que contiene metadatos sobre esa versión específica.

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

  • Listar todas las versiones de plantillas almacenadas
  • Recuperar una versión específica
  • Retroceder a una versión específica

Puede eliminar plantillas de Remote Config según sea necesario desde la página Historial de cambios en la consola de Remote Config. Existe un límite total de 300 versiones almacenadas de por vida, que incluye números de versión almacenadas para plantillas eliminadas. Si publica más de 300 versiones de plantilla durante la vida de un proyecto, las versiones más antiguas se eliminan, manteniendo un máximo de 300 versiones.

Administrar versiones de plantillas de Remote Config

Esta sección describe cómo administrar versiones de su plantilla de Remote Config. Para obtener más detalles sobre cómo crear, modificar y guardar plantillas mediante programación, consulte Modificar Remote Config mediante programación .

Enumerar todas las versiones almacenadas de la plantilla de Remote Config

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

Nodo.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());
}

DESCANSAR

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

Consola de base de fuego

En la pestaña Parámetros , seleccione el icono "reloj" que se muestra en la parte superior derecha. Esto abre la página Historial de cambios que enumera todas las versiones de plantillas almacenadas en un menú de lista a la derecha.

Los detalles que se muestran para cada versión almacenada incluyen información sobre si los cambios se originaron con la consola, con la API REST, desde una reversión o si fueron cambios incrementales desde un guardado forzado de la plantilla.

CLI de base de fuego

firebase remoteconfig:versions:list

Utilice la opción --limit para limitar el número de versiones que se devuelven. Pase '0' para recuperar todas las versiones.

La lista de plantillas incluye metadatos para todas las versiones almacenadas, incluida la hora de la actualización, el usuario que la realizó y si se realizó a través de la consola o la API REST. A continuación se muestra un ejemplo de un elemento de versión:

{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

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

Puede recuperar cualquier versión almacenada específica de la plantilla de Remote Config. Por ejemplo:

Nodo.js

Pase getTemplate() sin ningún argumento para recuperar la última versión de la plantilla, o para recuperar una versión específica, use getTemplateAtVersion() .

// 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());

DESCANSAR

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 es válido sólo para operaciones GET ; no puede usarlo para especificar números de versión para actualizaciones. Una solicitud de obtención similar sin el parámetro ?version_number recuperaría la plantilla activa actual.

Consola de base de fuego

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

Puede ver una diferencia detallada de la versión seleccionada actualmente y cualquier otra versión almacenada al pasar el cursor sobre el menú contextual de cualquier versión no seleccionada y seleccionar Comparar con la versión seleccionada.

CLI de base de fuego

firebase remoteconfig:get -v VERSION_NUMBER

Opcionalmente, puede escribir la salida en un archivo específico con -o, FILENAME .

Revertir a una versión almacenada específica de la plantilla de Remote Config

Puede retroceder a cualquier versión almacenada de la plantilla. Por ejemplo:

Nodo.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());
  }
}

DESCANSAR

Para revertir a una plantilla de Remote Config almacenada, emita una POST HTTP con el método personalizado :rollback y, en el cuerpo de la solicitud, la versión específica que se aplicará. 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 contiene el contenido de la plantilla almacenada ahora activa, con los metadatos de su nueva versión.

Consola de base de fuego

Para las versiones de plantillas anteriores elegibles para revertir, se muestra un botón de opción para retroceder a esa versión en la parte superior derecha de la página Historial de cambios . Haga clic y confirme esto solo si está seguro de que desea volver a esa versión y usar esos valores inmediatamente para todas las aplicaciones y usuarios.

CLI de base de fuego

firebase remoteconfig:rollback -v VERSION_NUMBER

Tenga en cuenta que esta operación de reversión crea efectivamente una nueva versión numerada. Por ejemplo, revertir de la versión 10 a la versión 6 crea efectivamente una nueva copia de la versión 6, que difiere del original solo en que su número de versión es 11. La versión 6 original todavía está almacenada, suponiendo que no haya llegado a su vencimiento, y la versión 11 se convierte en la plantilla activa.

Eliminar una plantilla de Remote Config

Puedes eliminar plantillas de Remote Config desde Firebase console. Para eliminar una plantilla de Remote Config:

  1. En la página Parámetros de Remote Config, haga clic en Cambiar historial .

  2. Cambie a la plantilla que desea eliminar, haga clic en Más y luego seleccione Eliminar .

  3. Cuando se le solicite confirmar la eliminación, haga clic en Eliminar .

Descargar y publicar plantillas de Remote Config

Descargue y publique plantillas de Remote Config para integrarlas en sus sistemas de compilación y control de código fuente, automatice las actualizaciones de configuración y mantenga los parámetros y valores sincronizados en múltiples proyectos.

Puede descargar la plantilla de Remote Config actualmente activa mediante programación o desde Firebase console. Luego puede actualizar el archivo JSON exportado y publicarlo en el mismo proyecto, o publicarlo en un proyecto nuevo o existente.

Supongamos que tiene varios proyectos que representan diferentes etapas de su ciclo de vida de desarrollo de software, como entornos de desarrollo, prueba, ensayo y producción. En este caso, podría promocionar una plantilla completamente probada desde su entorno de prueba a su entorno de producción descargándola de su proyecto de prueba y publicándola en su proyecto de producción.

También puede utilizar este método para migrar configuraciones de un proyecto a otro o completar un nuevo proyecto con parámetros y valores de un proyecto establecido.

Los parámetros y valores de parámetros creados específicamente como variantes en un experimento de prueba A/B no se incluyen en las plantillas exportadas.

Para exportar e importar plantillas de Remote Config:

  1. Descargue la plantilla de configuración de Remote Config actual .
  2. Valide la plantilla de Remote Config .
  3. Publique la plantilla de Remote Config .

Descargue la plantilla de configuración remota actual

Puede descargar la plantilla de Remote Config actual y activa mediante programación o utilizando Firebase console.

Utilice los siguientes comandos para descargar la plantilla activa de Remote Config en formato JSON:

Nodo.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

DESCANSAR

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

Este comando genera la carga útil JSON en un archivo y los encabezados (incluido el ETag) en un archivo headers separado.

Consola de base de fuego

  1. Desde la pestaña Parámetros o Condiciones de Remote Config , abra el menú y seleccione Descargar archivo de configuración actual .
  2. Cuando se le solicite, haga clic en Descargar archivo de configuración , elija la ubicación donde desea guardar el archivo y luego haga clic en Guardar .

CLI de base de fuego

firebase remoteconfig:get -o filename

Validar la plantilla de Remote Config

Puedes validar las actualizaciones de tu plantilla antes de publicarlas usando el SDK de Firebase Admin o la API REST. Las plantillas también se validan cuando intentas publicar desde Firebase CLI o Firebase console.

El proceso de validación de la plantilla busca errores como claves duplicadas para parámetros y condiciones, nombres de condiciones no válidos o condiciones inexistentes, o ETags con formato incorrecto. Por ejemplo, una solicitud que contenga más de la cantidad permitida de claves (2000) devolvería el mensaje de error Param count too large .

Nodo.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

Java

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

DESCANSAR

Valide las actualizaciones de la plantilla agregando el parámetro de URL ?validate_only=true a su solicitud de publicación:

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig?validate_only=true -d @filename

Si su plantilla se validó correctamente, el comando curl devuelve la plantilla JSON que envió y, en el archivo headers guardado, encontrará un estado HTTP/2 200 y una ETag actualizada con el sufijo -0 . Si su plantilla no fue validada, recibirá el error de validación en la respuesta JSON y su archivo headers contendrá una respuesta que no sea 200 (y sin ETag).

Publicar la plantilla de Remote Config

Después de descargar una plantilla, realizar los cambios necesarios en el contenido JSON y validarla, puede publicarla en un proyecto.

La publicación de una plantilla reemplaza toda la plantilla de configuración existente con el archivo actualizado e incrementa la versión de la plantilla en uno. Debido a que se reemplaza toda la configuración, si elimina un parámetro del archivo JSON y lo publica, el parámetro se elimina del servidor y ya no está disponible para los clientes.

Después de la publicación, los cambios en los parámetros y valores están inmediatamente disponibles para sus aplicaciones y usuarios. Si es necesario, puedes retroceder a una versión anterior .

Utilice los siguientes comandos para publicar su plantilla:

Nodo.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

Java

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

DESCANSAR

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

Para este comando curl , puede especificar el contenido utilizando el carácter "@", seguido del nombre del archivo.

Consola de base de fuego

  1. Desde la pestaña Parámetros o Condiciones de Remote Config , abra el menú y seleccione Publicar desde un archivo .
  2. Cuando se le solicite, haga clic en Examinar , navegue y seleccione el archivo de Remote Config que desea publicar y luego haga clic en Seleccionar .
  3. El archivo se validará y, si tiene éxito, podrá hacer clic en Publicar para que la configuración esté disponible inmediatamente para sus aplicaciones y usuarios.

Las personalizaciones y condiciones de Remote Config se incluyen en las plantillas descargadas, por lo que es importante tener en cuenta las siguientes limitaciones al intentar publicar en un proyecto diferente:

  • Las personalizaciones no se pueden importar de un proyecto a otro.

    Por ejemplo, si tiene personalizaciones habilitadas en su proyecto y descarga y edita una plantilla, puede publicarla en el mismo proyecto, pero no puede publicarla en un proyecto diferente a menos que elimine las personalizaciones de la plantilla.

  • Las condiciones se pueden importar de un proyecto a otro, pero tenga en cuenta que cualquier valor condicional específico (como ID de aplicación o audiencias) debe existir en el proyecto de destino antes de publicarlo.

    Por ejemplo, si tiene un parámetro de Remote Config que usa una condición que especifica un valor de plataforma de iOS , la plantilla se puede publicar en otro proyecto, porque los valores de plataforma son los mismos para cualquier proyecto. Sin embargo, si contiene una condición que se basa en un ID de aplicación específico o una audiencia de usuarios que no existe en el proyecto de destino, la validación fallará.

  • Si la plantilla que planea publicar contiene condiciones que dependen de Google Analytics, Analytics debe estar habilitado en el proyecto de destino.

Descargar los valores predeterminados de la plantilla de Remote Config

Debido a que es posible que su aplicación no siempre esté conectada a Internet, debe configurar los valores predeterminados de la aplicación del lado cliente para todos los parámetros de Remote Config. También debes sincronizar periódicamente los valores predeterminados del cliente de tu aplicación y los valores de los parámetros predeterminados del backend de Remote Config, ya que pueden cambiar con el tiempo.

Como se describe en los enlaces específicos de la plataforma al final de esta sección, puede configurar manualmente estos valores predeterminados en su aplicación o puede simplificar este proceso descargando archivos que contengan solo los pares clave-valor para todos los parámetros y sus valores predeterminados en el archivo. plantilla activa de Remote Config. Luego puede incluir este archivo en su proyecto y configurar su aplicación para importar estos valores.

Puede descargar estos archivos en formato XML para aplicaciones de Android, formato de lista de propiedades (plist) para aplicaciones de iOS y JSON para aplicaciones web.

Recomendamos descargar periódicamente los valores predeterminados de Remote Config antes del lanzamiento de cualquier nueva aplicación para garantizar que su aplicación y el backend de Remote Config permanezcan sincronizados.

Para descargar un archivo que contiene valores predeterminados de plantilla:

DESCANSAR

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

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

Consola de base de fuego

  1. En la pestaña Parámetros , abra el menú y seleccione Descargar valores predeterminados .
  2. Cuando se le solicite, haga clic en el botón de opción que corresponde al formato de archivo que desea descargar y luego haga clic en Descargar archivo .

Para obtener más información sobre cómo importar los valores predeterminados de Remote Config en su aplicación, consulte: