ابدأ باستخدام Firebase Remote Config


يمكنك استخدام Firebase Remote Config لتحديد المعلمات في تطبيقك وتحديث قيمها في السحابة، مما يسمح لك بتعديل مظهر تطبيقك وسلوكه دون توزيع تحديث التطبيق. يمر هذا الدليل عبر الخطوات للبدء ويوفر بعض رمز العينة ، وكل ذلك متاح للاستنساخ أو التنزيل من مستودع Firebase/QuickStart-IOS Github.

الخطوة 1: أضف التكوين عن بُعد إلى تطبيقك

  1. إذا لم تكن قد قمت بذلك بالفعل، فأضف Firebase إلى مشروع Apple الخاص بك .

  2. بالنسبة للتكوين عن بُعد ، مطلوب Google Analytics للاستهداف الشرطي لمثيلات التطبيق لخصائص المستخدم والجماهير. تأكد من تمكين Google Analytics في مشروعك.

  3. قم بإنشاء كائن التكوين عن بُعد Singleton ، كما هو موضح في المثال التالي:

    سويفت

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

    ج موضوعية

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

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

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

الخطوة 2: تعيين قيم المعلمة الافتراضية داخل التطبيق

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

  1. حدد مجموعة من أسماء المعلمات ، وقيم المعلمة الافتراضية باستخدام كائن NSDictionary أو ملف plist .

    إذا قمت بالفعل بتكوين قيم معلمة Config Config Backend ، فيمكنك تنزيل ملف plist الذي تم إنشاؤه والذي يتضمن جميع القيم الافتراضية وحفظه في مشروع XCode الخاص بك.

    استراحة

    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. أضف هذه القيم إلى كائن التكوين عن بُعد باستخدام setDefaults: . يحدد المثال التالي القيم الافتراضية داخل التطبيق من ملف PLIST:

    سويفت

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    ج موضوعية

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

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

الآن يمكنك الحصول على قيم المعلمات من كائن التكوين عن بُعد. إذا قمت بتعيين القيم لاحقًا في الواجهة الخلفية للتكوين عن بُعد ، وجلبها ، ثم تنشطها ، تكون هذه القيم متاحة لتطبيقك. خلاف ذلك ، يمكنك الحصول على قيم المعلمة داخل التطبيق التي تم تكوينها باستخدام setDefaults: . للحصول على هذه القيم ، اتصل بـ configValueForKey: الطريقة ، وتوفير مفتاح المعلمة كوسيطة.

الخطوة 4: تعيين قيم المعلمة

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

  1. في وحدة التحكم في Firebase ، افتح مشروعك.
  2. حدد التكوين عن بُعد من القائمة لعرض لوحة معلومات التكوين عن بُعد.
  3. حدد المعلمات مع نفس الأسماء مثل المعلمات التي حددتها في تطبيقك. لكل معلمة ، يمكنك تعيين قيمة افتراضية (والتي ستجاوز القيمة الافتراضية داخل التطبيق في النهاية) ويمكنك أيضًا تعيين قيم مشروطة. لمعرفة المزيد ، راجع معلمات وشروط التكوين عن بُعد .

الخطوة 5: جلب وتفعيل القيم

لجلب قيم المعلمة من التكوين عن بُعد ، اتصل بـ fetchWithCompletionHandler: أو fetchWithExpirationDuration:completionHandler: Method. يتم إحضار أي قيم تقوم بتعيينها على الواجهة الخلفية في كائن التكوين عن بُعد.

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

هذا المثال يجلب القيم من الواجهة الخلفية للتكوين عن بُعد (وليس القيم المخبأة) والمكالمات activateWithCompletionHandler: لإتاحتها للتطبيق:

سويفت

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

ج موضوعية

[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: استمع للحصول على التحديثات في الوقت الحقيقي

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

يتم دعم التحديثات في الوقت الفعلي من قبل Firebase SDK لأبل منصات Apple V10.7.0+ وأعلى.

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

    سويفت

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

    ج موضوعية

    __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. في المرة القادمة التي تنشر فيها إصدارًا جديدًا من التكوين عن بُعد ، فإن الأجهزة التي تقوم بتشغيل تطبيقك والاستماع إلى التغييرات سوف تستدعي معالج الإكمال.

خانق

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

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

تبلغ فترة جلب الإنتاج الافتراضية والموصى بها للتكوين عن بُعد 12 ساعة ، مما يعني أنه لن يتم جلب التكوينات من الواجهة الخلفية أكثر من مرة في نافذة 12 ساعة ، بغض النظر عن عدد مكالمات الجلب التي يتم إجراؤها بالفعل. على وجه التحديد ، يتم تحديد الحد الأدنى لفاصل الجلب في هذا الترتيب التالي:

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

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

إذا لم تكن قد لم تقم بالفعل ، فاستكشف حالات استخدام التكوين عن بُعد ، وألقي نظرة على بعض المفاهيم الرئيسية والوثائق المتقدمة ، بما في ذلك: