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

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

تعديل "الإعداد عن بُعد" باستخدام حزمة Firebase Admin SDK

حزمة Admin SDK هي مجموعة من مكتبات الخادم التي تتيح لك التفاعل مع Firebase من بيئات مميّزة. بالإضافة إلى إجراء تحديثات على Remote Config، تتيح Admin SDK إنشاء رموز مصادقة Firebase والتحقّق منها ، والقراءة والكتابة من Realtime Database، وما إلى ذلك. لمزيد من المعلومات عن Admin SDK المتطلبات الأساسية والإعداد، اطّلِع على مقالة إضافة حزمة Firebase 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، ضَع في اعتبارك أنّها يتم ترقيمها، وأنّ لكل إصدار مدة صلاحية محدودة من وقت إنشائه إلى وقت استبداله بتحديث: 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 ومجموعات المَعلمات آليًا. على سبيل المثال، يمكنك إضافة مَعلمة إلى مجموعة مَعلمات حالية باسم "new_menu" للتحكّم في عرض المعلومات الموسمية:

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 والقيم الشرطية آليًا. على سبيل المثال، لإضافة شرط جديد:

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

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

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

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 التي تم تنسيقها بشكلٍ غير صحيح. على سبيل المثال، إذا كان الطلب يحتوي على أكثر من عدد المفاتيح المسموح به، وهو 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);
      });
}

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 API

يوضّح هذا القسم الإمكانات الرئيسية لـ Remote Config REST API على 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 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

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

طلب 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 حدث خطأ في منح الإذن (لم يتم توفير رمز دخول مميّز أو لم تتم إضافة Firebase Remote Config REST API إلى مشروعك في 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، اطّلِع على مقالة نماذج "الإعداد عن بُعد" والترقيم.