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

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

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

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

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

توضّح الأقسام التالية من هذا الدليل العمليات التي يمكنك تنفيذها باستخدام واجهات برمجة تطبيقات الخلفية في Remote Config. لمراجعة بعض الرموز البرمجية التي تُنفِّذ هذه المهام عبر واجهة برمجة التطبيقات REST API، يمكنك الاطّلاع على أحد نماذج التطبيقات التالية:

تعديل ميزة "الإعداد عن بُعد" باستخدام حزمة تطوير البرامج (SDK) للمشرف في Firebase

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

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

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

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

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

Node.js

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

جافا

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

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

عند العمل مع نماذج 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);
      });
}

جافا

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

تعديل مَعلمات "الإعداد عن بُعد"

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

Node.js

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

جافا

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

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

تعديل شروط "الإعداد عن بُعد"

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

Node.js

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

جافا

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

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

توفّر واجهات برمجة التطبيقات لنظام التشغيل 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);
      });
}

جافا

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

تبحث عملية التحقّق هذه عن أخطاء، مثل مفاتيح مكرّرة للمَعلمات والشروط، أو أسماء شروط غير صالحة أو شروط غير متوفّرة، أو علامات etags بتنسيق غير صحيح. على سبيل المثال، سيؤدي الطلب الذي يحتوي على أكثر من العدد المسموح به من المفاتيح، أي 2000 مفتاح، إلى عرض رسالة الخطأ Param count too large.

نشر نموذج "الإعداد عن بُعد"

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

إذا لزم الأمر، يمكنك استخدام واجهة برمجة التطبيقات 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);
      });
}

جافا

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 API

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

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

تتوافق مشاريع Firebase مع حسابات الخدمة في Google، والتي يمكنك استخدامها لاستدعاء واجهات برمجة تطبيقات خادم 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 Library بلغتك المفضّلة لاسترداد رمز وصول صالح لفترة قصيرة من خلال بروتوكول 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

جافا

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، تذكَّر أنّه يتم توفُّر إصدارات منها، وأنّ لكل إصدار مدة محدودة من وقت إنشائه إلى وقت استبداله بإصدار معدَّل: 90 يومًا، بحدّ أقصى 300 إصدار مخزّن. يمكنك الاطّلاع على النماذج وإصدارات النماذج لمزيد من المعلومات.

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

يمكنك استخدام واجهات برمجة التطبيقات في الخلفية للحصول على الإصدار النشط الحالي من نموذج 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 الذي تستخدمه في الطلب التالي.

التحقّق من صحة نموذج "الإعداد عن بُعد"

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

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

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

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

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

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

استخدام علامة ETag والتعديلات الإلزامية

تستخدِم Remote Config REST API علامة عنصر (ETag) لمنع حالات السباق والتداخل في التعديلات على الموارد. لمزيد من المعلومات عن علامات ETag، اطّلِع على مقالة 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، اطّلِع على نماذج "الإعداد عن بُعد" وإصداراتها.