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

اختيار المنصة: iOS+ Android الويب Flutter Unity C++‎


يمكنك استخدام Firebase Remote Config لتحديد المَعلمات في تطبيقك وتعديل قيمها على السحابة الإلكترونية، ما يتيح لك تغيير مظهر تطبيقك وطريقة عمله بدون توزيع تحديث للتطبيق.

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

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

قبل أن تتمكّن من استخدام Remote Config، عليك تنفيذ ما يلي:

  • سجِّل مشروع C++ الخاص بك وأعدَّه لاستخدام Firebase.

    إذا كان مشروع C++ يستخدِم Firebase حاليًا، يكون قد تم تسجيله وإعداده لاستخدام Firebase.

  • أضِف حزمة تطوير البرامج Firebase C++ إلى مشروع C++‎.

يُرجى العِلم أنّ إضافة Firebase إلى مشروع C++ يتضمّن مهامًا في كل من وحدة تحكّم Firebase ومشروع C++ المفتوح (على سبيل المثال، يمكنك تنزيل ملفات إعداد Firebase من وحدة التحكّم، ثم نقلها إلى مشروع C++).

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

Android

بعد إضافة Firebase إلى تطبيقك، اتّبِع الخطوات التالية:

  1. أنشئ تطبيقًا على Firebase، مع تمرير بيئة JNI والنشاط:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  2. ابدأ مكتبة Remote Config كما هو موضّح:

    ::firebase::remote_config::Initialize(app);

iOS+‎

بعد إضافة Firebase إلى تطبيقك، اتّبِع الخطوات التالية:

  1. إنشاء تطبيق Firebase:

    app = ::firebase::App::Create(::firebase::AppOptions());

  2. ابدأ مكتبة Remote Config كما هو موضّح:

    ::firebase::remote_config::Initialize(app);

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

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

  1. حدِّد مجموعة من أسماء المَعلمات وقيم المَعلمات التلقائية باستخدام عنصر ConfigKeyValue* أو عنصر ConfigKeyValueVariant* بحجم المصفوفة.

    إذا سبق لك ضبط قيم Remote Config لمعلَمة الخلفية ، يمكنك تنزيل ملف يحتوي على أزواج المفتاح/القيمة هذه واستخدامه لإنشاء الكائن map. لمزيد من المعلومات، راجِع تنزيل الإعدادات التلقائية لنموذج Remote Config.

  2. أضِف هذه القيم إلى العنصر Remote Config باستخدام SetDefaults().

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

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

للحصول على هذه القيم، استدعِ أيًا من الطرق التالية التي يتم ربطها بنوع البيانات المتوقّع من تطبيقك، مع توفير مفتاح المَعلمة كمعلَمة:

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

  1. في وحدة تحكّم Firebase، انتقِل إلى عمليات تطوير البرامج والعمليات والتفاعل > Remote Config.

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

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

  1. لجلب قيم المَعلمات من الخلفية Remote Config، استخدِم طريقة Fetch(). يتم جلب أي قيم تحدّدها في الخلفية وتخزينها مؤقتًا في الكائن Remote Config.
  2. لإتاحة قيم المَعلمات التي تم جلبها لتطبيقك، استدعِ الدالة ActivateFetched()

الخطوة 7: الاستماع إلى التعديلات في الوقت الفعلي

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

تتوافق التعديلات في الوقت الفعلي مع الإصدار Firebase C++ 11.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) على منصتَي Android وApple.

  1. في تطبيقك، استدعِ الدالة AddOnConfigUpdateListener لبدء الاستماع إلى التعديلات واسترجاع أي قيم جديدة أو معدَّلة للمَعلمات تلقائيًا. يستمع المثال التالي إلى التعديلات، وعند استدعاء Activate، يستخدم القيم التي تم جلبها حديثًا لعرض رسالة ترحيب معدَّلة.
remote_config->AddOnConfigUpdateListener(
    [](firebase::remote_config::ConfigUpdate&& config_update,
       firebase::remote_config::RemoteConfigError remote_config_error) {
      if (remote_config_error != firebase::remote_config::kRemoteConfigErrorNone) {
        printf("Error listening for config updates: %d", remote_config_error);
      }
      // Search the `updated_keys` set for the key "welcome_message."
      // `updated_keys` represents the keys that have changed since the last
      // fetch.
      if (std::find(config_update.updated_keys.begin(),
                    config_update.updated_keys.end(),
                    "welcome_message") != config_update.updated_keys.end()) {
        remote_config->Activate().OnCompletion(
            [&](const firebase::Future& completed_future,
               void* user_data) {
              // The key "welcome_message" was found within `updated_keys` and
              // can be activated.
              if (completed_future.error() == 0) {
                DisplayWelcomeMessage();
              } else {
                printf("Error activating config: %d", completed_future.error());
              }
            },
            nullptr);
      }
    });

في المرة التالية التي تنشر فيها إصدارًا جديدًا من Remote Config، ستطلب الأجهزة التي تشغّل تطبيقك وتنتظر التغييرات من أداة معالجة تحديث الإعدادات تنفيذ عملية الاستماع.