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


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

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

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

يمكنك أيضًا استخدام Remote Config REST API وAdmin 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

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

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

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