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


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

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

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

الخطوة 1: أضف 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، فيمكنك تنزيل ملف يحتوي على أزواج المفاتيح/القيم هذه واستخدامها لإنشاء قاموس السلسلة الخاص بك. لمزيد من المعلومات، راجع تنزيل الإعدادات الافتراضية لقالب التكوين عن بُعد .

(سيتم تحويل الخصائص غير النصية إلى نوع الخاصية عند استدعاء 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: احصل على قيم المعلمات لاستخدامها في تطبيقك

يمكنك الآن الحصول على قيم المعلمات من كائن التكوين عن بعد. إذا قمت بتعيين قيم في الواجهة الخلفية للتكوين عن بعد، وجلبتها، ثم قمت بتنشيطها، فستكون هذه القيم متاحة لتطبيقك. وإلا، فستحصل على قيم المعلمات داخل التطبيق التي تم تكوينها باستخدام SetDefaultsAsync() .

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

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

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

الخطوة 5: جلب القيم وتنشيطها (حسب الحاجة)

لجلب قيم المعلمات من الواجهة الخلفية للتكوين عن بعد، قم باستدعاء الأسلوب 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، مما يسمح لـ FetchComplete بتحديد ما إذا كان قد انتهى أم لا. يستخدم الرمز Info.LastFetchStatus لتحديد ما إذا كانت عملية الإنهاء ناجحة أيضًا . إذا كان الأمر كذلك، فسيتم بعد ذلك تنشيط قيم معلمات التكوين عن بعد باستخدام 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+ من Firebase Unity SDK والإصدارات الأحدث لمنصات 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، ستستدعي الأجهزة التي تقوم بتشغيل تطبيقك وتستمع إلى التغييرات معالج الإكمال.

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

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