Activadores de Remote Config

Puedes activar una función como respuesta a un evento de Firebase Remote Config, incluida la publicación de una versión de configuración nueva o la reversión a una anterior. En esta guía, se describe cómo crear una función en segundo plano de Remote Config que ejecuta un comando diff de dos versiones de plantilla.

Activa una función de Remote Config

Para activar una función de Remote Config, usa el subpaquete firebase-functions/v2/remoteConfig. Para responder a las actualizaciones de plantillas de la manera que se muestra en esta guía, debes usar la función onConfigUpdated y, luego, importarla junto con otros componentes obligatorios, como el SDK de Firebase Admin:

// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onConfigUpdated} = require("firebase-functions/v2/remoteConfig");
const logger = require("firebase-functions/logger");
// The Firebase Admin SDK to obtain access tokens.
const admin = require("firebase-admin");
admin.initializeApp();
const fetch = require("node-fetch");
const jsonDiff = require("json-diff");

El objeto TemplateVersion que muestra onConfigUpdated contiene los campos de metadatos clave para una actualización de plantilla, como el número de versión y la hora de la actualización. También se puede recuperar el correo electrónico del usuario que realizó la actualización, con un nombre y una imagen, si se encuentran disponibles.

Este es un ejemplo de una función de Remote Config que muestra una diferencia de cada versión actualizada y la versión que reemplazó. La función examina el campo versionNumber del objeto de la plantilla y recupera la versión actual (actualizada recientemente) junto con la versión inmediatamente anterior:

exports.showconfigdiff = onConfigUpdated((event) => {
  // Obtain the access token from the admin SDK
  return admin.credential.applicationDefault().getAccessToken()
      .then((accessTokenObj) => {
        return accessTokenObj.access_token;
      })
      .then((accessToken) => {
      // Get the version number from the event object
        const currentVersion = event.data.versionNumber;
        const templatePromises = [];
        templatePromises.push(getTemplate(currentVersion, accessToken));
        templatePromises.push(getTemplate(currentVersion - 1, accessToken));
        // Get the templates
        return Promise.all(templatePromises);
      })
      .then((results) => {
        const currentTemplate = results[0];
        const previousTemplate = results[1];
        // Figure out the differences of the templates
        const diff = jsonDiff.diffString(previousTemplate, currentTemplate);
        // Log the difference
        logger.log(diff);

        return null;
      }).catch((error) => {
        logger.error(error);
        return null;
      });
});

En este ejemplo, se utilizan los módulos json-diff y request-promise para crear la diferencia y formular la solicitud a fin de obtener el objeto de plantilla. Para ver una muestra de función de primera generación que incorpora la lógica del cliente de Remote Config y Firebase Cloud Messaging, consulta Propaga actualizaciones de Remote Config en tiempo real.