بدء استخدام ميزة "الإعداد عن بُعد في Firebase"


يمكنك استخدام Firebase Remote Config لتحديد المَعلمات في تطبيقك وتعديل قيمها في السحابة الإلكترونية، ما يتيح لك تعديل مظهر تطبيقك وسلوكه بدون توزيع تحديث له. يرشدك هذا الدليل إلى خطوات البدء ويقدّم بعض النماذج البرمجية، ويمكن تكرار كل هذه النماذج أو تنزيلها من مستودع GitHub الخاص بتطبيق firebase/quickstart-ios.

الخطوة 1: إضافة Remote Config إلى تطبيقك

  1. أضِف Firebase إلى مشروع Apple الخاص بك، في حال لم يسبق لك إجراء ذلك.

  2. بالنسبة إلى Remote Config، يجب استخدام Google Analytics من أجل الاستهداف المشروط لنسخ التطبيق الافتراضية لخصائص المستخدِمين وشرائح الجمهور. تأكَّد من تفعيل Google Analytics في مشروعك.

  3. أنشئ عنصر Remote Config الفردي، كما هو موضّح في المثال التالي:

    Swift

    remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 0
    remoteConfig.configSettings = settings

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
    remoteConfigSettings.minimumFetchInterval = 0;
    self.remoteConfig.configSettings = remoteConfigSettings;

يُستخدَم هذا العنصر لتخزين قيم المَعلمات التلقائية داخل التطبيق، واسترداد قيم المَعلمات المعدَّلة من الخلفية في Remote Config، والتحكّم في وقت إتاحة قيم المَعلمات التي تم استرجاعها لتطبيقك.

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

الخطوة 2: ضبط قيم المَعلمات التلقائية داخل التطبيق

يمكنك ضبط قيم المَعلمات التلقائية داخل التطبيق في Remote Config العنصر، لكي يعمل تطبيقك على النحو المطلوب قبل الاتصال بخلفية Remote Config، ولكي تتوفّر القيم التلقائية في حال عدم تحديد أي قيم في الخلفية.

  1. حدِّد مجموعة من أسماء المَعلمات وقيمها التلقائية باستخدام ملف ملف NSDictionary أو ملف plist.

    إذا سبق لك ضبط قيم مَعلمات Remote Config في الخلفية، يمكنك تنزيل ملف plist تم إنشاؤه يتضمّن جميع القيم التلقائية وحفظه في مشروع Xcode.

    REST

    curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
    

    وحدة تحكّم Firebase

    1. في علامة التبويب المَعلمات، افتح القائمة، ثم انقر على تنزيل القيم التلقائية.

    2. فعِّل ملف plist.لنظام التشغيل iOS عندما يُطلب منك ذلك، ثم انقر على تنزيل الملف.

  2. أضِف هذه القيم إلى عنصر Remote Config باستخدام setDefaults:. يحدّد المثال التالي القيم التلقائية داخل التطبيق من ملف plist:

    Swift

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

الخطوة 3: الحصول على قيم المَعلمات لاستخدامها في تطبيقك

يمكنك الآن الحصول على قيم المَعلمات من عنصر Remote Config. إذا أعددت في وقت لاحق قيمًا في الخلفية في Remote Config، واسترجعتها، ثم فعّلتها، ستكون هذه القيم متاحة لتطبيقك. بخلاف ذلك، ستحصل على قيم المَعلمات داخل التطبيق التي تم ضبطها باستخدام setDefaults:. للحصول على هذه القيم، يمكنك استدعاء الأسلوب configValueForKey: ، مع تقديم مفتاح المَعلمة كوسيطة.

الخطوة 4: ضبط قيم المَعلمات

باستخدام وحدة تحكّم Firebase أو واجهات برمجة تطبيقات الخلفية فيRemote Config، يمكنك إنشاء قيم تلقائية جديدة للخلفية تلغي القيم داخل التطبيق وفقًا للّا منطق الشَرطي أو استهداف المستخدِم المطلوب. يرشدك هذا القسم إلى خطوات وحدة تحكّم Firebase لإنشاء هذه القيم.

  1. في وحدة تحكّم Firebase، افتح مشروعك.
  2. انقر على Remote Config من القائمة لعرض Remote Config لوحة البيانات.
  3. حدِّد المَعلمات بالأسماء نفسها التي حدّدتها في تطبيقك. يمكنك ضبط قيمة تلقائية لكل مَعلمة (ستلغي هذه القيمة في النهاية القيمة التلقائية داخل التطبيق)، ويمكنك أيضًا ضبط قيم مشروطة. لمزيد من المعلومات، اطّلِع على Remote Config المَعلمات والشروط.

الخطوة 5: استرجاع القيم وتفعيلها

