نماذج "الإعداد عن بُعد" وتحديد الإصدارات


نماذج Remote Config هي مجموعات من المَعلمات والشروط بتنسيق JSON التي أنشأتها لمشروعك على Firebase. إِنْتَ يمكنك إنشاء نماذج عملاء يجلب منها تطبيقك القيم الخادم، والتي يمكن لعملاء الخادم من خلالها جلب القيم.

يناقش هذا القسم نماذج العملاء. للتعرف على بيانات خاصة بالخادم النماذج، انقر على نماذج الخادم:

ويمكنك تعديل النموذج وإدارته باستخدام وحدة تحكُّم "Firebase" التي تعرض. محتويات النموذج بتنسيق رسومي في المعلَمات علامات التبويب الشروط.

يمكنك أيضًا استخدام صفحة Remote Config واجهة برمجة تطبيقات REST وSDK للمشرف أو Firebase CLI لتعديل وإدارة قالب العميل الخاص بك.

في ما يلي مثال على ملف نموذج خادم:

{
  "parameters": {
    "preamble_prompt": {
      "defaultValue": {
        "value": "You are a helpful assistant who knows everything there is to know about Firebase! "
      },
      "description": "Add this prompt to the user's prompt",
      "valueType": "STRING"
    },
    "model_name": {
      "defaultValue": {
        "value": "gemini-pro-test"
      },
      "valueType": "STRING"
    },
    "generation_config": {
      "defaultValue": {
        "value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
      },
      "valueType": "JSON"
    },
  },
  "version": {
    "versionNumber": "19",
    "isLegacy": true
  }
}

يمكنك تنفيذ مهام إدارة الإصدارات هذه باستخدام وحدة تحكّم Firebase:

  • سرد جميع إصدارات النموذج المخزنة
  • استرداد نسخة محددة
  • العودة إلى إصدار عميل محدَّد
  • حذف Remote Config نموذج من التغيير السجلّ صفحة

هناك حدّ أقصى إجمالي يبلغ 300 إصدار محفوظ مدى الحياة لكلّ نوع نموذج (300 نموذج عميل و300 نموذج خادم)، بما في ذلك أرقام الإصدارات المحفوظة للنماذج المحذوفة. إذا نشرت أكثر من 300 نسخة من النموذج لكل نوع من النماذج خلال مدة إنشاء المشروع، يتم حذف النسخ الأقدم، مع الاحتفاظ بحد أقصى 300 نسخة من هذا النوع.

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

يمكنك حذف Remote Config نموذج حسب الحاجة من سجلّ التغييرات صفحة على وحدة تحكّم Remote Config.

إدارة نُسخ نماذج Remote Config

يوضّح هذا القسم كيفية إدارة إصدارات Remote Config. القالب.

إدراج جميع النُسخ المخزَّنة من نموذج "Remote Config"

يمكنك استرداد قائمة كل النُسخ المخزَّنة من نموذج Remote Config ولإجراء ذلك:

وحدة تحكّم Firebase

في علامة التبويب المَعلمات، انقر على "الساعة" الرمز المعروض في أعلى اليسار. يؤدي هذا إلى فتح سجلّ التغييرات تسرد جميع إصدارات النموذج المخزنة في قائمة قائمة على اليسار.

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

واجهة سطر الأوامر Firebase

firebase remoteconfig:versions:list

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

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

REST

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

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

```json
{
  "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. لاسترداد نموذج مخزَّن :الإصدار:

وحدة تحكّم واحدة (Firebase)

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

يمكنك الاطّلاع على الفرق المفصل عن الإصدار المحدَّد حاليًا وأي إصدار آخر بتمرير مؤشر الماوس فوق قائمة السياقات لأي نسخة غير محددة واختَر المقارنة مع الإصدار المحدّد

واجهة سطر الأوامر Firebase

firebase remoteconfig:get -v VERSION_NUMBER

وبشكلٍ اختياري، يمكنك كتابة الناتج في ملف محدّد باستخدام -o, FILENAME.

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

REST

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 ستجلب النموذج النشط الحالي.

العودة إلى إصدار مخزَّن محدّد من نموذج Remote Config

يمكنك الرجوع إلى أي إصدار محفوظ من النموذج. للعودة إلى إصدار سابق من نموذج:

وحدة تحكّم واحدة (Firebase)

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

واجهة سطر الأوامر Firebase

firebase remoteconfig:rollback -v VERSION_NUMBER

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

REST

للرجوع إلى نموذج Remote Config مخزَّن، عليك إصدار طلب 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}'

يتضمن الرد محتوى النموذج المخزَّن والنشط الآن، بالإضافة إلى البيانات الوصفية للإصدار الجديد.

يُرجى العلم أنّ عملية التراجع هذه تؤدي إلى إنشاء إصدار جديد مرقّم. على سبيل المثال، يؤدي الرجوع من الإصدار 10 إلى الإصدار 6 إلى إنشاء نسخة جديدة من الإصدار 6، والتي تختلف عن النسخة الأصلية فقط من حيث أنّ رقم الإصدار هو 11. الإصدار الأصلي 6 لا يزال مخزنًا، على افتراض عدم انتهاء صلاحيته، وأن الإصدار 11 النموذج النشط.

حذف نموذج Remote Config

يمكنك حذف نماذج "Remote Config" من وحدة تحكّم Firebase. إلى حذف نموذج Remote Config:

1- من Remote Config المَعلمات الصفحة، انقر على سجلّ التغييرات
  1. بدّل إلى النموذج الذي تريد حذفه، وانقر على المزيد، ثم اختيار حذف

  2. عندما يُطلب منك تأكيد الحذف، انقر على حذف.

تنزيل نماذج Remote Config ونشرها

عليك تنزيل نماذج "Remote Config" ونشرها لدمجها في التحكم في المصادر وإنشاء الأنظمة، والتشغيل الآلي لتحديثات التهيئة، والاحتفاظ بالمعلمات والقيم متزامنة بين المشروعات المتعددة.

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

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

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

المَعلمات وقيم المَعلمات التي تم إنشاؤها تحديدًا كخيارات منتج في لا يتم تضمين تجربة واحدة (A/B Testing) في النماذج التي تم تصديرها.

لتصدير نماذج Remote Config واستيرادها:

  1. نزِّل نموذج ضبط Remote Config الحالي.
  2. التحقّق من صحة نموذج Remote Config
  3. انشر نموذج Remote Config.

تنزيل نموذج "الإعداد عن بُعد" الحالي

استخدِم ما يلي لتنزيل نموذج Remote Config النشط فيه. تنسيق JSON:

وحدة تحكّم واحدة (Firebase)

  1. من Remote Config المَعلمات أو الشروط افتح القائمة، اختَر تنزيل ملف الإعداد الحالي.
  2. انقر على تنزيل ملف الإعداد واختَر الموقع الذي تريده عندما يُطلب منك ذلك تريد حفظ الملف، ثم انقر على حفظ.

واجهة سطر الأوامر Firebase

firebase remoteconfig:get -o filename

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

REST

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 Admin SDK أو REST API. يتم التحقّق من صحة "النماذج" أيضًا عند محاولة للنشر من وحدة تحكم واجهة سطر الأوامر Firebase أو 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());
  }
}

REST

تحقّق من صحة تعديلات النموذج من خلال إلحاق مَعلمة عنوان 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 نشرها، يتم حذف المعلمة من الخادم ولا تكون متاحة للعملاء.

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

استخدِم الأوامر التالية لنشر النموذج:

وحدة تحكّم واحدة (Firebase)

  1. من علامة التبويب Remote Config المَعلمات أو الشروط ، افتح القائمة، ثم اختَر النشر من ملف.
  2. انقر على تصفّح عندما يُطلب منك ذلك، وانتقِل إلىملف Remote Config الذي تريد نشره، ثم انقر على اختيار.
  3. سيتم التحقق من صحة الملف، وفي حالة نجاحه، يمكنك النقر نشر لإتاحة الإعدادات على الفور التطبيقات والمستخدمين.

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

REST

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 هذا، يمكنك تحديد المحتوى باستخدام الحرف "@" ، متبوعًا باسم الملف.

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

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

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

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

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

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

تنزيل الإعدادات التلقائية لنماذج Remote Config

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

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

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

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

لتنزيل ملف يحتوي على الإعدادات التلقائية للنموذج:

REST

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 التلقائية إلى يمكنك الاطّلاع على: