Remote Config-Trigger

Sie können eine Funktion als Reaktion auf Firebase Remote Config-Ereignisse auslösen, einschließlich der Veröffentlichung einer neuen Konfigurationsversion oder des Rollbacks auf eine ältere Version. In diesem Leitfaden wird beschrieben, wie Sie eine Remote Config-Hintergrundfunktion erstellen, die einen Diff-Vergleich von zwei Vorlagenversionen durchführt.

Remote Config-Funktion auslösen

Importieren Sie zuerst die erforderlichen Module, um eine Remote Config-Funktion auszulösen:

Node.js

 const {URL, URLSearchParams} = require("node:url");
// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onConfigUpdated} = require("firebase-functions/remoteConfig");
const {requiresRole, requiresAPI} = require("firebase-functions");
const logger = require("firebase-functions/logger");
// The Firebase Admin SDK to obtain access tokens.
const {initializeApp, applicationDefault} = require("firebase-admin/app");
initializeApp();
const jsonDiff = require("json-diff");

Python

 # The Cloud Functions for Firebase SDK to set up triggers and logging.
from firebase_functions import remote_config_fn

# The Firebase Admin SDK to obtain access tokens.
import firebase_admin

app = firebase_admin.initialize_app()

import deepdiff
import requests

Definieren Sie dann einen Handler für das Aktualisierungsereignis. Das an diese Funktion übergebene Ereignisobjekt enthält Metadaten zu einer Vorlagenaktualisierung, z. B. die neue Versionsnummer und den Zeitpunkt der Aktualisierung. Sie können auch die E-Mail-Adresse des Nutzers abrufen, der die Aktualisierung vorgenommen hat, einschließlich Name und Bild, falls verfügbar.

Hier ist ein Beispiel für eine Remote Config-Funktion, die einen Diff jeder aktualisierten Version und der ersetzten Version protokolliert. Die Funktion prüft das Feld für die Versionsnummer des Vorlagenobjekts und ruft die aktuelle (neu aktualisierte) Version zusammen mit der Version ab, die eine Nummer niedriger ist:

Node.js

 exports.showconfigdiff = onConfigUpdated(async (event) => {
  try {
    // Obtain the access token from the Admin SDK
    const accessTokenObj = await applicationDefault()
        .getAccessToken();
    const accessToken = accessTokenObj.access_token;

    // Get the version number from the event object
    const remoteConfigApi = new URL(
        `https://firebaseremoteconfig.googleapis.com/v1/projects/${process.env.GCLOUD_PROJECT}/remoteConfig`,
    );
    const currentVersion = event.data.versionNumber;
    const prevVersion = currentVersion - 1;
    const templatePromises = [];
    templatePromises.push(fetch(
        remoteConfigApi,
        {
          method: "POST",
          body: new URLSearchParams([["versionNumber", currentVersion + ""]]),
          headers: {Authorization: "Bearer " + accessToken},
        },
    ));
    templatePromises.push(fetch(
        remoteConfigApi,
        {
          method: "POST",
          body: new URLSearchParams([["versionNumber", prevVersion + ""]]),
          headers: {Authorization: "Bearer " + accessToken},
        },
    ));

    // Get the templates
    const responses = await Promise.all(templatePromises);
    const results = await Promise.all(responses.map((r) => r.json()));
    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);
  } catch (error) {
    logger.error(error);
  }
});

In diesem Beispiel werden die Module json-diff und request-promise verwendet, um den Diff zu erstellen und die Anfrage zum Abrufen des Vorlagenobjekts zu erstellen.

Python

 @remote_config_fn.on_config_updated()
def showconfigdiff(event: remote_config_fn.CloudEvent[remote_config_fn.ConfigUpdateData]) -> None:
    """Log the diff of the most recent Remote Config template change."""

    # Obtain an access token from the Admin SDK
    access_token = app.credential.get_access_token().access_token

    # Get the version number from the event object
    current_version = int(event.data.version_number)

    # Figure out the differences between templates
    remote_config_api = (
        "https://firebaseremoteconfig.googleapis.com/v1/" f"projects/{app.project_id}/remoteConfig"
    )
    current_template = requests.get(
        remote_config_api,
        params={"versionNumber": current_version},
        headers={"Authorization": f"Bearer {access_token}"},
    )
    previous_template = requests.get(
        remote_config_api,
        params={"versionNumber": current_version - 1},
        headers={"Authorization": f"Bearer {access_token}"},
    )
    diff = deepdiff.DeepDiff(previous_template, current_template)

    # Log the difference
    print(diff.pretty())

In diesem Beispiel wird deepdiff verwendet, um den Diff zu erstellen, und requests, um die Anfrage zum Abrufen des Vorlagenobjekts zu erstellen und zu senden.