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

תבניות הגדרה באמצעות SDK לאדמינים, API בארכיטקטורת REST ו-Firebase CLI. page_type: guide

במסמך הזה מוסבר איך לקרוא ולשנות באופן פרוגרמטי את קבוצת הפרמטרים והתנאים בפורמט JSON שנקראת תבנית Remote Config. כך אפשר לבצע שינויים בתבנית בקצה העורפי, ואפליקציית הלקוח יכולה לאחזר אותם באמצעות ספריית הלקוח.

באמצעות Remote Config API בארכיטקטורת REST,‏ Admin SDKs או Firebase CLI שמתוארים במדריך הזה, אתם יכולים לעקוף את ניהול התבנית במסוף Firebase ולשלב ישירות שינויים ב-Remote Config בתהליכים שלכם. לדוגמה, באמצעות ממשקי API של Remote Config backend, אפשר:

  • תזמון עדכונים של Remote Config אפשר להשתמש בהפעלות של API בשילוב עם משימת cron כדי לשנות את הערכים של Remote Config בלוח זמנים קבוע.
  • ייבוא של ערכי הגדרות בקבוצות כדי לעבור ביעילות מהמערכת הקניינית שלכם אל Firebase Remote Config.
  • שימוש ב-Remote Config עם Cloud Functions for Firebase, שינוי ערכים באפליקציה על סמך אירועים שמתרחשים בצד השרת. לדוגמה, אפשר להשתמש ב-Remote Config כדי לקדם תכונה חדשה באפליקציה, ואז להפסיק את הקידום באופן אוטומטי אחרי שמזהים שמספיק אנשים השתמשו בתכונה החדשה.

דיאגרמה שמציגה את הקצה העורפי של הגדרת התצורה מרחוק באינטראקציה עם כלים ושרתים בהתאמה אישית

בקטעים הבאים במדריך הזה מוסבר על הפעולות שאפשר לבצע באמצעות ממשקי ה-API של ה-Backend‏ Remote Config.

שינוי Remote Config באמצעות Firebase Admin SDK

‫Admin SDK הוא קבוצה של ספריות שרת שמאפשרות לכם ליצור אינטראקציה עם Firebase מסביבות עם הרשאות. בנוסף לעדכונים של Remote Config, Admin SDK מאפשר ליצור ולאמת טוקנים של Firebase Auth, ולקרוא ולכתוב מ-Realtime Database. מידע נוסף על הדרישות המוקדמות וההגדרה של Admin SDK זמין במאמר הוספת Firebase Admin SDK לשרת.

כדי לעיין בקוד לדוגמה שמבצע את המשימות האלה באמצעות Admin SDK, אפשר לעיין באחת מהאפליקציות הבאות למתחילים:

בתהליך טיפוסי של Remote Config, יכול להיות שתקבלו את התבנית הנוכחית, תשנו חלק מהפרמטרים או מקבוצות הפרמטרים והתנאים, תאמתו את התבנית ואז תפרסמו אותה. לפני ששולחים את קריאות ה-API האלה, צריך לאשר בקשות מ-SDK.

אתחול ה-SDK והרשאה לבקשות API

כשמפעילים את Admin SDK בלי פרמטרים, ערכת ה-SDK משתמשת בApplication Default Credentials וקוראת את האפשרויות ממשתנה הסביבה 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);

קבלת תבנית Remote Config נוכחית

כשעובדים עם Remote Config תבניות, חשוב לזכור שהן מנוהלות לפי גרסאות, ולכל גרסה יש תוקף מוגבל מרגע היצירה ועד לרגע שבו מחליפים אותה בעדכון: 90 ימים, עם מגבלה כוללת של 300 גרסאות מאוחסנות. מידע נוסף זמין במאמר בנושא תבניות וניהול גרסאות.

אפשר להשתמש בממשקי ה-API של ה-Backend כדי לקבל את הגרסה הפעילה הנוכחית של תבנית Remote Config בפורמט 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());

שינוי פרמטרים של Remote Config

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

שינוי Remote Config התנאים

אפשר לשנות ולהוסיף Remote Config תנאים וערכים מותנים באופן פרוגרמטי. לדוגמה, כדי להוסיף תנאי חדש:

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

אימות התבנית Remote Config

אפשר גם לאמת את העדכונים לפני שמפרסמים אותם, כמו שמוצג כאן:

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 בפורמט שגוי. לדוגמה, אם בקשה מכילה יותר ממספר המפתחות המותר – 2,000 – תוחזר הודעת השגיאה Param count too large.

פרסום תבנית Remote Config

אחרי שמאחזרים תבנית ומשנים אותה בהתאם לעדכונים, אפשר לפרסם אותה. פרסום תבנית כמו שמתואר בקטע הזה מחליף את כל תבנית ההגדרות הקיימת בקובץ המעודכן, ולתבנית הפעילה החדשה מוקצה מספר גרסה שגדול ב-1 ממספר הגרסה של התבנית שהיא החליפה.

במידת הצורך, אפשר להשתמש ב-API בארכיטקטורת REST כדי לחזור לגרסה הקודמת. כדי לצמצם את הסיכון לשגיאות בעדכון, אפשר לאמת לפני הפרסום.

Remote Config התאמות אישיות ותנאים נכללים בתבניות שהורדתם, ולכן חשוב לשים לב למגבלות הבאות כשמנסים לפרסם בפרויקט אחר:

  • אי אפשר לייבא התאמות אישיות מפרויקט לפרויקט.

    לדוגמה, אם הפעלתם התאמות אישיות בפרויקט שלכם, הורדתם תבנית ועריכתם אותה, תוכלו לפרסם אותה באותו פרויקט, אבל לא תוכלו לפרסם אותה בפרויקט אחר אלא אם תמחקו את ההתאמות האישיות מהתבנית.

  • אפשר לייבא תנאים מפרויקט לפרויקט, אבל חשוב לזכור שערכים ספציפיים של תנאים (כמו מזהי אפליקציות או קהלים) צריכים להיות קיימים בפרויקט היעד לפני שמפרסמים אותו.

    לדוגמה, אם יש לכם פרמטר Remote 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());
  }
}

שינוי Remote Config באמצעות API בארכיטקטורת REST

בקטע הזה מתוארות היכולות העיקריות של Remote Config REST API בכתובת https://firebaseremoteconfig.googleapis.com. למידע מפורט, ראו מאמרי העזרה של ה-API.

קבלת אסימון גישה לאימות והרשאה של בקשות API

פרויקטים ב-Firebase תומכים בחשבונות שירות של Google, שאפשר להשתמש בהם כדי לקרוא לממשקי API של שרת Firebase משרת האפליקציה או מסביבה מהימנה. אם אתם מפתחים קוד באופן מקומי או פורסים את האפליקציה שלכם בארגון, אתם יכולים להשתמש בפרטי הכניסה שהתקבלו באמצעות חשבון השירות הזה כדי לאשר בקשות לשרת.

אפשר לראות את כל חשבונות השירות של פרויקט Firebase בכרטיסייה Settings (הגדרות) > Service accounts (חשבונות שירות).

כדי לאמת חשבון שירות ולאשר לו גישה לשירותי Firebase, צריך ליצור קובץ מפתח פרטי בפורמט JSON.

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

  1. במסוף Firebase, עוברים אל הגדרות > הכרטיסייה חשבונות שירות.

  2. לוחצים על Generate New Private Key (יצירת מפתח פרטי חדש) ואז על Generate Key (יצירת מפתח) כדי לאשר.

  3. מאחסנים בצורה מאובטחת את קובץ ה-JSON שמכיל את המפתח.

כשמאשרים גישה באמצעות חשבון שירות, יש שתי אפשרויות לספק את פרטי הכניסה לאפליקציה. אתם יכולים להגדיר את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS או להעביר מפורשות את הנתיב למפתח של חשבון השירות בקוד. האפשרות הראשונה מאובטחת יותר ומומלצת מאוד.

כדי להגדיר את משתנה הסביבה:

מגדירים את משתנה הסביבה GOOGLE_APPLICATION_CREDENTIALS לנתיב של קובץ ה-JSON שמכיל את המפתח של חשבון השירות. המשתנה הזה חל רק על סשן המעטפת הנוכחי, כך שאם פותחים סשן חדש צריך להגדיר את המשתנה שוב.

Linux או macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

עם PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

אחרי שמבצעים את השלבים שלמעלה, השירות Application Default Credentials‏ (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.

Python

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.

שינוי התבנית Remote Config

כשעובדים עם תבניות Remote Config, חשוב לזכור שהן מנוהלות לפי גרסאות, ולכל גרסה יש תוקף מוגבל מרגע היצירה ועד לרגע שבו מחליפים אותה בעדכון: 90 ימים, עם מגבלה כוללת של 300 גרסאות מאוחסנות. מידע נוסף זמין במאמר תבניות וניהול גרסאות.

קבלת התבנית הנוכחית של Remote Config

אפשר להשתמש בממשקי ה-API של ה-Backend כדי לקבל את הגרסה הפעילה הנוכחית של תבנית Remote Config בפורמט JSON.

פרמטרים וערכי פרמטרים שנוצרו במיוחד כווריאציות בניסוי A/B Testing לא נכללים בתבניות שמיוצאות.

משתמשים בפקודות הבאות:

cURL

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 שמשמש לבקשה הבאה.

אימות התבנית Remote Config

אפשר גם לאמת את העדכונים לפני שמפרסמים אותם. כדי לאמת את העדכונים בתבנית, מוסיפים לבקשת הפרסום את פרמטר כתובת ה-URL‏ ?validate_only=true. אם בתשובה מופיע קוד סטטוס 200 ו-etag מעודכן עם הסיומת -0, סימן שהעדכון אומת בהצלחה. תגובה שאינה 200 מציינת שנתוני ה-JSON מכילים שגיאות שצריך לתקן לפני הפרסום.

עדכון התבנית Remote Config

אחרי שמאחזרים תבנית ועורכים את תוכן ה-JSON עם העדכונים שלכם, אפשר לפרסם אותה. פרסום תבנית כמו שמתואר בקטע הזה מחליף את כל תבנית ההגדרות הקיימת בקובץ המעודכן, ולתבנית הפעילה החדשה מוקצה מספר גרסה שגדול ב-1 ממספר הגרסה של התבנית שהיא החליפה.

במידת הצורך, אפשר להשתמש ב-API בארכיטקטורת REST כדי לחזור לגרסה הקודמת. כדי לצמצם את הסיכון לשגיאות בעדכון, אפשר לאמת לפני הפרסום.

Remote Config התאמות אישיות ותנאים נכללים בתבניות שהורדתם, ולכן חשוב לשים לב למגבלות הבאות כשמנסים לפרסם בפרויקט אחר:

  • אי אפשר לייבא התאמות אישיות מפרויקט לפרויקט.

    לדוגמה, אם הפעלתם התאמות אישיות בפרויקט שלכם, הורדתם תבנית ועריכתם אותה, תוכלו לפרסם אותה באותו פרויקט, אבל לא תוכלו לפרסם אותה בפרויקט אחר אלא אם תמחקו את ההתאמות האישיות מהתבנית.

  • אפשר לייבא תנאים מפרויקט לפרויקט, אבל חשוב לזכור שערכים ספציפיים של תנאים (כמו מזהי אפליקציות או קהלים) צריכים להיות קיימים בפרויקט היעד לפני שמפרסמים אותו.

    לדוגמה, אם יש לכם פרמטר Remote Config שמשתמש בתנאי שמציין ערך פלטפורמה של iOS, אפשר לפרסם את התבנית בפרויקט אחר, כי ערכי הפלטפורמה זהים לכל פרויקט. עם זאת, אם הוא מכיל תנאי שמסתמך על מזהה אפליקציה ספציפי או על קהל משתמשים שלא קיים בפרויקט היעד, האימות ייכשל.

  • אם התבנית שאתם מתכננים לפרסם מכילה תנאים שמסתמכים על Google Analytics, צריך להפעיל את Analytics בפרויקט היעד.

cURL

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.

שינוי Remote Config התנאים

אפשר לשנות את התנאיםRemote Config ואת הערכים המותנים באופן פרוגרמטי. כשמשתמשים ב-API בארכיטקטורת REST, צריך לערוך את התבנית ישירות כדי לשנות את התנאים לפני שמפרסמים את התבנית.

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

קודי שגיאה של HTTP

קוד סטטוס משמעות
200 העדכון בוצע בהצלחה
400 אירעה שגיאת אימות. לדוגמה, אם בקשה מכילה יותר ממספר המפתחות המותר – 2, 000 – היא תחזיר את השגיאה 400 (בקשה שגויה) עם הודעת השגיאה Param count too large. בנוסף, קוד סטטוס HTTPS הזה יכול להופיע בשני המקרים הבאים:
  • אירעה שגיאת חוסר התאמה בגרסה כי קבוצת הערכים והתנאים עודכנה מאז הפעם האחרונה שאחזרת ערך ETag. כדי לפתור את הבעיה, צריך להשתמש בפקודה GET כדי לקבל תבנית חדשה וערך ETag חדש, לעדכן את התבנית ואז לשלוח אותה באמצעות התבנית וערך ה-ETag החדש.
  • בוצעה פקודה PUT (בקשה לעדכון תבנית Remote Config) בלי לציין כותרת If-Match.
401 אירעה שגיאת הרשאה (לא סופק אסימון גישה או שלא הוספתם את Remote Config REST API של Firebase לפרויקט במסוף Cloud למפתחים)
403 אירעה שגיאת אימות (סופק טוקן גישה שגוי)
500 אירעה שגיאה פנימית. אם השגיאה הזו מתרחשת, צריך להגיש כרטיס תמיכה של Firebase.

קוד סטטוס 200 מציין שהתבנית Remote Config (פרמטרים, ערכים ותנאים של הפרויקט) עודכנה ועכשיו היא זמינה לאפליקציות שמשתמשות בפרויקט הזה. קודי סטטוס אחרים מציינים שתבנית Remote Config שהייתה קיימת קודם עדיין בתוקף.

אחרי ששולחים עדכונים לתבנית, עוברים אל Firebase מסוף כדי לוודא שהשינויים מופיעים כמצופה. זה קריטי כי הסדר של התנאים משפיע על האופן שבו הם מוערכים (התנאי הראשון שמוערך כ-true הוא זה שמופעל).

שימוש ב-ETag ועדכונים מאולצים

‫API בארכיטקטורת REST‏ Remote Config משתמש בתג ישות (ETag) כדי למנוע מרוץ תהליכים ועדכונים חופפים של משאבים. מידע נוסף על ETags זמין במאמר ETag - HTTP.

ב-API בארכיטקטורת REST, ‏ Google ממליצה לשמור במטמון את ה-ETag שסופק על ידי הפקודה GET האחרונה, ולהשתמש בערך ה-ETag הזה בכותרת הבקשה If-Match כשמנפיקים פקודות PUT. אם הפקודה PUT מחזירה קוד סטטוס 409 של HTTPS, צריך להנפיק פקודה חדשה של GET כדי לקבל תבנית ו-ETag חדשים לשימוש בפקודה הבאה של PUT.

אפשר לעקוף את ה-ETag ואת ההגנה שהוא מספק על ידי כפיית עדכון של תבנית Remote Config באופן הבא: If-Match: *. עם זאת, לא מומלץ להשתמש בגישה הזו כי היא עלולה לגרום לאובדן של עדכונים בתבנית Remote Config אם כמה לקוחות מעדכנים את התבנית Remote Config. סוג כזה של קונפליקט יכול להתרחש כשכמה לקוחות משתמשים ב-API, או כשמתרחשים עדכונים סותרים מלקוחות API וממשתמשי מסוף Firebase.

הנחיות לניהול גרסאות של Remote Configתבניות זמינות במאמר Remote Configתבניות וניהול גרסאות.

שינוי Remote Config באמצעות Firebase CLI

ה-CLI של Firebase מאפשר לכם לבדוק, לנהל ולבטל תבניות של Remote Config, וגם להציג רשימה של ניסויים והשקות של Remote Config, לבדוק אותם ולמחוק אותם ישירות משורת הפקודה.

דרישות מוקדמות והגדרה

  1. מתקינים את Firebase CLI או מעדכנים לגרסה האחרונה.

  2. נכנסים אל Firebase:

    firebase login
  3. מגדירים את הפרויקט הפעיל או מציינים את --project PROJECT_ID בכל פקודה:

    firebase use PROJECT_ID

מוודאים שלחשבון או לחשבון השירות יש את הרשאות ה-IAM הנדרשות:

סיכום פקודות ה-CLI

פקודה תיאור
firebase remoteconfig:versions:list רשימה של גרסאות תבניות של Remote Config מהזמן האחרון.
firebase remoteconfig:get מקבל תבנית Remote Config (אפשר גם לכתוב לקובץ).
firebase remoteconfig:rollback מחזירה את תבנית Remote Config לגרסה קודמת.
firebase remoteconfig:experiments:list מציג רשימה של כל הניסויים Remote Config בפרויקט.
firebase remoteconfig:experiments:get קבלת פרטים של ניסוי ספציפי Remote Config.
firebase remoteconfig:experiments:delete מחיקת ניסוי ספציפי Remote Config.
firebase remoteconfig:rollouts:list מציג רשימה של כל ההשקות של Remote Config בפרויקט.
firebase remoteconfig:rollouts:get מקבלים פרטים על השקה ספציפית של Remote Config.
firebase remoteconfig:rollouts:delete מחיקה של Remote Configהשקה ספציפית.

שינוי תבניות וגרסאות של Remote Config

אפשר להשתמש בפקודות הבאות כדי לבדוק, להוריד ולבטל שינויים בתבניות של Remote Config ובהיסטוריית הגרסאות שלהן:

הצגת רשימה של גרסאות התבניות

כברירת מחדל, מוצגות 10 הגרסאות האחרונות של תבנית Remote Config, כולל מספר הגרסה, זמן העדכון, מקור העדכון, סוג העדכון וupdateUser.

firebase remoteconfig:versions:list [--limit NUMBER_OF_VERSIONS]
  • ‫--limit NUMBER_OF_VERSIONS: המספר המקסימלי של הגרסאות שיוחזרו. מציינים 0 כדי לחזור לכל הגרסאות הקיימות (עד למגבלה של 300 גרסאות שמורות).

דוגמאות:

  • כדי להציג את 10 הגרסאות האחרונות:

    firebase remoteconfig:versions:list
  • כדי להציג רשימה של כל הגרסאות הזמינות:

    firebase remoteconfig:versions:list --limit 0
  • מציגים רשימה של 5 הגרסאות האחרונות:

    firebase remoteconfig:versions:list --limit 5

איך מקבלים תבנית

מקבל את התבנית Remote Config ומפיק את קבוצות הפרמטרים, הפרמטרים, שמות התנאים והגרסה. כברירת מחדל, הפקודה מאחזרת את הגרסה הפעילה העדכנית ומדפיסה סיכום מעוצב במסוף.

firebase remoteconfig:get [-v, --version_number VERSION_NUMBER] [-o, --output FILENAME]
  • ‫-v, --version_number VERSION_NUMBER: מספר הגרסה של התבנית לאחזור. אם לא מציינים גרסה, ברירת המחדל היא הגרסה העדכנית.
  • ‫-o, --output FILENAME: כותב את המטען הייעודי (payload) של תבנית ה-JSON ישירות לנתיב שצוין במקום להדפיס ל-stdout.

דוגמאות:

  • הצגת התבנית הפעילה הנוכחית בטרמינל:

    firebase remoteconfig:get
  • הורדת התבנית הפעילה הנוכחית לקובץ JSON:

    firebase remoteconfig:get -o remote_config_template.json
  • כדי להוריד גרסה היסטורית ספציפית (לדוגמה, גרסה 12) לקובץ:

    firebase remoteconfig:get -v 12 -o remote_config_v12.json

החזרה לתבנית קודמת

מבצע חזרה לגרסה קודמת של תבנית Remote Config פעילה. הפעולה הזו יוצרת גרסה פעילה חדשה שהתוכן שלה זהה לתוכן של גרסת היעד.

firebase remoteconfig:rollback [-v, --version_number VERSION_NUMBER] [--force]
  • ‫-v, --version_number VERSION_NUMBER: מספר גרסת היעד שאליה רוצים לחזור. אם לא מציינים גרסה, ברירת המחדל היא הגרסה הקודמת (הגרסה הנוכחית פחות 1).
  • ‫--force: מבצע את החזרה לגרסה הקודמת באופן מיידי בלי לבקש אישור אינטראקטיבי (Y/N). שימושי לצינורות עיבוד נתונים של CI/CD ולסקריפטים אוטומטיים.

דוגמאות:

  • חזרה לגרסה הקודמת עם אישור אינטראקטיבי:

    firebase remoteconfig:rollback
  • חזרה לגרסה 8 בלי הנחיה:

    firebase remoteconfig:rollback -v 8 --force

שינוי ניסויים ב-A/B Testing

אפשר להשתמש בפקודות הבאות כדי להציג, לבדוק ולמחוק ניסויים של Remote Config A/B Testing ישירות באמצעות ה-CLI:

הצגת רשימת הניסויים

רשימה של כל הניסויים של Remote Config בפרויקט, עם אפשרות סינון וחלוקה לדפים.

firebase remoteconfig:experiments:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • ‫--filter EXPRESSION: ביטוי מסנן להחלה על רשימת הניסויים.
  • ‫--pageSize NUMBER: מספר הניסויים שיוחזרו בכל דף (ברירת המחדל היא 10).
  • ‫--pageToken TOKEN: אסימון להיסט של הדף כשמאחזרים תוצאות עם מספור עמודים.

דוגמה:

firebase remoteconfig:experiments:list

קבלת פרטי הניסוי

הפעולה הזו מחזירה את כל הפרטים של ניסוי Remote Config שצוין.

firebase remoteconfig:experiments:get EXPERIMENT_ID

דוגמה:

firebase remoteconfig:experiments:get exp_promo_discount_2026

מחיקת ניסוי

מחיקת הניסוי Remote Config שצוין.

firebase remoteconfig:experiments:delete EXPERIMENT_ID

דוגמה:

firebase remoteconfig:experiments:delete exp_promo_discount_2026

שינוי השקות של Remote Config

אפשר להשתמש בפקודות הבאות כדי להציג, לבדוק ולמחוק Remote Config השקות ישירות באמצעות ה-CLI:

הצגת רשימת ההשקות

רשימה של כל ההשקות של Remote Config בפרויקט, עם אפשרות סינון וחלוקה לדפים.

firebase remoteconfig:rollouts:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • ‫--filter EXPRESSION: ביטוי מסנן להחלה על רשימת ההפצה.
  • ‫--pageSize NUMBER: מספר ההשקות להחזרה בכל דף (ברירת המחדל היא 10).
  • ‫--pageToken TOKEN: אסימון להיסט של הדף כשמאחזרים תוצאות עם מספור עמודים.

דוגמה:

firebase remoteconfig:rollouts:list

קבלת פרטים על ההשקה

הפעולה מחזירה את כל הפרטים של Remote Configהשקה ספציפית.

firebase remoteconfig:rollouts:get ROLLOUT_ID

דוגמה:

firebase remoteconfig:rollouts:get rollout_new_checkout_flow

מחיקת השקה

מחיקת הפריסה שצוינה של Remote Config.

firebase remoteconfig:rollouts:delete ROLLOUT_ID

דוגמה:

firebase remoteconfig:rollouts:delete rollout_new_checkout_flow

מידע כללי נוסף על פקודות CLI של Firebase זמין במדריך העזר ל-CLI של Firebase.