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

قوالب التكوين عن بعد وتعيين الإصدار

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

نموذج Remote Config هو مجموعة من جانب الخادم للمعلمات والشروط بتنسيق JSON التي أنشأتها لمشروع Firebase. يمكنك تعديل القالب وإدارته باستخدام وحدة تحكم Firebase ، التي تعرض محتويات النموذج بتنسيق رسومي في علامتي التبويب " المعلمات " و " الشروط ". يمكنك أيضًا استخدام واجهات برمجة التطبيقات الخلفية للتكوين البعيد أو 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 ويخزن القالب السابق كإصدار يمكنك استرداده أو التراجع إليه حسب الحاجة. يتم زيادة أرقام الإصدارات بالتتابع من القيمة الأولية المخزنة بواسطة Remote Config. تتضمن جميع القوالب حقلاً version كما هو موضح ، يحتوي على بيانات وصفية حول هذا الإصدار المحدد.

باستخدام وحدة تحكم Firebase أو Firebase CLI أو واجهات برمجة تطبيقات الواجهة الخلفية للتكوين البعيد ، يمكنك تنفيذ مهام إدارة الإصدار التالية:

  • سرد كافة إصدارات القوالب المخزنة
  • استرجع نسخة محددة
  • التراجع إلى إصدار معين

أثناء قيامك بإدارة قوالب التكوين عن بُعد ، ضع حد انتهاء الصلاحية في الاعتبار: لا تنتهي صلاحية قالب "التكوين عن بُعد" النشط الحالي الذي يستخدمه تطبيقك ؛ ومع ذلك ، إذا تم استبداله بتحديث ، فسيتم تخزين الإصدار السابق لمدة 90 يومًا فقط ، وبعد ذلك ستنتهي صلاحيته ولا يمكن استرجاعه. يوجد أيضًا حد إجمالي يبلغ 300 نسخة مخزنة. إذا كنت تريد تخزين قالب أو التراجع عنه خارج تلك الحدود ، فاحفظه وخزنه يدويًا.

إدارة إصدارات قوالب التكوين عن بعد

يصف هذا القسم كيفية إدارة إصدارات قالب "التكوين عن بُعد" الخاص بك. لمزيد من التفاصيل حول كيفية إنشاء القوالب وتعديلها وحفظها برمجيًا ، راجع تعديل التهيئة عن بُعد برمجيًا .

سرد كافة الإصدارات المخزنة من قالب Remote Config

يمكنك استرداد قائمة بجميع الإصدارات المخزنة من قالب Remote Config. فمثلا:

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

جافا

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 أم من التراجع أو ما إذا كانت تغييرات إضافية من حفظ إجباري للقالب.

Firebase CLI

firebase remoteconfig:versions:list

استخدم الخيار --limit للحد من عدد الإصدارات التي يتم إرجاعها. مرر "0" لجلب جميع الإصدارات.

تتضمن قائمة القوالب بيانات وصفية لجميع الإصدارات المخزنة ، بما في ذلك وقت التحديث ، والمستخدم الذي قام بذلك ، وما إذا كان قد تم إجراؤه عبر وحدة التحكم أو واجهة برمجة تطبيقات REST. فيما يلي مثال على عنصر الإصدار:

{
  "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"
  }]

استرجع إصدارًا محددًا من قالب Remote Config

يمكنك استرداد أي إصدار مخزن محدد من قالب Remote Config. فمثلا:

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

جافا

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

معلمة URL ?version_number صالحة فقط لعمليات GET ؛ لا يمكنك استخدامه لتحديد أرقام الإصدارات للتحديثات. طلب الحصول على مشابه بدون المعلمة ?version_number يمكن أن يسترد القالب النشط الحالي.

وحدة تحكم Firebase

بشكل افتراضي ، يعرض جزء التفاصيل في علامة التبويب سجل التغييرات القالب النشط الحالي. لعرض تفاصيل إصدار آخر في القائمة ، حدده من القائمة اليمنى.

