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

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

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

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

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

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

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

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

خلال عملية "الإعداد عن بُعد" المعتادة، قد يظهر لك النموذج الحالي بعض المعلمات أو مجموعات المعلمات والشروط، والتحقق من القالب، ثم نشره. وقبل إجراء طلبات البيانات من واجهة برمجة التطبيقات هذه، يجب الموافقة على الطلبات من حزمة SDK.

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

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

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

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

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

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"، يجب تفعيل "إحصاءات Google" في الهدف مشروعك.

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

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

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

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

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

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

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

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

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

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

لضبط متغيّر البيئة:

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

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 لاسترداد رمز الدخول إلى OAuth 2.0 قصير الأجل:

عقدة.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();
}

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

لمنح الإذن بالوصول إلى ميزة "الإعداد عن بُعد"، يجب طلب النطاق. https://www.googleapis.com/auth/firebase.remoteconfig

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يمكنك تعديل شروط "الإعداد عن بُعد" والأحكام الشرطية آليًا القيم. باستخدام واجهة برمجة تطبيقات REST، يجب تعديل النموذج مباشرةً لتعديله. الشروط قبل نشر النموذج.

{
  "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 حدث خطأ في التفويض (لم يتم تقديم رمز دخول أو لم تتم إضافة واجهة برمجة تطبيقات REST API في Firebase بعد إلى مشروعك في Cloud Developer Console)
403 حدث خطأ في المصادقة (تم تقديم رمز دخول غير صحيح)
500 حدث خطأ داخلي. في حالة حدوث هذا الخطأ، إرسال طلب دعم من Firebase

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

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

استخدام ETag وفرض التعديلات

تستخدم واجهة برمجة التطبيقات REST API علامة الكيان (ETag) لمنع حالات السباق. وتحديثات متداخلة للموارد. لمزيد من المعلومات حول علامات ETag، راجع ETag - HTTP:

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

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

للحصول على إرشادات حول إدارة إصدارات نماذج "الإعداد عن بُعد"، يُرجى الاطّلاع على نماذج "الإعداد عن بُعد" والإصدارات المختلفة