تعديل الإعداد عن بُعد آليًا

نماذج الإعداد باستخدام مدير SDK وREST API وFirebase CLI.

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

باستخدام Remote Config REST API أو Admin SDKs أو Firebase CLI الموضّحة في هذا الدليل، يمكنك تجاوز إدارة النموذج في وحدة تحكّم Firebase لدمج تغييرات Remote Config مباشرةً في عملياتك. على سبيل المثال، باستخدام Remote Config واجهات برمجة التطبيقات الخاصة بالخادم الخلفي، يمكنك إجراء ما يلي:

  • جدوَلة Remote Config التحديثات يمكنك استخدام طلبات البيانات من واجهة برمجة التطبيقات مع مهمة cron لتغيير قيم Remote Config وفقًا لجدول زمني منتظم.
  • استيراد قيم الإعدادات على شكل دفعات للانتقال بكفاءة من نظامك الخاص إلى Firebase Remote Config
  • استخدِم Remote Config مع Cloud Functions for Firebase، مع تغيير القيم في تطبيقك استنادًا إلى الأحداث التي تحدث على جهة الخادم. على سبيل المثال، يمكنك استخدام Remote Config للترويج لميزة جديدة في تطبيقك، ثم إيقاف هذا الترويج تلقائيًا بعد رصد تفاعل عدد كافٍ من المستخدمين مع الميزة الجديدة.

مخطّط يوضّح تفاعل الخلفية البرمجية لميزة "الإعداد عن بُعد" مع الأدوات والخوادم المخصّصة

توضّح الأقسام التالية من هذا الدليل العمليات التي يمكنك تنفيذها باستخدام واجهات برمجة التطبيقات الخلفية Remote Config.

تعديل Remote Config باستخدام Firebase Admin SDK

‫Admin SDK هي مجموعة من مكتبات الخادم التي تتيح لك التفاعل مع Firebase من بيئات ذات امتيازات. بالإضافة إلى إجراء تعديلات على Remote Config، تتيح Admin SDK إنشاء رموز مميّزة لمصادقة Firebase والتحقّق منها، كما تتيح القراءة والكتابة من Realtime Database. لمزيد من المعلومات حول متطلبات Admin SDK والإعداد، يُرجى الاطّلاع على إضافة Firebase Admin SDK إلى خادمك.

لمراجعة نموذج رمز برمجي ينفّذ هذه المهام باستخدام Admin SDK، اطّلِع على أحد تطبيقات البدء السريع التالية:

في عملية Remote Config نموذجية، يمكنك الحصول على النموذج الحالي، وتعديل بعض المَعلمات أو مجموعات المَعلمات والشروط، والتحقّق من صحة النموذج، ثم نشره. قبل إجراء طلبات البيانات من واجهة برمجة التطبيقات، يجب منح الإذن للطلبات الواردة من حزمة تطوير البرامج (SDK).

إعداد حزمة SDK والموافقة على طلبات واجهة برمجة التطبيقات

