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

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

הנה דוגמה לקובץ תבנית:

  {
    "conditions": [
      {
        "name": "ios",
        "expression": "device.os == 'ios'"
      }
    ],
    "parameters": {
      "welcome_message": {
        "defaultValue": {
          "value": "Welcome to this sample app"
        },
        "conditionalValues": {
          "ios": {
            "value": "Welcome to this sample iOS app"
          }
        }
      },
      "welcome_message_caps": {
        "defaultValue": {
          "value": "false"
        }
      },
      "header_text": {
        "defaultValue": {
          "useInAppDefault": true
        }
      }
    },
    "version": {
      "versionNumber": "28",
      "updateTime": "2020-05-14T18:39:38.994Z",
      "updateUser": {
        "email": "user@google.com"
      },
      "updateOrigin": "CONSOLE",
      "updateType": "INCREMENTAL_UPDATE"
    }
  }

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

עם מסוף Firebase, Firebase CLI, או ממשקי API של קונפיגורציה מרוחק, תוכל לבצע את משימות ניהול הגרסאות הבאות:

  • רשום את כל גרסאות התבניות המאוחסנות
  • אחזר גרסה ספציפית
  • חזור לגרסה ספציפית

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

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

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

רשום את כל הגרסאות המאוחסנות של תבנית התצורה המרוחקת

אתה יכול לאחזר רשימה של כל הגרסאות המאוחסנות של תבנית התצורה המרוחקת. לדוגמה:

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

Java

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

מנוחה

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions

קונסולת Firebase

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

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

Firebase CLI

firebase remoteconfig:versions:list

השתמש באפשרות --limit כדי להגביל את מספר הגרסאות המוחזרות. העבר את '0' כדי להביא את כל הגרסאות.

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

{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]

אחזר גרסה ספציפית של תבנית התצורה המרוחקת

אתה יכול לאחזר כל גרסה מאוחסנת ספציפית של תבנית התצורה המרוחקת. לדוגמה:

Node.js

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

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

מנוחה

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

פרמטר כתובת האתר ?version_number תקף רק עבור פעולות GET ; אינך יכול להשתמש בו כדי לציין מספרי גרסה עבור עדכונים. בקשת קבל דומה ללא הפרמטר ?version_number תחזיר את התבנית הפעילה הנוכחית.

קונסולת Firebase

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

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

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

לחלופין, אתה יכול לכתוב את הפלט לקובץ שצוין באמצעות -o, FILENAME .

חזור לגרסה מאוחסנת ספציפית של תבנית התצורה המרוחקת

אתה יכול לחזור לכל גרסה מאוחסנת של התבנית. לדוגמה:

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

Java

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

מנוחה

כדי לחזור לתבנית תצורה מרחוק מאוחסנת, הנפק HTTP POST בשיטה המותאמת אישית :rollback ובגוף הבקשה, הגרסה הספציפית שיש להחיל. לדוגמה:

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

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

קונסולת Firebase

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

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

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

מחק תבנית תצורה מרחוק

אתה יכול למחוק תבניות Config מרחוק ממסוף Firebase. כדי למחוק תבנית תצורה מרחוק:

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

  2. עבור אל התבנית שברצונך למחוק, לחץ על More , ולאחר מכן בחר מחק .

  3. כשתתבקש לאשר את המחיקה, לחץ על מחק .

הורד ופרסם תבניות Config מרחוק

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

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

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

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

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

כדי לייצא ולייבא תבניות של תצורה מרחוק:

  1. הורד את תבנית תצורת התצורה המרוחקת הנוכחית .
  2. אמת את תבנית התצורה המרוחקת .
  3. פרסם את תבנית התצורה המרוחקת .

הורד את תבנית התצורה המרוחקת הנוכחית

אתה יכול להוריד את התבנית הנוכחית והפעילה של Remote Config באופן תכנותי, או באמצעות מסוף Firebase.

השתמש בפקודות הבאות כדי להוריד את התבנית הפעילה של Remote Config בפורמט JSON:

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());

מנוחה

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

פקודה זו מפלטת את מטען ה-JSON לקובץ אחד, ואת הכותרות (כולל ה-ETag) לקובץ headers נפרד.

קונסולת Firebase

  1. מהכרטיסייה 'פרמטרים או תנאים של תצורה מרחוק' , פתח את תפריט ובחר הורד את קובץ התצורה הנוכחי .
  2. כשתתבקש, לחץ על הורד קובץ תצורה , בחר את המיקום שבו ברצונך לשמור את הקובץ ולאחר מכן לחץ על שמור .

Firebase CLI

firebase remoteconfig:get -o filename

אמת את תבנית התצורה המרוחקת

אתה יכול לאמת את עדכוני התבניות שלך לפני פרסומם באמצעות Firebase Admin SDK או REST API. תבניות מאומתות גם כאשר אתה מנסה לפרסם ממסוף Firebase CLI או Firebase.

תהליך אימות התבניות בודק שגיאות כגון מפתחות כפולים עבור פרמטרים ותנאים, שמות תנאים לא חוקיים או תנאים לא קיימים, או ETtags בפורמט שגוי. לדוגמה, בקשה המכילה יותר ממספר המפתחות המותר - 2000 - תחזיר את הודעת השגיאה, Param count too large .

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());
  }
}

מנוחה

אמת עדכוני תבנית על ידי הוספת פרמטר כתובת אתר ?validate_only=true לבקשת הפרסום שלך:

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?validate_only=true -d @filename

אם התבנית שלך אומתה בהצלחה, הפקודה curl מחזירה את תבנית ה-JSON ששלחת, ובקובץ headers השמורות תמצא סטטוס HTTP/2 200 ו-ETag מעודכן עם הסיומת -0 . אם התבנית שלך לא אומתה, תקבל את שגיאת האימות בתגובת ה-JSON וקובץ headers שלך יכיל תגובה שאינה 200 (ולא ETag).

פרסם את תבנית התצורה המרוחקת

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

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

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

השתמש בפקודות הבאות כדי לפרסם את התבנית שלך:

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());
  }
}

מנוחה

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 זו, אתה יכול לציין את התוכן באמצעות התו "@", ואחריו שם הקובץ.

קונסולת Firebase

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

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

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

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

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

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

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

הורד את ברירת המחדל של תבנית תצורה מרחוק

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

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

אתה יכול להוריד קבצים אלה בפורמט XML עבור אפליקציות אנדרואיד, פורמט רשימת נכסים (plist) עבור אפליקציות iOS ו-JSON עבור אפליקציות אינטרנט.

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

כדי להוריד קובץ המכיל ברירות מחדל של תבנית:

מנוחה

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

השתמש XML , PLIST או JSON כערך format , תלוי באיזה פורמט קובץ ברצונך להוריד.

קונסולת Firebase

  1. בלשונית פרמטרים , פתח את תפריט ובחר הורד ערכי ברירת מחדל .
  2. כאשר תתבקש, לחץ על לחצן הבחירה המתאים לפורמט הקובץ שברצונך להוריד ולאחר מכן לחץ על הורד קובץ .

למידע נוסף על ייבוא ​​ערכי ברירת מחדל של תצורה מרוחקת לאפליקציה שלך, ראה: