Gatilhos da Configuração remota

É possível acionar uma função em resposta a eventos da Configuração remota do Firebase, incluindo a publicação de uma nova versão de configuração ou a reversão para uma versão mais antiga. Neste guia, descrevemos como criar uma função em segundo plano da Configuração remota que executa uma comparação de duas versões de modelo.

Acionar uma função da Configuração remota

Para acionar uma função da Configuração remota, use o subpacote firebase-functions/v2/remoteConfig. Para responder às atualizações dos modelos de acordo com o que foi mostrado neste guia, use a função onConfigUpdated, fazendo a importação com outros componentes necessários, como o SDK Admin do Firebase:

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

O objeto TemplateVersion retornado por onConfigUpdated contém os principais campos de metadados para uma atualização de modelo, como o número da versão e o horário da atualização. Você também pode recuperar o e-mail do usuário que fez a atualização, com um nome e uma imagem, se disponível.

Este é um exemplo de uma função da Configuração remota que retorna uma comparação entre as versões atualizadas e as que foram substituídas. A função examina o campo versionNumber do objeto de modelo e recupera a versão atual (recém-atualizada) junto com a versão imediatamente 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;
      });
});

Neste exemplo, usamos os módulos json-diff e request-promise para criar a comparação e formular a solicitação para receber o objeto de modelo. Para uma amostra de função de 1ª geração que incorpore a lógica de cliente da Configuração remota assim como o Firebase Cloud Messaging, consulte Propagar atualizações da Configuração remota em tempo real.