מסמך זה מתאר כיצד ניתן לקרוא ולשנות באופן פרוגרמטי את קבוצת הפרמטרים והתנאים בפורמט JSON המכונה תבנית התצורה המרוחקת . זה מאפשר לך לבצע שינויים בתבנית ב-backend שאפליקציית הלקוח יכולה להביא באמצעות ספריית הלקוח.
באמצעות ה- Remote Config REST API או ב- Admin SDKs המתוארים במדריך זה, תוכל לעקוף את ניהול התבנית במסוף Firebase כדי לשלב ישירות שינויים ב-Remote Config בתהליכים שלך. לדוגמה, עם ממשקי API אחוריים של Config Remote, תוכל:
- תזמון עדכוני תצורה מרחוק . על ידי שימוש בקריאות API בשילוב עם עבודת cron, אתה יכול לשנות ערכי Config מרחוק בלוח זמנים קבוע.
- ייבוא ערכי תצורת אצווה כדי לעבור ביעילות מהמערכת הקניינית שלך ל-Firebase Remote Config.
השתמש ב-Remote Config with Cloud Functions for Firebase , שינוי ערכים באפליקציה שלך בהתבסס על אירועים שמתרחשים בצד השרת. לדוגמה, אתה יכול להשתמש ב-Remote Config כדי לקדם תכונה חדשה באפליקציה שלך, ולאחר מכן לכבות את הקידום הזה באופן אוטומטי ברגע שאתה מזהה מספיק אנשים שקיימו אינטראקציה עם התכונה החדשה.
הסעיפים הבאים של מדריך זה מתארים פעולות שתוכל לבצע עם ממשקי API של קונפיגורציה מרוחק. כדי לסקור קוד כלשהו שמבצע את המשימות הללו באמצעות REST API, עיין באחת מהאפליקציות לדוגמה הבאות:
- Firebase Remote Config REST API Java Quickstart
- Firebase Remote Config REST API Node.js Quickstart
- Firebase Remote Config REST API Python Quickstart
שנה את התצורה המרוחקת באמצעות Firebase Admin SDK
ה-Admin SDK הוא קבוצה של ספריות שרתים המאפשרות לך אינטראקציה עם Firebase מסביבות מורשות. בנוסף לביצוע עדכונים ל-Remote Config, ה-Admin SDK מאפשר יצירה ואימות של אסימוני אימות של Firebase, קריאה וכתיבה ממסד נתונים בזמן אמת, וכן הלאה. למידע נוסף על דרישות מוקדמות והגדרה של Admin SDK, ראה הוסף את Firebase Admin SDK לשרת שלך .
בזרימת תצורה מרחוק טיפוסית, אתה עשוי לקבל את התבנית הנוכחית, לשנות חלק מהפרמטרים או קבוצות הפרמטרים והתנאים, לאמת את התבנית ולאחר מכן לפרסם אותה. לפני ביצוע קריאות API אלה, עליך לאשר בקשות מה-SDK.
אתחל את ה-SDK ואשר בקשות API
כאשר אתה מאתחל את ה-SDK של Admin ללא פרמטרים, ה-SDK משתמש באישורי ברירת המחדל של Google Application וקורא אפשרויות ממשתנה הסביבה FIREBASE_CONFIG
. אם התוכן של המשתנה FIREBASE_CONFIG
מתחיל ב- {
הוא ינותח כאובייקט JSON. אחרת ה-SDK מניח שהמחרוזת היא שם של קובץ JSON המכיל את האפשרויות.
לדוגמה:
Node.js
const admin = require('firebase-admin'); admin.initializeApp();
Java
FileInputStream serviceAccount = new FileInputStream("service-account.json"); FirebaseOptions options = FirebaseOptions.builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .build(); FirebaseApp.initializeApp(options);
קבל את תבנית התצורה המרוחקת הנוכחית
כשאתה עובד עם תבניות Config מרחוק, זכור שהן בעלות גרסאות, ושלכל גרסה יש אורך חיים מוגבל מרגע יצירתה ועד למועד החלפתה בעדכון: 90 יום, עם מגבלה כוללת של 300 גרסאות מאוחסנות. ראה תבניות וגירסאות למידע נוסף.
אתה יכול להשתמש בממשקי ה-API האחוריים כדי לקבל את הגרסה הפעילה הנוכחית של תבנית התצורה המרוחקת בפורמט JSON.
פרמטרים וערכי פרמטרים שנוצרו במיוחד כווריאציות בניסוי A/B Testing אינם כלולים בתבניות מיוצאות.
כדי לקבל את התבנית:
Node.js
function getTemplate() { var config = admin.remoteConfig(); config.getTemplate() .then(function (template) { console.log('ETag from server: ' + template.etag); var templateStr = JSON.stringify(template); fs.writeFileSync('config.json', templateStr); }) .catch(function (err) { console.error('Unable to get template'); console.error(err); }); }
Java
Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get(); // See the ETag of the fetched template. System.out.println("ETag from server: " + template.getETag());
שנה פרמטרים של תצורה מרחוק
אתה יכול לשנות ולהוסיף פרמטרים של תצורה מרחוק וקבוצות פרמטרים באופן פרוגרמטי. לדוגמה, לקבוצת פרמטרים קיימת בשם "new_menu" תוכל להוסיף פרמטר כדי לשלוט בהצגת מידע עונתי:
Node.js
function addParameterToGroup(template) { template.parameterGroups['new_menu'].parameters['spring_season'] = { defaultValue: { useInAppDefault: true }, description: 'spring season menu visibility.', }; }
Java
template.getParameterGroups().get("new_menu").getParameters() .put("spring_season", new Parameter() .setDefaultValue(ParameterValue.inAppDefault()) .setDescription("spring season menu visibility.") );
ה-API מאפשר לך ליצור פרמטרים וקבוצות פרמטרים חדשים, או לשנות ערכי ברירת מחדל, ערכים מותנים ותיאורים. בכל המקרים, עליך לפרסם את התבנית במפורש לאחר ביצוע שינויים.
שנה את תנאי התצורה המרוחקת
אתה יכול לשנות ולהוסיף תנאי תצורה מרחוק וערכים מותנים באופן תכנותי. לדוגמה, כדי להוסיף תנאי חדש:
Node.js
function addNewCondition(template) { template.conditions.push({ name: 'android_en', expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']', tagColor: 'BLUE', }); }
Java
template.getConditions().add(new Condition("android_en", "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));
בכל המקרים, עליך לפרסם את התבנית במפורש לאחר ביצוע שינויים.
ממשקי ה-API של ה-Remote Config Backend מספקים מספר תנאים ואופרטורים להשוואה שבהם תוכל להשתמש כדי לשנות את ההתנהגות והמראה של האפליקציה שלך. למידע נוסף על תנאים ועל האופרטורים הנתמכים עבור תנאים אלה, עיין בהפניה לביטוי מותנה .
אמת את תבנית התצורה המרוחקת
לחלופין, תוכל לאמת את העדכונים שלך לפני פרסומם, כפי שמוצג:
Node.js
function validateTemplate(template) { admin.remoteConfig().validateTemplate(template) .then(function (validatedTemplate) { // The template is valid and safe to use. console.log('Template was valid and safe to use'); }) .catch(function (err) { console.error('Template is invalid and cannot be published'); console.error(err); }); }
Java
try { Template validatedTemplate = FirebaseRemoteConfig.getInstance() .validateTemplateAsync(template).get(); System.out.println("Template was valid and safe to use"); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Template is invalid and cannot be published"); System.out.println(rcError.getMessage()); } }
תהליך אימות זה בודק שגיאות כגון מפתחות כפולים עבור פרמטרים ותנאים, שמות תנאים לא חוקיים או תנאים לא קיימים, או תגי etag שגוי. לדוגמה, בקשה המכילה יותר ממספר המפתחות המותר - 2000 - תחזיר את הודעת השגיאה, Param count too large
.
פרסם את תבנית התצורה המרוחקת
לאחר שאחזר תבנית ותיקנת אותה עם העדכונים הרצויים, תוכל לפרסם אותה. פרסום תבנית כמתואר בסעיף זה מחליף את כל תבנית התצורה הקיימת בקובץ המעודכן, ולתבנית הפעילה החדשה מוקצה גרסה מספר אחד גדול מהתבנית שהיא החליפה.
במידת הצורך, תוכל להשתמש בממשק API של REST כדי לחזור לגרסה הקודמת . כדי להפחית את הסיכון לשגיאות בעדכון, אתה יכול לאמת לפני הפרסום .
התאמות ותנאים של תצורה מרוחקת כלולים בתבניות שהורדו, לכן חשוב להיות מודעים למגבלות הבאות בעת ניסיון לפרסם בפרויקט אחר:
לא ניתן לייבא התאמות אישיות מפרויקט לפרויקט.
לדוגמה, אם יש לך התאמות אישיות מופעלות בפרויקט שלך ואתה מוריד ועורך תבנית, אתה יכול לפרסם אותה באותו פרוייקט, אך לא תוכל לפרסם אותה בפרויקט אחר אלא אם תמחק את ההתאמות האישיות מהתבנית.
ניתן לייבא תנאים מפרויקט לפרויקט, אך שימו לב שכל ערכים מותנים ספציפיים (כמו מזהי אפליקציה או קהלים), צריכים להתקיים בפרויקט היעד לפני הפרסום.
לדוגמה, אם יש לך פרמטר Config מרחוק המשתמש בתנאי המציין ערך פלטפורמה של
iOS
, ניתן לפרסם את התבנית בפרויקט אחר, מכיוון שערכי הפלטפורמה זהים עבור כל פרויקט. עם זאת, אם הוא מכיל תנאי המסתמך על מזהה אפליקציה או קהל משתמשים ספציפיים שאינם קיימים בפרויקט היעד, האימות ייכשל.אם התבנית שאתה מתכנן לפרסם מכילה תנאים המסתמכים על Google Analytics, יש להפעיל את Analytics בפרויקט היעד.
Node.js
function publishTemplate() { var config = admin.remoteConfig(); var template = config.createTemplateFromJSON( fs.readFileSync('config.json', 'UTF8')); config.publishTemplate(template) .then(function (updatedTemplate) { console.log('Template has been published'); console.log('ETag from server: ' + updatedTemplate.etag); }) .catch(function (err) { console.error('Unable to publish template.'); console.error(err); }); }
Java
try { Template publishedTemplate = FirebaseRemoteConfig.getInstance() .publishTemplateAsync(template).get(); System.out.println("Template has been published"); // See the ETag of the published template. System.out.println("ETag from server: " + publishedTemplate.getETag()); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Unable to publish template."); System.out.println(rcError.getMessage()); } }
שנה תצורה מרחוק באמצעות REST API
סעיף זה מתאר את היכולות העיקריות של ה-Remote Config REST API בכתובת https://firebaseremoteconfig.googleapis.com
. לפרטים מלאים, עיין בהפניה ל-API .
קבל אסימון גישה לאימות ואישור בקשות API
פרויקטים של Firebase תומכים בחשבונות שירות של Google , שבהם אתה יכול להשתמש כדי לקרוא לממשקי API של שרת Firebase משרת האפליקציות או מהסביבה המהימנה שלך. אם אתה מפתח קוד באופן מקומי או פורס את היישום שלך במקום, אתה יכול להשתמש באישורים שהושגו דרך חשבון שירות זה כדי לאשר בקשות שרת.
כדי לאמת חשבון שירות ולהעניק לו הרשאה לגשת לשירותי Firebase, עליך ליצור קובץ מפתח פרטי בפורמט JSON.
כדי ליצור קובץ מפתח פרטי עבור חשבון השירות שלך:
במסוף Firebase, פתח את הגדרות > חשבונות שירות .
לחץ על צור מפתח פרטי חדש ולאחר מכן אשר על ידי לחיצה על צור מפתח .
אחסן בצורה מאובטחת את קובץ ה-JSON המכיל את המפתח.
בעת הרשאה באמצעות חשבון שירות, יש לך שתי אפשרויות למתן האישורים ליישום שלך. אתה יכול להגדיר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS , או שאתה יכול להעביר במפורש את הנתיב למפתח חשבון השירות בקוד. האפשרות הראשונה מאובטחת יותר ומומלצת בחום.
כדי להגדיר את משתנה הסביבה:
הגדר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב הקובץ של קובץ ה-JSON שמכיל את מפתח חשבון השירות שלך. משתנה זה חל רק על הפעלת המעטפת הנוכחית שלך, אז אם אתה פותח הפעלה חדשה, הגדר שוב את המשתנה.
לינוקס או macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
חלונות
עם PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
לאחר השלמת השלבים שלעיל, אישורי ברירת המחדל של יישומים (ADC) מסוגלים לקבוע באופן מרומז את האישורים שלך, מה שמאפשר לך להשתמש באישורי חשבון שירות בעת בדיקה או הפעלה בסביבות שאינן של Google.
השתמש באישורי Firebase שלך יחד עם ספריית האימות של Google עבור השפה המועדפת עליך כדי לאחזר אסימון גישה ל-OAuth 2.0 קצר מועד:
node.js
function getAccessToken() {
return admin.credential.applicationDefault().getAccessToken()
.then(accessToken => {
return accessToken.access_token;
})
.catch(err => {
console.error('Unable to get access token');
console.error(err);
});
}
בדוגמה זו, ספריית הלקוח של Google API מאמתת את הבקשה באמצעות אסימון אינטרנט של JSON, או JWT. למידע נוסף, ראה אסימוני אינטרנט של JSON .
פִּיתוֹן
def _get_access_token():
"""Retrieve a valid access token that can be used to authorize requests.
:return: Access token.
"""
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'service-account.json', SCOPES)
access_token_info = credentials.get_access_token()
return access_token_info.access_token
Java
public static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refreshAccessToken();
return googleCredentials.getAccessToken().getTokenValue();
}
לאחר שפג תוקפו של אסימון הגישה שלך, שיטת רענון האסימון נקראת באופן אוטומטי כדי לאחזר אסימון גישה מעודכן.
כדי לאשר גישה ל-Remote Config, בקש את ההיקף https://www.googleapis.com/auth/firebase.remoteconfig
.
שנה את תבנית התצורה המרוחקת
כשאתה עובד עם תבניות Config מרחוק, זכור שהן בעלות גרסאות, ושלכל גרסה יש אורך חיים מוגבל מרגע יצירתה ועד למועד החלפתה בעדכון: 90 יום, עם מגבלה כוללת של 300 גרסאות מאוחסנות. ראה תבניות וגירסאות למידע נוסף.
קבל את תבנית התצורה המרוחקת הנוכחית
אתה יכול להשתמש בממשקי ה-API האחוריים כדי לקבל את הגרסה הפעילה הנוכחית של תבנית התצורה המרוחקת בפורמט JSON.
פרמטרים וערכי פרמטרים שנוצרו במיוחד כווריאציות בניסוי A/B Testing אינם כלולים בתבניות מיוצאות.
השתמש בפקודות הבאות:
סִלְסוּל
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
פקודה זו מפלטת את מטען ה-JSON לקובץ אחד, ואת הכותרות (כולל ה-Etag) לקובץ נפרד.
בקשת HTTP גולמית
Host: firebaseremoteconfig.googleapis.com GET /v1/projects/my-project-id/remoteConfig HTTP/1.1 Authorization: Bearer token Accept-Encoding: gzip
קריאת API זו מחזירה את ה-JSON הבא, יחד עם כותרת נפרדת הכוללת ETag שבו אתה משתמש עבור הבקשה הבאה.
אמת את תבנית התצורה המרוחקת
לחלופין, תוכל לאמת את העדכונים שלך לפני פרסומם. אמת עדכוני תבניות על ידי הוספת לבקשת הפרסום שלך את פרמטר כתובת האתר ?validate_only=true
. בתגובה, קוד סטטוס 200 ו-etag מעודכן עם הסיומת -0
פירושם שהעדכון שלך אומת בהצלחה. כל תגובה שאינה 200 מצביעה על כך שנתוני ה-JSON מכילים שגיאות שעליך לתקן לפני הפרסום.
עדכן את תבנית התצורה המרוחקת
לאחר שאחזר תבנית ותיקנת את תוכן ה-JSON עם העדכונים הרצויים, תוכל לפרסם אותה. פרסום תבנית כמתואר בסעיף זה מחליף את כל תבנית התצורה הקיימת בקובץ המעודכן, ולתבנית הפעילה החדשה מוקצה גרסה מספר אחד גדול מהתבנית שהיא החליפה.
במידת הצורך, תוכל להשתמש בממשק API של REST כדי לחזור לגרסה הקודמת . כדי להפחית את הסיכון לשגיאות בעדכון, אתה יכול לאמת לפני הפרסום .
התאמות ותנאים של תצורה מרוחקת כלולים בתבניות שהורדו, לכן חשוב להיות מודעים למגבלות הבאות בעת ניסיון לפרסם בפרויקט אחר:
לא ניתן לייבא התאמות אישיות מפרויקט לפרויקט.
לדוגמה, אם יש לך התאמות אישיות מופעלות בפרויקט שלך ואתה מוריד ועורך תבנית, אתה יכול לפרסם אותה באותו פרוייקט, אך לא תוכל לפרסם אותה בפרויקט אחר אלא אם תמחק את ההתאמות האישיות מהתבנית.
ניתן לייבא תנאים מפרויקט לפרויקט, אך שימו לב שכל ערכים מותנים ספציפיים (כמו מזהי אפליקציה או קהלים), צריכים להתקיים בפרויקט היעד לפני הפרסום.
לדוגמה, אם יש לך פרמטר Config מרחוק המשתמש בתנאי המציין ערך פלטפורמה של
iOS
, ניתן לפרסם את התבנית בפרויקט אחר, מכיוון שערכי הפלטפורמה זהים עבור כל פרויקט. עם זאת, אם הוא מכיל תנאי המסתמך על מזהה אפליקציה או קהל משתמשים ספציפיים שאינם קיימים בפרויקט היעד, האימות ייכשל.אם התבנית שאתה מתכנן לפרסם מכילה תנאים המסתמכים על Google Analytics, יש להפעיל את Analytics בפרויקט היעד.
סִלְסוּל
curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename
עבור פקודת curl
זו, אתה יכול לציין את התוכן באמצעות התו "@", ואחריו שם הקובץ.
בקשת HTTP גולמית
Host: firebaseremoteconfig.googleapis.com PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1 Content-Length: size Content-Type: application/json; UTF8 Authorization: Bearer token If-Match: expected ETag Accept-Encoding: gzip JSON_HERE
מכיוון שזו בקשת כתיבה, ה- ETag משתנה על ידי פקודה זו ו-ETag מעודכן מסופק בכותרות התגובה של פקודת PUT
הבאה.
שנה את תנאי התצורה המרוחקת
אתה יכול לשנות באופן תכנותי את תנאי התצורה המרוחקת ואת הערכים המותנים. עם REST API, עליך לערוך את התבנית ישירות כדי לשנות תנאים לפני פרסום התבנית.
{ "conditions": [{ "name": "android_english", "expression": "device.os == 'android' && device.country in ['us', 'uk']", "tagColor": "BLUE" }, { "name": "tenPercent", "expression": "percent <= 10", "tagColor": "BROWN" }], "parameters": { "welcome_message": { "defaultValue": { "value": "Welcome to this sample app" }, "conditionalValues": { "tenPercent": { "value": "Welcome to this new sample app" } }, "description": "The sample app's welcome message" }, "welcome_message_caps": { "defaultValue": { "value": "false" }, "conditionalValues": { "android_english": { "value": "true" } }, "description": "Whether the welcome message should be displayed in all capital letters." } } }
השינויים שלמעלה מגדירים תחילה קבוצה של תנאים, ולאחר מכן מגדירים ערכי ברירת מחדל וערכי פרמטר מבוססי תנאים ( ערכים מותנים ) עבור כל פרמטר. זה גם מוסיף תיאור אופציונלי עבור כל אלמנט; כמו הערות קוד, אלה מיועדות למפתחים ואינן מוצגות באפליקציה. ETag מסופק גם למטרות בקרת גרסאות.
ממשקי ה-API של ה-Remote Config Backend מספקים מספר תנאים ואופרטורים להשוואה שבהם תוכל להשתמש כדי לשנות את ההתנהגות והמראה של האפליקציה שלך. למידע נוסף על תנאים ועל האופרטורים הנתמכים עבור תנאים אלה, עיין בהפניה לביטוי מותנה .
קודי שגיאה של HTTP
קוד סטטוס | מַשְׁמָעוּת |
---|---|
200 | עודכן בהצלחה |
400 | אירעה שגיאת אימות. לדוגמה, בקשה המכילה יותר ממספר המפתחות המותר - 2000 - תחזיר 400 (בקשה שגויה) עם הודעת השגיאה, Param count too large . כמו כן, קוד מצב HTTPS זה יכול להתרחש בשני המצבים הבאים:
|
401 | אירעה שגיאת הרשאה (לא סופק אסימון גישה או שה-Firebase Remote Config REST API לא התווסף לפרויקט שלך ב-Cloud Developer Console) |
403 | אירעה שגיאת אימות (סופק אסימון גישה שגוי) |
500 | אירעה שגיאה פנימית. אם שגיאה זו מתרחשת, הגש כרטיס תמיכה של Firebase |
קוד סטטוס של 200 פירושו שתבנית התצורה המרוחקת (פרמטרים, ערכים ותנאים עבור הפרויקט) עודכנה וזמינה כעת לאפליקציות המשתמשות בפרויקט זה. קודי סטטוס אחרים מציינים שתבנית התצורה המרוחקת שהייתה קיימת בעבר עדיין בתוקף.
לאחר שליחת עדכונים לתבנית, עבור אל מסוף Firebase כדי לוודא שהשינויים שלך מופיעים כצפוי. זה קריטי מכיוון שסדר התנאים משפיע על אופן הערכתם (התנאי הראשון שמעריך true
נכנס לתוקף).
שימוש ב-ETag ועדכונים כפויים
ה-Remote Config REST API משתמש בתג ישות (ETag) כדי למנוע תנאי מרוץ ועדכונים חופפים למשאבים. למידע נוסף על תגי ET, ראה ETag - HTTP .
עבור REST API, Google ממליצה לך לשמור את ה-ETag שסופק על ידי פקודת GET
העדכנית ביותר, ולהשתמש בערך ה-ETag הזה בכותרת הבקשה If-Match
בעת הוצאת פקודות PUT
. אם פקודת PUT
שלך מביאה לקוד מצב HTTPS 409, עליך להוציא פקודת GET
חדשה כדי לרכוש ETag ותבנית חדשה לשימוש עם פקודת PUT
הבאה שלך.
אתה יכול לעקוף את ה-ETag, ואת ההגנה שהוא מספק, על ידי כפיית עדכון תבנית התצורה המרוחקת באופן הבא: If-Match: *
עם זאת, גישה זו אינה מומלצת מכיוון שהיא עלולה לגרום לאובדן עדכונים לתצורה המרוחקת שלך. תבנית אם מספר לקוחות מעדכנים את תבנית התצורה המרוחקת. סוג זה של התנגשות יכול להתרחש עם לקוחות מרובים המשתמשים ב-API, או עם עדכונים סותרים מלקוחות API ומשתמשי מסוף Firebase.
להדרכה על ניהול גרסאות תבניות תצורה מרחוק, ראה תבניות תצורה מרחוק וניהול גרסאות .