Anda dapat memicu fungsi sebagai respons terhadap peristiwa Firebase Remote Config termasuk publikasi versi konfigurasi baru atau rollback ke versi yang lebih lama. Panduan ini berisi penjelasan mengenai cara membuat fungsi latar belakang Remote Config yang menjalankan operasi diff terhadap dua versi template.
Memicu fungsi Remote Config
Untuk memicu fungsi Remote Config, impor modul yang diperlukan terlebih dahulu:
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
Kemudian, tentukan pengendali untuk peristiwa update. Objek peristiwa yang diteruskan ke fungsi ini berisi metadata terkait update template, seperti nomor versi baru dan waktu update. Anda juga dapat mengambil email pengguna yang melakukan update, beserta nama dan gambar jika ada.
Berikut adalah contoh fungsi Remote Config yang mencatat operasi diff dari setiap versi yang diupdate dan versi yang digantikannya ke dalam log. Fungsi ini memeriksa kolom nomor versi di objek template dan mengambil versi saat ini (yang baru diupdate) sekaligus versi yang memiliki satu nomor lebih rendah:
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);
}
});
Contoh ini menggunakan modul json-diff
dan
request-promise
untuk
membuat operasi diff dan membuat permintaan guna mendapatkan objek template.
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())
Contoh ini menggunakan deepdiff
untuk membuat operasi diff, dan requests
untuk membuat dan mengirim permintaan guna mendapatkan objek template.