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

يوضّح هذا المستند كيفية قراءة وتعديل مجموعة المَعلمات والشروط بتنسيق 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_القائمة" للتحكّم في عرض المعلومات الموسمية:

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

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

يصف هذا القسم الإمكانات الرئيسية لواجهة برمجة التطبيقات 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، اطّلِع على نماذج "الإعداد عن بُعد" وإصداراتها.