بدء استخدام ميزة "الإعداد عن بُعد في 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، والتحكّم في وقت إتاحة قيم المَعلمات التي تم استرجاعها لتطبيقك.

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

الخطوة 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 للأنظمة الأساسية Apple الإصدار 10.7.0 والإصدارات الأحدث.

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