يمكنك عرض فرق تفصيلي للإصدار المحدد حاليًا وأي إصدار مخزن آخر بالمرور فوق قائمة السياق لأي إصدار غير محدد وتحديد مقارنة بالإصدار المحدد.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

اختياريًا ، يمكنك كتابة الإخراج إلى ملف محدد باستخدام -o, FILENAME .

التراجع إلى إصدار مخزن محدد من قالب Remote Config

يمكنك العودة إلى أي نسخة مخزنة من القالب. فمثلا:

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

جافا

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 يصبح القالب النشط.

قم بتنزيل قوالب Remote Config ونشرها

قم بتنزيل قوالب التكوين عن بعد ونشرها لدمجها في التحكم بالمصادر وأنظمة الإنشاء وأتمتة تحديثات التكوين والحفاظ على المعلمات والقيم متزامنة عبر مشاريع متعددة.

يمكنك تنزيل نموذج Remote Config النشط حاليًا برمجيًا أو من وحدة تحكم Firebase. يمكنك بعد ذلك تحديث ملف JSON المُصدَّر ونشره على نفس المشروع ، أو نشره في مشروع جديد أو حالي.

لنفترض أن لديك العديد من المشاريع التي تمثل مراحل مختلفة من دورة حياة تطوير البرامج ، مثل بيئات التطوير والاختبار والتشغيل المرحلي والإنتاج. في هذه الحالة ، يمكنك ترقية قالب تم اختباره بالكامل من بيئة التدريج الخاصة بك إلى بيئة الإنتاج الخاصة بك عن طريق تنزيله من مشروعك المرحلي ونشره في مشروع الإنتاج الخاص بك.

يمكنك أيضًا استخدام هذه الطريقة لترحيل التكوينات من مشروع إلى آخر ، أو ملء مشروع جديد بمعلمات وقيم من مشروع تم إنشاؤه.

لا يتم تضمين المعلمات وقيم المعلمات التي تم إنشاؤها على وجه التحديد كمتغيرات في تجربة اختبار A / B في القوالب المصدرة.

لتصدير واستيراد قوالب التكوين عن بعد:

  1. قم بتنزيل قالب Remote Config Config الحالي .
  2. تحقق من صحة قالب Remote Config .
  3. انشر قالب Remote Config .

قم بتنزيل قالب التكوين البعيد الحالي

يمكنك تنزيل نموذج 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);
      });
}

جافا

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. من علامة التبويب Remote Config Parameters أو Terms ، افتح قائمة وحدد Download current config file .
  2. عند المطالبة ، انقر فوق تنزيل ملف التكوين ، واختر الموقع الذي تريد حفظ الملف فيه ، ثم انقر فوق حفظ .

Firebase CLI

firebase remoteconfig:get -o filename

تحقق من صحة قالب Remote Config

يمكنك التحقق من صحة تحديثات النموذج قبل نشرها باستخدام Firebase Admin SDK أو REST API. يتم أيضًا التحقق من صحة القوالب عندما تحاول النشر من Firebase CLI أو وحدة تحكم Firebase.

تتحقق عملية التحقق من صحة النموذج من وجود أخطاء مثل المفاتيح المكررة للمعلمات والشروط أو أسماء الشروط غير الصالحة أو الشروط غير الموجودة أو علامات ETAG ذات التنسيق الخاطئ. على سبيل المثال ، قد يؤدي الطلب الذي يحتوي على أكثر من العدد المسموح به من المفاتيح — 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);
      });
}

جافا

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

راحة

تحقق من صحة تحديثات النموذج من خلال إلحاق معلمة URL ?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).

انشر قالب Remote Config

بعد تنزيل نموذج وإجراء أي تغييرات لازمة على محتوى 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);
      });
}

جافا

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. من علامة التبويب Remote Config Parameters أو Terms ، افتح قائمة ، وحدد نشر من ملف .
  2. عند المطالبة ، انقر فوق " استعراض " ، وانتقل إلى ملف "التكوين البعيد" الذي تريد نشره وحدده ، ثم انقر فوق "تحديد" .
  3. سيتم التحقق من صحة الملف ، وفي حالة نجاحه ، يمكنك النقر فوق " نشر " لإتاحة التكوين على الفور لتطبيقاتك ومستخدميك.

تم تضمين تخصيصات وشروط Remote Config في القوالب التي تم تنزيلها ، لذلك من المهم أن تكون على دراية بالقيود التالية عند محاولة النشر إلى مشروع مختلف:

  • لا يمكن استيراد التخصيصات من مشروع إلى آخر.

    على سبيل المثال ، إذا قمت بتمكين التخصيصات في مشروعك وقمت بتنزيل قالب وتحريره ، فيمكنك نشره على نفس المشروع ، ولكن لا يمكنك نشره في مشروع آخر ما لم تحذف التخصيصات من القالب.

  • يمكن استيراد الشروط من مشروع إلى مشروع ، ولكن لاحظ أن أي قيم شرطية محددة (مثل معرفات التطبيق أو الجماهير) ، يجب أن تكون موجودة في المشروع الهدف قبل النشر.

    على سبيل المثال ، إذا كان لديك معلمة Remote Config تستخدم شرطًا يحدد قيمة النظام الأساسي iOS ، فيمكن نشر القالب إلى مشروع آخر ، لأن قيم النظام الأساسي هي نفسها لأي مشروع. ومع ذلك ، إذا كان يحتوي على شرط يعتمد على معرف تطبيق معين أو جمهور مستخدم غير موجود في المشروع المستهدف ، فسيفشل التحقق من الصحة.

  • إذا كان النموذج الذي تخطط لنشره يحتوي على شروط تعتمد على Google Analytics ، فيجب تمكين Analytics في المشروع المستهدف.

قم بتنزيل الإعدادات الافتراضية لقالب Remote Config

نظرًا لأن تطبيقك قد لا يكون دائمًا متصلاً بالإنترنت ، يجب عليك تكوين القيم الافتراضية للتطبيق من جانب العميل لجميع معلمات التهيئة عن بُعد. يجب عليك أيضًا مزامنة القيم الافتراضية لعميل التطبيق وقيم المعلمات الافتراضية لواجهة التكوين عن بُعد بشكل دوري ، لأنها قد تتغير بمرور الوقت.

كما هو موضح في الروابط الخاصة بالنظام الأساسي في نهاية هذا القسم ، يمكنك تعيين هذه الإعدادات الافتراضية يدويًا في تطبيقك أو يمكنك تبسيط هذه العملية عن طريق تنزيل الملفات التي تحتوي فقط على أزواج المفتاح والقيمة لجميع المعلمات وقيمها الافتراضية في قالب التكوين عن بعد النشط. يمكنك بعد ذلك تضمين هذا الملف في مشروعك وتهيئة تطبيقك لاستيراد هذه القيم.

يمكنك تنزيل هذه الملفات بتنسيق XML لتطبيقات Android وتنسيق قائمة الخصائص (plist) لتطبيقات iOS و JSON لتطبيقات الويب.

نوصي بتنزيل الإعدادات الافتراضية لـ Remote Config بشكل دوري قبل أي إصدار جديد للتطبيق للتأكد من أن التطبيق الخاص بك والواجهة الخلفية لـ Remote Config متزامنة.

لتنزيل ملف يحتوي على الإعدادات الافتراضية للقالب:

راحة

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. عند المطالبة ، انقر فوق زر الاختيار الذي يتوافق مع تنسيق الملف الذي تريد تنزيله ، ثم انقر فوق تنزيل الملف .

لمزيد من المعلومات حول استيراد القيم الافتراضية لـ Remote Config في التطبيق الخاص بك ، راجع: