نماذج 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
،
ولا يمكنك استخدامها لتحديد أرقام الإصدارات للتحديثات. سيؤدي طلب 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 المَعلمات ، انقر على سجلّ التغييرات.انتقِل إلى النموذج الذي تريد حذفه، وانقر على رمز
المزيد، ثم اختَر حذف.عندما يُطلب منك تأكيد الحذف، انقر على حذف.
تنزيل نماذج Remote Config ونشرها
نزِّل نماذج Remote Config وانشرها لدمجها في أنظمة التحكّم في المصدر وأنظمة الإنشاء، ولإجراء تعديلات تلقائية على الإعدادات، ومزامنة المَعلمات والقيم على مستوى مشاريع متعدّدة.
يمكنك تنزيل نموذج Remote Config النشط حاليًا من وحدة تحكّم Firebase. يمكنك بعد ذلك تعديل ملف JSON الذي تم تصديره ونشره في المشروع نفسه، أو نشره في مشروع جديد أو حالي.
لنفترض أنّ لديك مشاريع متعددة تمثّل مراحل مختلفة من دورة حياة تطوير البرامج، مثل بيئات التطوير والاختبار والنشر والإنتاج. في هذه الحالة، يمكنك ترقية نموذج تم اختباره بالكامل من بيئة الاختبار إلى بيئة الإنتاج من خلال تنزيله من مشروع الاختبار ونشره في مشروع الإنتاج.
يمكنك أيضًا استخدام هذه الطريقة لنقل الإعدادات من مشروع إلى آخر، أو تعبئة مشروع جديد بالمَعلمات والقيم من مشروع تم إنشاؤه.
لا يتم تضمين المَعلمات وقيم المَعلمات التي تم إنشاؤها على وجه التحديد كخيارات في تجربة A/B Testing في النماذج التي يتم تصديرها.
لتصدير نماذج Remote Config واستيرادها:
- نزِّل نموذج Remote Config Config الحالي.
- التحقّق من صحة نموذج Remote Config
- انشر نموذج Remote Config.
تنزيل نموذج "الإعداد عن بُعد" الحالي
اتّبِع الخطوات التالية لتنزيل نموذج Remote Config النشط بتنسيق JSON:
وحدة تحكّم Firebase
- من علامة التبويب Remote Config المَعلمات أو الشروط ، افتح القائمة، ثم اختَر تنزيل ملف الإعدادات الحالي.
- انقر على تنزيل ملف الإعدادات عندما يُطلب منك ذلك، واختَر المكان الذي تريد فيه حفظ الملف، ثم انقر على حفظ.
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 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()); } }
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 ملف headers
الذي أرسلته، وسيكون headers
ملفًا محفوظًا يحتوي على رمز الحالة HTTP/2 200 وعلامة ETag معدَّلة مع اللاحقة -0
. إذا لم يتم التحقّق من صحة ملف
، ستتلقّى خطأ التحقّق في ملف
JSON وسيحتوي ملف headers
على استجابة غير 200
(ولا يحتوي على علامة ETag).
نشر نموذج Remote Config
بعد تنزيل نموذج وإجراء أي تغييرات مطلوبة على محتوى JSON و إثبات صحته، يمكنك نشره في مشروع.
يؤدي نشر نموذج إلى استبدال نموذج الإعدادات الحالي بالكامل بالملف المعدَّل وزيادة إصدار النموذج بمقدار واحد. بما أنّه يتم استبدال الإعدادات بالكامل، إذا حذفت مَعلمة من ملف JSON وصعَّدتها، يتم حذف المَعلمة من الخادم ولا تعود متاحة للعملاء.
بعد النشر، تصبح التغييرات التي أجريتها على المَعلمات والقِيَم متاحة على الفور لتطبيقاتك ومستخدميك. إذا لزم الأمر، يمكنك الرجوع إلى إصدار سابق.
استخدِم الأوامر التالية لنشر النموذج:
وحدة تحكّم Firebase
- من علامة التبويب Remote Config المَعلمات أو الشروط ، افتح القائمة، ثم اختَر النشر من ملف.
- انقر على تصفّح عندما يُطلب منك ذلك، وانتقِل إلىملف Remote Config الذي تريد نشره واختَره، ثم انقر على اختيار.
- سيتم التحقّق من الملف، وإذا كان صالحًا، يمكنك النقر على نشر لإتاحة الإعدادات على الفور لتطبيقاتك والمستخدمين.
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
- في علامة التبويب المَعلمات، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.
- عندما يُطلب منك ذلك، انقر على زر الاختيار الذي يتوافق مع تنسيق الملف الذي تريد تنزيله، ثم انقر على تنزيل الملف.
لمزيد من المعلومات عن استيراد القيم التلقائية Remote Config إلى تطبيقك، يُرجى الاطّلاع على: