了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

ابدأ مع Firebase Remote Config


يمكنك استخدام Firebase Remote Config لتحديد المعلمات في تطبيقك وتحديث قيمها في السحابة ، مما يسمح لك بتعديل مظهر وسلوك تطبيقك دون توزيع تحديث للتطبيق. يرشدك هذا الدليل خلال الخطوات للبدء ويقدم بعض نماذج التعليمات البرمجية ، وكلها متاحة للاستنساخ أو التنزيل من مستودع GitHub / quickstart-android في firebase .

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

  1. أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل.

  2. بالنسبة إلى Remote Config ، يلزم Google Analytics للاستهداف المشروط لمثيلات التطبيق لخصائص المستخدم والجماهير. تأكد من تمكين Google Analytics في مشروعك.

  3. في ملف 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 ، وبذلك تكون القيم الافتراضية متاحة إذا لم يتم تعيين أي منها في الخلفية.

  1. حدد مجموعة من أسماء المعلمات وقيم المعلمات الافتراضية باستخدام كائن 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

    1. في علامة التبويب المعلمات ، افتح قائمة ، وحدد تنزيل القيم الافتراضية .

    2. عند المطالبة ، قم بتمكين .xml لنظام Android ، ثم انقر فوق تنزيل الملف .

  2. أضف هذه القيم إلى كائن 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 لإنشاء هذه القيم.

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

الخطوة 6: جلب القيم وتنشيطها

  1. لجلب قيم المعلمات من الواجهة الخلفية لـ Remote Config ، قم باستدعاء طريقة fetch() . يتم جلب أي قيم تقوم بتعيينها في الواجهة الخلفية وتخزينها في كائن Remote Config.
  2. لإتاحة قيم المعلمات التي تم جلبها لتطبيقك ، اتصل بطريقة 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 +).

  1. في تطبيقك ، استخدم 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);
        }
    });
    
  2. في المرة التالية التي تنشر فيها إصدارًا جديدًا من Remote Config ، فإن الأجهزة التي تقوم بتشغيل تطبيقك وتستمع إلى التغييرات ستستدعي ConfigUpdateListener .

خانق

إذا تم جلب التطبيق عدة مرات في فترة زمنية قصيرة ، فسيتم تقييد استدعاءات الجلب وتعيد SDK FirebaseRemoteConfigFetchThrottledException . قبل الإصدار 17.0.0 من SDK ، كان الحد الأقصى هو 5 طلبات إحضار في إطار 60 دقيقة (الإصدارات الأحدث لها حدود أكثر تساهلاً).

أثناء تطوير التطبيق ، قد ترغب في جلب وتفعيل التكوينات بشكل متكرر (عدة مرات في الساعة) للسماح لك بالتكرار بسرعة أثناء تطوير واختبار تطبيقك. تتجاوز تحديثات Real-time Remote Config تلقائيًا ذاكرة التخزين المؤقت عندما يتم تحديث التكوين على الخادم. لاستيعاب التكرار السريع في مشروع يضم ما يصل إلى 10 مطورين ، يمكنك تعيين كائن FirebaseRemoteConfigSettings مؤقتًا مع أدنى فترة إحضار منخفضة ( setMinimumFetchIntervalInSeconds ) في تطبيقك.

الحد الأدنى لفاصل الجلب الافتراضي لـ Remote Config هو 12 ساعة ، مما يعني أنه لن يتم جلب التكوينات من الواجهة الخلفية أكثر من مرة في إطار 12 ساعة ، بغض النظر عن عدد استدعاءات الجلب التي تم إجراؤها بالفعل. على وجه التحديد ، يتم تحديد الحد الأدنى لفترة الجلب بالترتيب التالي:

  1. المعلمة في fetch(long)
  2. المعلمة في FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. القيمة الافتراضية 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: