Sie können eine Funktion als Reaktion auf Remote Config Ereignisse auslösen, z. B. die Veröffentlichung einer neuen Konfigurationsversion oder den Rollback zu einer älteren Version. In dieser Anleitung wird beschrieben, wie Sie eine Remote Config Hintergrundfunktion erstellen, die einen Vergleich zwischen zwei Vorlagenversionen durchführt.
Eine Remote Config Funktion auslösen
Importieren Sie zuerst die erforderlichen Module, um eine Remote Config Funktion auszulösen:
Node.js
// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onConfigUpdated} = require("firebase-functions/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 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 einem Vorlagenupdate, z. B. die neue Versionsnummer und den Zeitpunkt des Updates. Sie können auch die E-Mail-Adresse des Nutzers abrufen, der das Update vorgenommen hat, zusammen mit dem Namen und einem Bild, falls verfügbar.
Hier ist ein Beispiel für eine Remote Config Funktion, die einen Vergleich zwischen jeder aktualisierten Version und der Version protokolliert, die sie ersetzt hat. Die Funktion prüft das Feld für die Versionsnummer des Vorlagenobjekts und ruft die aktuelle (neu aktualisierte) Version zusammen mit der Version ab, deren Nummer um eins niedriger ist:
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 json-diff und
request-promise Module verwendet, um
den 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 Vergleich zu erstellen, und requests, um die Anfrage zum Abrufen
des Vorlagenobjekts zu erstellen und zu senden.