يمكنك استخدام Firebase Remote Config لتحديد المعلمات في تطبيقك وتحديث قيمها في السحابة ، مما يسمح لك بتعديل مظهر وسلوك تطبيقك دون توزيع تحديث للتطبيق.
تُستخدم مكتبة Remote Config لتخزين قيم المعلمات الافتراضية داخل التطبيق ، وجلب قيم المعلمات المحدثة من الواجهة الخلفية لـ Remote Config ، والتحكم في وقت إتاحة القيم التي تم جلبها لتطبيقك. لمعرفة المزيد ، راجع استراتيجيات تحميل Remote Config .
يرشدك هذا الدليل خلال الخطوات للبدء ويقدم بعض نماذج التعليمات البرمجية ، وكلها متاحة للنسخ أو التنزيل من مستودع جيثب firebase / quickstart-union .
الخطوة 1: أضف Remote Config إلى تطبيقك
قبل أن تتمكن من استخدام Remote Config ، تحتاج إلى:
سجل مشروع Unity الخاص بك وقم بتكوينه لاستخدام Firebase.
إذا كان مشروع Unity الخاص بك يستخدم Firebase بالفعل ، فهذا يعني أنه تم تسجيله بالفعل وتهيئته لـ Firebase.
إذا لم يكن لديك مشروع Unity ، فيمكنك تنزيل نموذج للتطبيق .
أضف Firebase Unity SDK (على وجه التحديد ،
FirebaseRemoteConfig.unitypackage
) إلى مشروع Unity الخاص بك.
لاحظ أن إضافة Firebase إلى مشروع Unity الخاص بك يتضمن مهامًا في كل من وحدة تحكم Firebase وفي مشروع Unity المفتوح (على سبيل المثال ، يمكنك تنزيل ملفات تهيئة Firebase من وحدة التحكم ، ثم نقلها إلى مشروع الوحدة الخاص بك).
الخطوة 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: قم بتوصيل تطبيقك بوحدة تحكم Firebase
في وحدة تحكم Firebase ، أضف تطبيقك إلى مشروع Firebase.
الخطوة 5: تعيين قيم المعلمات
- في وحدة تحكم Firebase ، افتح مشروعك.
- حدد Remote Config من القائمة لعرض لوحة معلومات Remote Config.
- حدد المعلمات بنفس الأسماء مثل المعلمات التي حددتها في تطبيقك. لكل معلمة ، يمكنك تعيين قيمة افتراضية (والتي ستتجاوز في النهاية القيمة الافتراضية داخل التطبيق) والقيم الشرطية. لمعرفة المزيد ، راجع معلمات وشروط التكوين عن بُعد .
الخطوة 6: جلب القيم وتنشيطها (حسب الحاجة)
لجلب قيم المعلمات من الواجهة الخلفية لـ Remote Config ، قم باستدعاء الأسلوب [ FetchAsync()
] [fetch]. يتم جلب أي قيم تقوم بتعيينها على الواجهة الخلفية وتخزينها مؤقتًا في كائن 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()
] [fetch] يتم تخزينها مؤقتًا محليًا عند اكتمال الجلب ، ولكن لا يتم إتاحتها حتى يتم استدعاء ActivateAsync()
. يمكّنك هذا من التأكد من عدم تطبيق القيم الجديدة في منتصف الحساب ، أو في أوقات أخرى قد تسبب مشاكل أو سلوكًا غريبًا.
الخطوة 7: استمع إلى التحديثات في الوقت الفعلي
بعد إحضار قيم المعلمات ، يمكنك استخدام Remote Config في الوقت الفعلي للاستماع إلى التحديثات من الواجهة الخلفية لـ Remote Config. يقوم Real-time Remote Config بإشارات إلى الأجهزة المتصلة عندما تكون التحديثات متاحة ويقوم تلقائيًا بجلب التغييرات بعد نشر إصدار Remote Config جديد.
يتم دعم التحديثات في الوقت الفعلي بواسطة Firebase Unity SDK v11.0.0 + والإصدارات الأحدث لمنصات Android و Apple.
- في تطبيقك ، أضف
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 ، فإن الأجهزة التي تقوم بتشغيل تطبيقك وتستمع إلى التغييرات ستستدعي معالج الإكمال.
الخطوات التالية
If you haven't already, explore the Remote Config use cases , and take a look at some of the key concepts and advanced strategies documentation, including: