É 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.