يمكنك استخدام Firebase Remote Config لتحديد المعلمات في تطبيقك وتحديث قيمها في السحابة ، مما يسمح لك بتعديل مظهر وسلوك تطبيقك دون توزيع تحديث للتطبيق. يرشدك هذا الدليل خلال الخطوات للبدء ويقدم بعض نماذج التعليمات البرمجية ، وكلها متاحة للاستنساخ أو التنزيل من مستودع GitHub / quickstart-android في firebase .
الخطوة 1: أضف Firebase و Remote Config SDK إلى تطبيقك
أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.
بالنسبة إلى Remote Config ، يلزم Google Analytics للاستهداف المشروط لمثيلات التطبيق لخصائص المستخدم والجماهير. تأكد من تمكين Google Analytics في مشروعك.
في ملف Gradle (على مستوى التطبيق) الوحدة النمطية الخاصة بك (عادةً ما يكون
<project>/<app-module>/build.gradle
) ، أضف التبعية لمكتبة Remote Config Android. نوصي باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.أيضًا ، كجزء من إعداد Analytics ، تحتاج إلى إضافة Firebase SDK لـ Google Analytics إلى تطبيقك.
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' }
باستخدام Firebase Android BoM ، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.
(بديل) أضف تبعيات مكتبة Firebase بدون استخدام BoM
إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.
لاحظ أنه إذا كنت تستخدم مكتبات Firebase متعددة في تطبيقك ، فإننا نوصي بشدة باستخدام BoM لإدارة إصدارات المكتبة ، مما يضمن توافق جميع الإصدارات.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config-ktx:21.4.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // Add the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-analytics' }
باستخدام Firebase Android BoM ، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase Android.
(بديل) أضف تبعيات مكتبة Firebase بدون استخدام BoM
إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.
لاحظ أنه إذا كنت تستخدم مكتبات Firebase متعددة في تطبيقك ، فإننا نوصي بشدة باستخدام BoM لإدارة إصدارات المكتبة ، مما يضمن توافق جميع الإصدارات.
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-config:21.4.0' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
الخطوة 2: احصل على الكائن الفردي عن بُعد
احصل على مثيل كائن Remote Config وقم بتعيين الحد الأدنى لفاصل الجلب للسماح بالتحديثات المتكررة:
Kotlin+KTX
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
يتم استخدام الكائن المفرد لتخزين قيم المعلمات الافتراضية داخل التطبيق ، وجلب قيم المعلمات المحدثة من الواجهة الخلفية ، والتحكم في وقت إتاحة القيم التي تم جلبها لتطبيقك.
أثناء التطوير ، يوصى بتعيين حد أدنى منخفض نسبيًا لفترة الجلب. انظر Throttling لمزيد من المعلومات.
الخطوة 3: تعيين قيم المعلمات الافتراضية داخل التطبيق
يمكنك تعيين قيم المعلمات الافتراضية داخل التطبيق في كائن Remote Config ، بحيث يتصرف تطبيقك على النحو المنشود قبل أن يتصل بالواجهة الخلفية لـ Remote Config ، وبذلك تكون القيم الافتراضية متاحة إذا لم يتم تعيين أي منها في الخلفية.
حدد مجموعة من أسماء المعلمات وقيم المعلمات الافتراضية باستخدام كائن Map أو ملف مورد XML المخزن في مجلد
res/xml
لتطبيقك. يستخدم نموذج التطبيق Remote Config quickstart ملف XML لتحديد أسماء وقيم المعلمات الافتراضية.إذا كنت قد قمت بالفعل بتكوين قيم معلمات الواجهة الخلفية لـ Remote Config ، فيمكنك تنزيل ملف XML مُنشأ يتضمن جميع القيم الافتراضية وحفظه في دليل
res/xml
الخاص بتطبيقك:استراحة
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
وحدة تحكم Firebase
في علامة التبويب المعلمات ، افتح قائمة ، وحدد تنزيل القيم الافتراضية .
عند المطالبة ، قم بتمكين .xml لنظام Android ، ثم انقر فوق تنزيل الملف .
أضف هذه القيم إلى كائن Remote Config باستخدام
setDefaultsAsync(int)
، كما هو موضح:Kotlin+KTX
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
الخطوة 4: احصل على قيم المعلمات لاستخدامها في تطبيقك
يمكنك الآن الحصول على قيم المعلمات من كائن Remote Config. إذا قمت بتعيين القيم في الواجهة الخلفية ، وجلبها ، ثم قم بتنشيطها ، فستتوفر هذه القيم لتطبيقك. خلاف ذلك ، يمكنك الحصول على قيم المعلمات داخل التطبيق التي تم تكوينها باستخدام setDefaultsAsync(int)
. للحصول على هذه القيم ، اتصل بالطريقة المدرجة أدناه التي تعين نوع البيانات الذي يتوقعه تطبيقك ، مع توفير مفتاح المعلمة كوسيطة:
الخطوة 5: تعيين قيم المعلمات في الواجهة الخلفية لـ Remote Config
باستخدام وحدة تحكم Firebase أو واجهات برمجة التطبيقات الخلفية للتكوين عن بُعد ، يمكنك إنشاء قيم افتراضية جديدة من جانب الخادم تتجاوز القيم داخل التطبيق وفقًا للمنطق الشرطي المطلوب أو استهداف المستخدم. يصف هذا القسم خطوات وحدة التحكم في Firebase لإنشاء هذه القيم.
- في وحدة تحكم Firebase ، افتح مشروعك.
- حدد Remote Config من القائمة لعرض لوحة معلومات Remote Config.
- حدد المعلمات بنفس الأسماء مثل المعلمات التي حددتها في تطبيقك. لكل معلمة ، يمكنك تعيين قيمة افتراضية (والتي ستتجاوز في النهاية القيمة الافتراضية داخل التطبيق المقابلة) ، ويمكنك أيضًا تعيين القيم الشرطية. لمعرفة المزيد ، راجع معلمات وشروط التكوين عن بُعد .
الخطوة 6: جلب القيم وتنشيطها
- لجلب قيم المعلمات من الواجهة الخلفية لـ Remote Config ، قم باستدعاء طريقة
fetch()
. يتم جلب أي قيم تقوم بتعيينها في الواجهة الخلفية وتخزينها في كائن Remote Config. لإتاحة قيم المعلمات التي تم جلبها لتطبيقك ، اتصل بطريقة
activate()
.في الحالات التي تريد فيها جلب القيم وتنشيطها في مكالمة واحدة ، يمكنك استخدام طلب
fetchAndActivate()
لجلب القيم من الواجهة الخلفية لـ Remote Config وجعلها متاحة للتطبيق:Kotlin+KTX
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText( this, "Fetch and activate succeeded", Toast.LENGTH_SHORT, ).show() } else { Toast.makeText( this, "Fetch failed", Toast.LENGTH_SHORT, ).show() } displayWelcomeMessage() }
Java
mFirebaseRemoteConfig.fetchAndActivate() .addOnCompleteListener(this, new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { if (task.isSuccessful()) { boolean updated = task.getResult(); Log.d(TAG, "Config params updated: " + updated); Toast.makeText(MainActivity.this, "Fetch and activate succeeded", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Fetch failed", Toast.LENGTH_SHORT).show(); } displayWelcomeMessage(); } });
نظرًا لأن قيم المعلمات المحدثة هذه تؤثر في سلوك ومظهر تطبيقك ، يجب عليك تنشيط القيم التي تم جلبها في وقت يضمن تجربة سلسة للمستخدم ، مثل المرة التالية التي يفتح فيها المستخدم تطبيقك. راجع استراتيجيات تحميل Remote Config للحصول على مزيد من المعلومات والأمثلة.
الخطوة 7: استمع إلى التحديثات في الوقت الفعلي
بعد إحضار قيم المعلمات ، يمكنك استخدام Remote Config في الوقت الفعلي للاستماع إلى التحديثات من الواجهة الخلفية لـ Remote Config. يقوم Real-time Remote Config بإشارات إلى الأجهزة المتصلة عندما تكون التحديثات متاحة ويقوم تلقائيًا بجلب التغييرات بعد نشر إصدار Remote Config جديد.
يتم دعم التحديثات في الوقت الفعلي بواسطة Firebase SDK لنظام Android v21.3.0 + (Firebase BoM v31.2.4 +).
في تطبيقك ، استخدم
addOnConfigUpdateListener()
لبدء الاستماع إلى التحديثات وجلب أي قيم معلمات جديدة تلقائيًا. قم بتنفيذ رد الاتصالonUpdate()
لتنشيط التكوين المحدث.Kotlin+KTX
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate : ConfigUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.updatedKeys); if (configUpdate.updatedKeys.contains("welcome_message")) { remoteConfig.activate().addOnCompleteListener { displayWelcomeMessage() } } } override fun onError(error : FirebaseRemoteConfigException) { Log.w(TAG, "Config update error with code: " + error.code, error) } })
Java
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { @Override public void onUpdate(ConfigUpdate configUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.getUpdatedKeys()); mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener
() { @Override public void onComplete(@NonNull Task task) { displayWelcomeMessage(); } }); } @Override public void onError(FirebaseRemoteConfigException error) { Log.w(TAG, "Config update error with code: " + error.getCode(), error); } }); في المرة التالية التي تنشر فيها إصدارًا جديدًا من Remote Config ، فإن الأجهزة التي تقوم بتشغيل تطبيقك وتستمع إلى التغييرات ستستدعي
ConfigUpdateListener
.
خانق
إذا تم جلب التطبيق عدة مرات في فترة زمنية قصيرة ، فسيتم تقييد استدعاءات الجلب وتعيد SDK FirebaseRemoteConfigFetchThrottledException
. قبل الإصدار 17.0.0 من SDK ، كان الحد الأقصى هو 5 طلبات إحضار في إطار 60 دقيقة (الإصدارات الأحدث لها حدود أكثر تساهلاً).
أثناء تطوير التطبيق ، قد ترغب في جلب وتفعيل التكوينات بشكل متكرر (عدة مرات في الساعة) للسماح لك بالتكرار بسرعة أثناء تطوير واختبار تطبيقك. تتجاوز تحديثات Real-time Remote Config تلقائيًا ذاكرة التخزين المؤقت عندما يتم تحديث التكوين على الخادم. لاستيعاب التكرار السريع في مشروع يضم ما يصل إلى 10 مطورين ، يمكنك تعيين كائن FirebaseRemoteConfigSettings
مؤقتًا مع أدنى فترة إحضار منخفضة ( setMinimumFetchIntervalInSeconds
) في تطبيقك.
الحد الأدنى لفاصل الجلب الافتراضي لـ Remote Config هو 12 ساعة ، مما يعني أنه لن يتم جلب التكوينات من الواجهة الخلفية أكثر من مرة في إطار 12 ساعة ، بغض النظر عن عدد استدعاءات الجلب التي تم إجراؤها بالفعل. على وجه التحديد ، يتم تحديد الحد الأدنى لفترة الجلب بالترتيب التالي:
- المعلمة في
fetch(long)
- المعلمة في
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- القيمة الافتراضية 12 ساعة
لتعيين الحد الأدنى لفترة الجلب إلى قيمة مخصصة ، استخدم FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
.
الخطوات التالية
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: