تعديل "التكوين البعيد" برمجياً

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

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

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

    رسم تخطيطي يوضح تفاعل الواجهة الخلفية للتكوين عن بعد مع الأدوات والخوادم المخصصة

تصف الأقسام التالية من هذا الدليل العمليات التي يمكنك إجراؤها باستخدام واجهات برمجة التطبيقات الخلفية للتكوين عن بعد. لمراجعة بعض التعليمات البرمجية التي تنفذ هذه المهام عبر REST API، راجع أحد نماذج التطبيقات هذه:

قم بتعديل التكوين عن بعد باستخدام Firebase Admin SDK

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

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

قم بتهيئة SDK وتفويض طلبات واجهة برمجة التطبيقات (API).

عند تهيئة 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);

احصل على قالب التكوين عن بعد الحالي

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

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

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

للحصول على القالب:

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

تعديل معلمات التكوين عن بعد

يمكنك تعديل وإضافة معلمات "التكوين عن بعد" ومجموعات المعلمات برمجياً. على سبيل المثال، إلى مجموعة معلمات موجودة تسمى "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.")
        );

تسمح لك واجهة برمجة التطبيقات (API) بإنشاء معلمات ومجموعات معلمات جديدة، أو تعديل القيم الافتراضية والقيم الشرطية والأوصاف. وفي جميع الأحوال يجب عليك نشر القالب بشكل صريح بعد إجراء التعديلات.

تعديل شروط التكوين عن بعد

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

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

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

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

التحقق من صحة قالب التكوين عن بعد

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

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

يتم تضمين تخصيصات وشروط التكوين عن بعد في القوالب التي تم تنزيلها، لذا من المهم أن تكون على دراية بالقيود التالية عند محاولة النشر إلى مشروع مختلف:

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

    على سبيل المثال، إذا قمت بتمكين التخصيصات في مشروعك وقمت بتنزيل قالب وتحريره، فيمكنك نشره على نفس المشروع، ولكن لا يمكنك نشره إلى مشروع مختلف إلا إذا قمت بحذف التخصيصات من القالب.

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

    على سبيل المثال، إذا كان لديك معلمة التكوين عن بعد التي تستخدم شرطًا يحدد قيمة النظام الأساسي لنظام التشغيل 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 على https://firebaseremoteconfig.googleapis.com . للحصول على التفاصيل الكاملة، راجع مرجع API .

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

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

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

لإنشاء ملف مفتاح خاص لحساب الخدمة الخاص بك:

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

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

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

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

لتعيين متغير البيئة:

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

لينكس أو ماك

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

شبابيك

مع باورشيل:

$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 .

بايثون

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 .

تعديل قالب التكوين عن بعد

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

احصل على قالب التكوين عن بعد الحالي

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

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

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

لفة

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

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

التحقق من صحة قالب التكوين عن بعد

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

قم بتحديث قالب التكوين عن بعد

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

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

يتم تضمين تخصيصات وشروط التكوين عن بعد في القوالب التي تم تنزيلها، لذا من المهم أن تكون على دراية بالقيود التالية عند محاولة النشر إلى مشروع مختلف:

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

    على سبيل المثال، إذا قمت بتمكين التخصيصات في مشروعك وقمت بتنزيل قالب وتحريره، فيمكنك نشره على نفس المشروع، ولكن لا يمكنك نشره إلى مشروع مختلف إلا إذا قمت بحذف التخصيصات من القالب.

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

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

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

لفة

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 التالي.

تعديل شروط التكوين عن بعد

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

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

رموز خطأ HTTP

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

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

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

للحصول على إرشادات حول إدارة إصدارات قالب التكوين عن بعد، راجع قوالب التكوين عن بعد وإصدارها .