لجلب قيم المَعلمات من Remote Config، استخدِم الأسلوب fetchWithCompletionHandler: أو fetchWithExpirationDuration:completionHandler:. يتم جلب أي قيم تحدّدها في الخلفية ونقلها إلى ذاكرة التخزين المؤقت في عنصر Remote Config.

في الحالات التي تريد فيها استرجاع القيم وتفعيلها في طلب واحد، استخدِم fetchAndActivateWithCompletionHandler:.

يُستخدَم هذا المثال لاسترداد القيم من الخلفية في Remote Config (وليس القيم المخزّنة مؤقتًا) ويُطلِبactivateWithCompletionHandler: لإتاحتها للتطبيق:

Swift

remoteConfig.fetch { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate { changed, error in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.displayWelcome()
}

Objective-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        if (error != nil) {
          NSLog(@"Activate error: %@", error.localizedDescription);
        } else {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self displayWelcome];
          });
        }
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
}];

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

الخطوة 6: الاستماع إلى آخر الأخبار في الوقت الفعلي

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

تتيح حزمة تطوير البرامج (SDK) لنظام التشغيل Firebase الإصدار 10.7.0 والإصدارات الأحدث على منصات Apple إمكانية الحصول على آخر المعلومات في الوقت الفعلي.

  1. في تطبيقك، اتصل بالرقم addOnConfigUpdateListener لبدء الاستماع إلى آخر الأخبار واسترجاع أي قيم جديدة أو معدَّلة للمَعلمات تلقائيًا. يستمع المثال التالي للإشعارات وعند activateWithCompletionHandler يتم استدعاؤه، يستخدم القيم التي تم جلبها حديثًا لعرض رسالة ترحيب معدَّلة.

    Swift

    remoteConfig.addOnConfigUpdateListener { configUpdate, error in
      guard let configUpdate, error == nil else {
        print("Error listening for config updates: \(error)")
      }
    
      print("Updated keys: \(configUpdate.updatedKeys)")
    
      self.remoteConfig.activate { changed, error in
        guard error == nil else { return self.displayError(error) }
        DispatchQueue.main.async {
          self.displayWelcome()
        }
      }
    }

    Objective-C

    __weak __typeof__(self) weakSelf = self;
    [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error listening for config updates %@", error.localizedDescription);
      } else {
        NSLog(@"Updated keys: %@", configUpdate.updatedKeys);
    
        __typeof__(self) strongSelf = weakSelf;
        [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Activate error %@", error.localizedDescription);
          }
    
          dispatch_async(dispatch_get_main_queue(), ^{
            [strongSelf displayWelcome];
          });
        }];
      }
    }];
  2. في المرة التالية التي تنشر فيها إصدارًا جديدًا من Remote Config، ستستدعي الأجهزة التي تعمل على تطبيقك وتستمع إلى التغييرات معالج اكتمال التحميل.

التقييد

إذا كان التطبيق يُجري عمليات جلب كثيرة جدًا في فترة زمنية قصيرة، يتم الحد من عمليات الجلب وتُعرِض حزمة SDK الرمز FIRRemoteConfigFetchStatusThrottled. قبل الإصدار 6.3.0 من حزمة SDK، كان الحدّ الأقصى هو 5 طلبات استرجاع في مهلة تبلغ 60 دقيقة (تتضمّن الإصدارات الأحدث حدودًا أكثر تساهلاً).

أثناء تطوير التطبيق، قد تحتاج إلى جلب البيانات بشكلٍ متكرّر لإعادة تحميل ملف التخزين المؤقت بصورة متكرّرة جدًا (عدة مرات في الساعة) للسماح لك بإجراء تكرارات سريعة أثناء تطوير واختبار تطبيقك. وتعمل تعديلات "الإعداد عن بُعد في الوقت الفعلي" على تخطّي ملف التخزين المؤقت تلقائيًا عند تعديل الإعدادات على الخادم. لاستيعاب التكرار السريع في مشروع يتضمّن العديد من المطوّرين، يمكنك إضافة موقع FIRRemoteConfigSettings مؤقتًا بحد أدنى من الفاصل الزمني لعمليات الجلب العميق (MinimumFetchInterval) منخفض في تطبيقك.

الفاصل الزمني التلقائي والمُقترَح لميزة الجلب في قناة الإصدار العلني لRemote Config هو 12 ساعة، ما يعني أنّه لن يتم جلب الإعدادات من الخلفية أكثر من مرة في مهلة 12 ساعة، بغض النظر عن عدد طلبات الجلب التي يتم إجراؤها فعليًا. وعلى وجه التحديد، يتم تحديد الحد الأدنى لفاصل الجلب بالترتيب التالي:

  1. المَعلمة في fetch(long)
  2. المَعلمة في FIRRemoteConfigSettings.MinimumFetchInterval
  3. القيمة التلقائية هي 12 ساعة

الخطوات التالية

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