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


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

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

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

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

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

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

    • إذا كان مشروع Unity يستخدم Firebase، يكون قد تم تسجيله وإعداده لاستخدام Firebase.

    • إذا لم يكن لديك مشروع Unity، يمكنك تنزيل تطبيق نموذجي.

  • أضِف Firebase Unity SDK (FirebaseRemoteConfig.unitypackage تحديدًا) إلى مشروع Unity.

يُرجى العِلم أنّ إضافة 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

تتوافق التحديثات في الوقت الفعلي مع الإصدار 11.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) Firebase Unity على منصتَي 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 حالات الاستخدام، وإلقاء نظرة على بعض المستندات الخاصة بالمفاهيم الأساسية والاستراتيجيات المتقدّمة، بما في ذلك: