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