عند تهيئة Admin SDK بدون مَعلمات، تستخدم حزمة SDK بيانات الاعتماد التلقائية لتطبيق Google وتقرأ الخيارات من متغيّر البيئة FIREBASE_CONFIG. إذا كان محتوى المتغيّر FIREBASE_CONFIG يبدأ بـ {، سيتم تحليله كعنصر JSON. في ما عدا ذلك، يفترض حزمة تطوير البرامج (SDK) أنّ السلسلة هي اسم ملف JSON يحتوي على الخيارات.

على سبيل المثال:

Node.js

const admin = require('firebase-admin');
admin.initializeApp();

Java

FileInputStream serviceAccount = new FileInputStream("service-account.json");
FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();
FirebaseApp.initializeApp(options);

الحصول على نموذج Remote Config الحالي

عند استخدام نماذج Remote Config، تذكَّر أنّها تتضمّن إصدارات، وأنّ لكل إصدار مدة صلاحية محدودة من وقت إنشائه إلى وقت استبداله بتحديث: 90 يومًا، مع حدّ أقصى إجمالي يبلغ 300 إصدار مخزّن. يمكنك الاطّلاع على مقالة القوالب وإصدارات التطبيق للحصول على مزيد من المعلومات.

يمكنك استخدام واجهات برمجة التطبيقات الخلفية للحصول على الإصدار النشط الحالي من نموذج Remote Configبتنسيق JSON.

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

للحصول على النموذج:

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

تعديل مَعلمات Remote Config

يمكنك تعديل وإضافة مَعلمات Remote Config ومجموعات المَعلمات آليًا. على سبيل المثال، يمكنك إضافة مَعلمة إلى مجموعة مَعلمات حالية باسم "القائمة_الجديدة" للتحكّم في عرض المعلومات الموسمية:

Node.js

function addParameterToGroup(template) {
  template.parameterGroups['new_menu'].parameters['spring_season'] = {
    defaultValue: {
      useInAppDefault: true
    },
    description: 'spring season menu visibility.',
  };
}

Java

template.getParameterGroups().get("new_menu").getParameters()
        .put("spring_season", new Parameter()
                .setDefaultValue(ParameterValue.inAppDefault())
                .setDescription("spring season menu visibility.")
        );

تتيح لك واجهة برمجة التطبيقات إنشاء مَعلمات ومجموعات مَعلمات جديدة، أو تعديل القيم التلقائية والقيم الشرطية والأوصاف. في جميع الحالات، يجب نشر النموذج بشكل صريح بعد إجراء تعديلات عليه.

تعديل Remote Config الشروط

يمكنك تعديل Remote Config الشروط والقيم الشرطية وإضافتها آليًا. على سبيل المثال، لإضافة شرط جديد:

Node.js

function addNewCondition(template) {
  template.conditions.push({
    name: 'android_en',
    expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']',
    tagColor: 'BLUE',
  });
}

Java

template.getConditions().add(new Condition("android_en",
        "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));

في جميع الحالات، يجب نشر النموذج بشكل صريح بعد إجراء تعديلات عليه.

توفّر واجهات برمجة التطبيقات في الخلفية Remote Config عدة شروط وعوامل مقارنة يمكنك استخدامها لتغيير سلوك تطبيقك ومظهره. لمعرفة المزيد عن الشروط وعوامل التشغيل المتوافقة مع هذه الشروط، راجِع مرجع التعبير الشرطي.

التحقّق من صحة نموذج Remote Config

يمكنك اختياريًا التحقّق من صحة تعديلاتك قبل نشرها، كما هو موضّح:

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

تتحقّق عملية التحقّق من الصحة هذه من الأخطاء، مثل المفاتيح المكرّرة للمَعلمات والشروط، أو أسماء الشروط غير الصالحة أو الشروط غير المتوفّرة، أو علامات ETag ذات التنسيق الخاطئ. على سبيل المثال، إذا كان الطلب يتضمّن عددًا من المفاتيح يتجاوز العدد المسموح به وهو 2,000، ستظهر رسالة الخطأ Param count too large.

نشر نموذج Remote Config

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

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

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

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

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

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

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

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

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

تعديل Remote Config باستخدام REST API

يوضّح هذا القسم الإمكانات الرئيسية لواجهة برمجة التطبيقات Remote Config REST في https://firebaseremoteconfig.googleapis.com. للحصول على التفاصيل الكاملة، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات.

الحصول على رمز دخول للمصادقة على طلبات واجهة برمجة التطبيقات واعتمادها

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

يمكنك الاطّلاع على جميع حسابات الخدمة لمشروعك على Firebase في علامة التبويب الإعدادات > حسابات الخدمة.

لإثبات هوية حساب الخدمة ومنحه الإذن بالوصول إلى خدمات Firebase، عليك إنشاء ملف مفتاح خاص بتنسيق JSON.

لإنشاء ملف مفتاح خاص لحساب الخدمة، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم Firebase، انتقِل إلى علامة التبويب الإعدادات > حسابات الخدمة.

  2. انقر على إنشاء مفتاح خاص جديد، ثم أكِّد ذلك بالنقر على إنشاء مفتاح.

  3. خزِّن ملف JSON الذي يحتوي على المفتاح بشكل آمن.

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

لضبط متغيّر البيئة، اتّبِع الخطوات التالية:

اضبط متغيّر البيئة GOOGLE_APPLICATION_CREDENTIALS على مسار ملف JSON الذي يحتوي على مفتاح حساب الخدمة. لا ينطبق هذا المتغيّر إلا على جلسة shell الحالية، لذا إذا فتحت جلسة جديدة، عليك ضبط المتغيّر مرة أخرى.

‫Linux أو macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

باستخدام PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

بعد إكمال الخطوات أعلاه، ستتمكّن "بيانات الاعتماد التلقائية للتطبيق" (ADC) من تحديد بيانات الاعتماد الخاصة بك ضمنيًا، ما يتيح لك استخدام بيانات اعتماد حساب الخدمة عند الاختبار أو التشغيل في بيئات غير تابعة لـ Google.

استخدِم بيانات اعتماد Firebase مع مكتبة Google Auth للغتك المفضّلة من أجل استرداد رمز دخول قصير الأمد عبر بروتوكول OAuth 2.0:

node.js

 function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

في هذا المثال، تصادق مكتبة برامج "واجهة Google API" على الطلب باستخدام رمز ويب مميّز بتنسيق JSON، أو JWT. لمزيد من المعلومات، يُرجى الاطّلاع على رموز JSON المميزة للويب.

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

Java

public static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

بعد انتهاء صلاحية رمز الدخول المميز، يتم تلقائيًا استدعاء طريقة إعادة تحميل الرمز المميز للحصول على رمز دخول مميز معدَّل.

لمنح إذن الوصول إلى Remote Config، يجب طلب النطاق https://www.googleapis.com/auth/firebase.remoteconfig.

تعديل النموذج Remote Config

عند استخدام نماذج Remote Config، تذكَّر أنّها تتضمّن إصدارات، وأنّ لكل إصدار مدة صلاحية محدودة من وقت إنشائه إلى وقت استبداله بتحديث: 90 يومًا، مع حدّ أقصى إجمالي يبلغ 300 إصدار مخزّن. يمكنك الاطّلاع على النماذج وإصدارات التطبيق لمزيد من المعلومات.

الحصول على نموذج Remote Config الحالي

يمكنك استخدام واجهات برمجة التطبيقات الخلفية للحصول على الإصدار النشط الحالي من نموذج Remote Configبتنسيق JSON.

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

استخدِم الأوامر التالية:

cURL

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

يُخرج هذا الأمر حمولة JSON إلى ملف واحد، والعناوين (بما في ذلك Etag) إلى ملف منفصل.

طلب HTTP الأوّلي

Host: firebaseremoteconfig.googleapis.com

GET /v1/projects/my-project-id/remoteConfig HTTP/1.1
Authorization: Bearer token
Accept-Encoding: gzip

يعرض طلب البيانات من واجهة برمجة التطبيقات هذا ملف JSON التالي، بالإضافة إلى عنوان منفصل يتضمّن ETag يمكنك استخدامه في الطلب اللاحق.

التحقّق من صحة نموذج Remote Config

يمكنك اختياريًا التحقّق من صحة التعديلات قبل نشرها. يمكنك التحقّق من صحة تعديلات النموذج من خلال إضافة مَعلمة عنوان URL ?validate_only=true إلى طلب النشر. في الردّ، يشير رمز الحالة 200 وetag معدَّل مع اللاحقة -0 إلى أنّه تم التحقّق من صحة التعديل بنجاح. يشير أي ردّ غير 200 إلى أنّ بيانات JSON تتضمّن أخطاء يجب تصحيحها قبل النشر.

تعديل نموذج Remote Config

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

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

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

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

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

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

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

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

cURL

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

طلب HTTP الأوّلي

Host: firebaseremoteconfig.googleapis.com
PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1
Content-Length: size
Content-Type: application/json; UTF8
Authorization: Bearer token
If-Match: expected ETag
Accept-Encoding: gzip
JSON_HERE

بما أنّ هذا الطلب هو طلب كتابة، يتم تعديل ETag بواسطة هذا الأمر ويتم تقديم ETag معدَّل في عناوين الاستجابة للأمر PUT التالي.

تعديل Remote Config الشروط

يمكنك تعديل شروط Remote Config والقيم الشرطية آليًا. باستخدام REST API، عليك تعديل النموذج مباشرةً لتعديل الشروط قبل نشره.

{
  "conditions": [{
    "name": "android_english",
    "expression": "device.os == 'android' && device.country in ['us', 'uk']",
    "tagColor": "BLUE"
  }, {
    "name": "tenPercent",
    "expression": "percent <= 10",
    "tagColor": "BROWN"
  }],
  "parameters": {
    "welcome_message": {
      "defaultValue": {
        "value": "Welcome to this sample app"
      },
      "conditionalValues": {
        "tenPercent": {
          "value": "Welcome to this new sample app"
        }
      },
      "description": "The sample app's welcome message"
    },
    "welcome_message_caps": {
      "defaultValue": {
        "value": "false"
      },
      "conditionalValues": {
        "android_english": {
          "value": "true"
        }
      },
      "description": "Whether the welcome message should be displayed in all
      capital letters."
    }
  }
}

تحدّد التعديلات في المقتطف السابق أولاً مجموعة من الشروط، ثم تحدّد القيم التلقائية وقيم المَعلمات المستندة إلى الشروط (القيم الشرطية) لكل مَعلمة. يضيفون أيضًا وصفًا اختياريًا لكل عنصر، مثل تعليقات التعليمات البرمجية، وهي مخصّصة للمطوّرين ولا يتم عرضها في التطبيق. يتم أيضًا توفير علامة ETag لأغراض التحكّم في الإصدار.

توفّر واجهات برمجة التطبيقات في الخلفية Remote Config عدة شروط وعوامل مقارنة يمكنك استخدامها لتغيير سلوك تطبيقك ومظهره. لمعرفة المزيد عن الشروط وعوامل التشغيل المتوافقة مع هذه الشروط، راجِع مرجع التعبير الشرطي.

رموز الخطأ في HTTP

رمز الحالة الهدف وراء طلب البحث
200 تم التعديل بنجاح
400 حدث خطأ في التحقّق من الصحة. على سبيل المثال، إذا كان الطلب يتضمّن عددًا من المفاتيح يتجاوز العدد المسموح به وهو 2,000، سيتم عرض الخطأ 400 (طلب غير صالح) مع رسالة الخطأ Param count too large. يمكن أن يظهر رمز حالة HTTPS هذا أيضًا في الحالتَين التاليتَين:
  • حدث خطأ في عدم تطابق الإصدار لأنّه تم تعديل مجموعة القيم والشروط منذ آخر مرة استرددت فيها قيمة ETag. لحلّ هذه المشكلة، عليك استخدام الأمر GET للحصول على نموذج جديد وقيمة ETag جديدة، وتعديل النموذج، ثم إرساله باستخدام هذا النموذج وقيمة ETag الجديدة.
  • تم تنفيذ أمر PUT (طلب تعديل نموذج Remote Config) بدون تحديد عنوان If-Match.
401 حدث خطأ في التفويض (لم يتم تقديم رمز مميّز للوصول أو لم تتم إضافة واجهة Firebase Remote Config REST API إلى مشروعك في Cloud Developer Console)
403 حدث خطأ في المصادقة (تم تقديم رمز الدخول غير الصحيح)
500 حدث خطأ داخلي. في حال حدوث هذا الخطأ، يُرجى تقديم طلب دعم في Firebase.

يعني رمز الحالة 200 أنّه تم تعديل نموذج Remote Config (المَعلمات والقيم والشروط الخاصة بالمشروع) وأصبح متاحًا للتطبيقات التي تستخدم هذا المشروع. تشير رموز الحالة الأخرى إلى أنّ نموذج Remote Config الذي كان متوفّرًا سابقًا لا يزال ساريًا.

بعد إرسال التعديلات إلى النموذج، انتقِل إلى وحدة تحكّم Firebase للتأكّد من ظهور التغييرات على النحو المتوقّع. وهذا أمر بالغ الأهمية لأنّ ترتيب الشروط يؤثر في طريقة تقييمها (يتم تطبيق الشرط الأول الذي يتم تقييمه على أنّه true).

استخدام علامات ETag والتحديثات الإجبارية

تستخدِم واجهة Remote Config REST API علامة كيان (ETag) لمنع حالات التنافس والتعديلات المتداخلة على الموارد. لمزيد من المعلومات حول ETags، راجِع ETag - HTTP.

بالنسبة إلى REST API، تنصح Google بتخزين ETag المقدَّمة من خلال الأمر GET الأخير في ذاكرة التخزين المؤقت، واستخدام قيمة ETag هذه في عنوان الطلب If-Match عند إصدار الأوامر PUT. إذا نتج عن الأمر PUT رمز حالة HTTPS 409، عليك إصدار أمر GET جديد للحصول على علامة ETag ونموذج جديدَين لاستخدامهما مع الأمر PUT التالي.

يمكنك تجاوز علامة ETag والحماية التي توفّرها من خلال فرض تعديل نموذج Remote Config على النحو التالي: If-Match: *. ومع ذلك، لا يُنصح باتّباع هذا الأسلوب لأنّه قد يؤدي إلى فقدان التعديلات التي تم إجراؤها على نموذج Remote Config إذا كان العديد من العملاء يعدّلون نموذج Remote Config. يمكن أن يحدث هذا النوع من التعارض مع عدة عملاء يستخدمون واجهة برمجة التطبيقات، أو مع تحديثات متعارضة من عملاء واجهة برمجة التطبيقات ومستخدمي وحدة تحكّم Firebase.

للحصول على إرشادات حول إدارة إصدارات نموذج Remote Config، اطّلِع على نماذج Remote Config والتحكّم بالإصدارات.

تعديل Remote Config باستخدام واجهة سطر الأوامر Firebase

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

المتطلبات الأساسية والإعداد

  1. ثبِّت Firebase CLI أو حدِّثه إلى أحدث إصدار.

  2. سجِّل الدخول إلى Firebase:

    firebase login
  3. اضبط مشروعك النشط أو حدِّد --project PROJECT_ID مع كل أمر:

    firebase use PROJECT_ID

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

ملخّص أوامر واجهة سطر الأوامر

الأوامر الوصف
firebase remoteconfig:versions:list تعرض هذه السمة قائمة بأحدث إصدارات نموذج Remote Config.
firebase remoteconfig:get يحصل هذا الأمر على نموذج Remote Config (مع إمكانية الكتابة في ملف).
firebase remoteconfig:rollback تعود إلى إصدار سابق من نموذج Remote Config.
firebase remoteconfig:experiments:list تعرض هذه السمة جميع تجارب Remote Config في المشروع.
firebase remoteconfig:experiments:get تعرض هذه الطريقة تفاصيل Remote Config تجربة معيّنة.
firebase remoteconfig:experiments:delete تحذف هذه الطريقة تجربة Remote Config معيّنة.
firebase remoteconfig:rollouts:list تعرض هذه الصفحة جميع عمليات طرح Remote Config في المشروع.
firebase remoteconfig:rollouts:get تعرض هذه الطريقة تفاصيل عملية Remote Config طرح معيّنة.
firebase remoteconfig:rollouts:delete تحذف هذه الطريقة عملية Remote Config طرح محدّدة.

تعديل نماذج Remote Config وإصداراتها

استخدِم الأوامر التالية لفحص قوالب Remote Config وتنزيلها وإرجاعها إلى إصدار سابق وسجلّ التعديلات الخاص بها:

قائمة بنُسخ النماذج

تعرِض هذه القائمة آخر 10 إصدارات من نموذج Remote Config تلقائيًا، بما في ذلك رقم الإصدار ووقت التعديل ومصدر التعديل ونوع التعديل وupdateUser.

firebase remoteconfig:versions:list [--limit NUMBER_OF_VERSIONS]
  • --limit NUMBER_OF_VERSIONS: الحد الأقصى لعدد الإصدارات المطلوب عرضها. حدِّد 0 لعرض جميع الإصدارات الحالية (بحد أقصى 300 إصدار مخزَّن).

أمثلة:

  • أدرِج أحدث 10 إصدارات:

    firebase remoteconfig:versions:list
  • إدراج جميع الإصدارات المتاحة:

    firebase remoteconfig:versions:list --limit 0
  • إدراج آخر 5 إصدارات:

    firebase remoteconfig:versions:list --limit 5

الحصول على نموذج

يحصل على نموذج Remote Config ويعرض مجموعات المَعلمات والمَعلمات وأسماء الشروط والإصدار. يتم تلقائيًا استرداد أحدث إصدار نشط وطباعة ملخّص منسَّق في نافذة Terminal.

firebase remoteconfig:get [-v, --version_number VERSION_NUMBER] [-o, --output FILENAME]
  • -v, --version_number VERSION_NUMBER: رقم إصدار النموذج المطلوب استرداده. في حال عدم تحديدها، يتم ضبطها تلقائيًا على أحدث إصدار.
  • -o, --output FILENAME: يكتب حمولة JSON للنموذج مباشرةً إلى المسار المحدّد بدلاً من الطباعة إلى stdout.

أمثلة:

  • عرض النموذج النشط الحالي في نافذة المحطة الطرفية:

    firebase remoteconfig:get
  • نزِّل النموذج النشط الحالي إلى ملف JSON:

    firebase remoteconfig:get -o remote_config_template.json
  • نزِّل نسخة سابقة معيّنة (مثل الإصدار 12) إلى ملف:

    firebase remoteconfig:get -v 12 -o remote_config_v12.json

إرجاع نموذج

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

firebase remoteconfig:rollback [-v, --version_number VERSION_NUMBER] [--force]
  • استبدِل -v, --version_number VERSION_NUMBER برقم الإصدار المستهدف الذي تريد الرجوع إليه. في حال عدم تحديدها، يتم تلقائيًا استخدام الإصدار السابق مباشرةً (الإصدار الحالي ناقص 1).
  • --force: ينفّذ عملية الرجوع إلى الإصدار السابق على الفور بدون طلب تأكيد تفاعلي (نعم/لا). وهو مفيد لمسارات الدمج المتواصل/النشر المتواصل والنصوص البرمجية المبرمَجة.

أمثلة:

  • العودة إلى الإصدار السابق مع تأكيد تفاعلي:

    firebase remoteconfig:rollback
  • الرجوع إلى الإصدار 8 بدون طلب تأكيد:

    firebase remoteconfig:rollback -v 8 --force

تعديل تجارب A/B Testing

استخدِم الأوامر التالية لإدراج تجارب Remote Config A/B Testing وفحصها وحذفها مباشرةً باستخدام واجهة سطر الأوامر:

قائمة التجارب

تعرض هذه الطريقة جميع تجارب Remote Config للمشروع، مع إمكانية الفلترة والتصفّح على عدّة صفحات.

firebase remoteconfig:experiments:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • ‫--filter EXPRESSION: تعبير الفلتر الذي سيتم تطبيقه على قائمة التجارب.
  • --pageSize NUMBER: عدد التجارب التي سيتم عرضها في كل صفحة (القيمة التلقائية هي 10).
  • ‫--pageToken TOKEN: رمز مميّز لإزاحة الصفحة عند استرداد النتائج المقسّمة إلى صفحات.

مثال:

firebase remoteconfig:experiments:list

الحصول على تفاصيل التجربة

تعرض هذه الطريقة التفاصيل الكاملة لتجربة Remote Config محدّدة.

firebase remoteconfig:experiments:get EXPERIMENT_ID

مثال:

firebase remoteconfig:experiments:get exp_promo_discount_2026

حذف تجربة

يحذف هذا الإجراء Remote Config التجربة المحدّدة.

firebase remoteconfig:experiments:delete EXPERIMENT_ID

مثال:

firebase remoteconfig:experiments:delete exp_promo_discount_2026

تعديل عمليات Remote Config الطرح

استخدِم الأوامر التالية لإدراج عمليات طرح Remote Config وفحصها وحذفها مباشرةً باستخدام واجهة سطر الأوامر:

عمليات طرح القوائم

تعرض هذه الطريقة جميع عمليات الطرح Remote Config للمشروع، مع إمكانية الفلترة والتقسيم إلى صفحات.

firebase remoteconfig:rollouts:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • ‫--filter EXPRESSION: تعبير الفلتر الذي سيتم تطبيقه على قائمة الإصدار.
  • ‫--pageSize NUMBER: عدد عمليات الطرح التي سيتم عرضها في كل صفحة (القيمة التلقائية هي 10).
  • ‫--pageToken TOKEN: رمز مميّز لإزاحة الصفحة عند استرداد النتائج المقسّمة إلى صفحات.

مثال:

firebase remoteconfig:rollouts:list

الحصول على تفاصيل الطرح

تعرض هذه الطريقة التفاصيل الكاملة لعملية Remote Config طرح محدّدة.

firebase remoteconfig:rollouts:get ROLLOUT_ID

مثال:

firebase remoteconfig:rollouts:get rollout_new_checkout_flow

حذف عملية طرح

يحذف عملية الطرح Remote Config المحدّدة.

firebase remoteconfig:rollouts:delete ROLLOUT_ID

مثال:

firebase remoteconfig:rollouts:delete rollout_new_checkout_flow

للحصول على مزيد من المعلومات العامة حول أوامر واجهة سطر الأوامر Firebase، يُرجى الاطّلاع على مرجع واجهة سطر الأوامر Firebase.