Remote Config-Trigger


Sie können eine Funktion als Reaktion auf Firebase Remote Config-Ereignisse auslösen, z. B. die Veröffentlichung einer neuen Konfigurationsversion oder das Rollback auf eine ältere Version. In dieser Anleitung wird beschrieben, wie Sie eine Remote Config-Hintergrundfunktion erstellen, die einen Vergleich zwischen zwei Vorlagenversionen durchführt.

Remote Config-Funktion auslösen

Wenn Sie eine Remote Config-Funktion auslösen möchten, importieren Sie zuerst die erforderlichen Module:

Node.js

 // 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");
const app = admin.initializeApp();
const fetch = require("node-fetch");
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 Update-Ereignis. Das an diese Funktion übergebene Ereignisobjekt enthält Metadaten zu einer Vorlagenaktualisierung, z. B. die neue Versionsnummer und die Uhrzeit der Aktualisierung. Sie können auch die E-Mail-Adresse des Nutzers abrufen, der die Aktualisierung vorgenommen hat, einschließlich Name und Bild, sofern verfügbar.

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

Node.js

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

    // Get the version number from the event object
    const remoteConfigApi = "https://firebaseremoteconfig.googleapis.com/v1/" +
        `projects/${app.options.projectId}/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 = 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-Vergleich 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.