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


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

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

يرشدك هذا الدليل الخطوات التي يجب اتّباعها للبدء وتوفر بعض التعليمات البرمجية النموذجية، للاستنساخ أو التنزيل من firebase/quickstart-unity في GitHub.

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

قبل أن تتمكّن من استخدام Remote Config, عليك إجراء ما يلي:

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

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

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

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

(ستكون الخصائص التي ليست سلسلة يتم تحويلها إلى نوع الموقع عند استدعاء الدالة SetDefaultsAsync()).

System.Collections.Generic.Dictionary<string, object> defaults =
  new System.Collections.Generic.Dictionary<string, object>();

// These are the values that are used if we haven't fetched data from the
// server
// yet, or if we ask for values that the server doesn't have:
defaults.Add("config_test_string", "default local string");
defaults.Add("config_test_int", 1);
defaults.Add("config_test_float", 1.0);
defaults.Add("config_test_bool", false);

Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults)
  .ContinueWithOnMainThread(task => {

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

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

للحصول على هذه القيم، استخدِم GetValue(). وتوفير مفتاح المعلمة كوسيطة. ينتج عن ذلك ConfigValue, التي تضم خصائص لتحويل القيمة إلى أنواع أساسية مختلفة.

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

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

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

لاسترجاع قيم المعلَمات من الواجهة الخلفية Remote Config، يمكنك طلب FetchAsync() . يتم استرجاع أي قيم قمت بتعيينها في الخلفية تم تخزينها مؤقتًا في الكائن Remote Config.

// Start a fetch request.
// FetchAsync only fetches new data if the current data is older than the provided
// timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
// By default the timespan is 12 hours, and for production apps, this is a good
// number. For this example though, it's set to a timespan of zero, so that
// changes in the console will always show up immediately.
public Task FetchDataAsync() {
  DebugLog("Fetching data...");
  System.Threading.Tasks.Task fetchTask =
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync(
      TimeSpan.Zero);
  return fetchTask.ContinueWithOnMainThread(FetchComplete);
}

في الرمز أعلاه، FetchComplete هي طريقة يتطابق توقيعها مع مَعلمات إحدى الأحمال الزائدة من ContinueWithOnMainThread().

في نموذج الرمز أدناه، تجتاز الطريقة FetchComplete المهمة السابقة. (fetchTask)، ما يسمح لـ FetchComplete بتحديد ما إذا كان قد تم إنهاؤه. يستخدم الكود Info.LastFetchStatus ثم تحديد ما إذا كانت النهاية ناجحة أيضًا. إذا كان الأمر كذلك، يتم بعد ذلك تفعيل قيم مَعلمات Remote Config باستخدام ActivateAsync().

private void FetchComplete(Task fetchTask) {
  if (!fetchTask.IsCompleted) {
    Debug.LogError("Retrieval hasn't finished.");
    return;
  }

  var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
  var info = remoteConfig.Info;
  if(info.LastFetchStatus != LastFetchStatus.Success) {
    Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
    return;
  }

  // Fetch successful. Parameter values must be activated to use.
  remoteConfig.ActivateAsync()
    .ContinueWithOnMainThread(
      task => {
        Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
    });
}

القيم التي تم استرجاعها باستخدام FetchAsync() يتم تخزينها مؤقتًا محليًا عند اكتمال الجلب، ولكن لا تتم إتاحتها حتى ActivateAsync() تم استدعاء. يتيح لك ذلك التأكّد من عدم تطبيق القيم الجديدة. متوسطة العمليات الحسابية، أو في أوقات أخرى قد تتسبب في حدوث مشاكل أو السلوك.

الخطوة 6: الاستماع إلى أحدث المعلومات في الوقت الفعلي

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

تتوفّر التحديثات في الوقت الفعلي من خلال حزمة تطوير البرامج (SDK) "Firebase" من Unity الإصدار 11.0.0 والإصدارات الأحدث من أنظمة Android وApple الأساسية.

  1. أضِف OnConfigUpdateListener في تطبيقك لبدء الاستماع إلى آخر الأخبار. وجلب أي قيم معلمات جديدة أو محدَّثة تلقائيًا. بعد ذلك، قم بإنشاء ConfigUpdateListenerEventHandler لمعالجة أحداث التعديل. ما يلي: يصغي المثال إلى التحديثات ويستخدم القيم التي تم استرجاعها حديثًا لعرضها. رسالة ترحيب محدثة.
// Invoke the listener.
void Start()
{
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
    += ConfigUpdateListenerEventHandler;
}

// Handle real-time Remote Config events.
void ConfigUpdateListenerEventHandler(
   object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) {
  if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) {
    Debug.Log(String.Format("Error occurred while listening: {0}", args.Error));
    return;
  }

  Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
  // Activate all fetched values and then display a welcome message.
  remoteConfig.ActivateAsync().ContinueWithOnMainThread(
    task => {
        DisplayWelcomeMessage();
    });
}

// Stop the listener.
void OnDestroy() {
    Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
      -= ConfigUpdateListenerEventHandler;
}

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

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

استكشِف Remote Config، إذا لم يسبق لك إجراء ذلك. حالات الاستخدام، وإلقاء نظرة على بعض وثائق المفاهيم الرئيسية والاستراتيجيات المتقدمة، بما في ذلك: