Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

שנה את התצורה המרוחקת באופן פרוגרמטי

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

מסמך זה מתאר כיצד ניתן לקרוא ולשנות באופן פרוגרמטי את קבוצת הפרמטרים והתנאים בפורמט 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 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.

כדי ליצור קובץ מפתח פרטי עבור חשבון השירות שלך:

  1. במסוף Firebase, פתח את הגדרות > חשבונות שירות .

  2. לחץ על צור מפתח פרטי חדש ולאחר מכן אשר על ידי לחיצה על צור מפתח .

  3. אחסן בצורה מאובטחת את קובץ ה-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

private 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 זה יכול להתרחש בשני המצבים הבאים:
  • אירעה שגיאת אי התאמה של גרסה מכיוון שקבוצת הערכים והתנאים עודכנו מאז שאחזרת ערך ETag לאחרונה. כדי לפתור זאת, עליך להשתמש בפקודה GET כדי לקבל תבנית חדשה וערך ETag, לעדכן את התבנית ולאחר מכן לשלוח באמצעות התבנית הזו וערך ה-ETag הטרי.
  • בוצעה פקודת PUT (עדכון Remote Config request template) מבלי לציין כותרת If-Match .
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.

להדרכה על ניהול גרסאות תבניות תצורה מרחוק, ראה תבניות תצורה מרחוק וניהול גרסאות .

,

מסמך זה מתאר כיצד ניתן לקרוא ולשנות באופן פרוגרמטי את קבוצת הפרמטרים והתנאים בפורמט 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 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.

כדי ליצור קובץ מפתח פרטי עבור חשבון השירות שלך:

  1. במסוף Firebase, פתח את הגדרות > חשבונות שירות .

  2. לחץ על צור מפתח פרטי חדש ולאחר מכן אשר על ידי לחיצה על צור מפתח .

  3. אחסן בצורה מאובטחת את קובץ ה-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

private 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."
    }
  }
}

The modifications above first define a set of conditions, and then defines default values and condition-based parameter ( conditional values ) values for each parameter. It also adds an optional description for each element; like code comments, these are for developer use and are not displayed in the app. An ETag is also provided for version control purposes.

The Remote Config backend APIs provide several conditions and comparison operators that you can use to change the behavior and appearance of your app. To learn more about conditions and the operators supported for these conditions, see the conditional expression reference .

HTTP Error codes

Status Code Meaning
200 Successfully Updated
400 A validation error occurred. For example, a request containing more than the allowed number of keys—2000—would return 400 (Bad Request) with the error message, Param count too large . Also, this HTTPS Status Code can occur in these two situations:
  • A version mismatch error occurred because the set of values and conditions have been updated since you last retrieved an ETag value. To resolve this, you should use a GET command to get a fresh template and ETag value, update the template, and then submit using that template and the fresh ETag value.
  • A PUT command (Update Remote Config template request) was made without specifying an If-Match header.
401 An authorization error occurred (no access token was provided or the Firebase Remote Config REST API has not been added to your project in the Cloud Developer Console)
403 An authentication error occurred (the wrong access token was provided)
500 An internal error occurred. If this error occurs, file a Firebase support ticket

A status code of 200 means that the Remote Config template (parameters, values and conditions for the project) has been updated and is now available to apps that use this project. Other status codes indicate that the Remote Config template that existed previously is still in effect.

After you submit updates to your template, go to the Firebase console to verify that your changes appear as expected. This is critical because the ordering of conditions affects how they are evaluated (the first condition that evaluates true takes effect).

ETag usage and forced updates

The Remote Config REST API uses an entity tag (ETag) to prevent race conditions and overlapping updates to resources. To learn more about ETags, see ETag - HTTP .

For the REST API, Google recommends that you cache the ETag provided by the most recent GET command, and use that ETag value in the If-Match request header when issuing PUT commands. If your PUT command results in an HTTPS Status Code 409, you should issue a fresh GET command to acquire a new ETag and template to use with your next PUT command.

You can circumvent the ETag, and the protection from that it provides, by forcing the Remote Config template to be updated as follows: If-Match: * However, this approach is not recommended because it risks causing the loss of updates to your Remote Config template if multiple clients are updating the Remote Config template. This kind of conflict could occur with multiple clients using the API, or with conflicting updates from API clients and Firebase console users.

For guidance on managing Remote Config template versions, see Remote Config templates and versioning .