Firebase रिमोट कॉन्फ़िगरेशन का इस्तेमाल शुरू करना


Firebase Remote Config का इस्तेमाल करके, अपने ऐप्लिकेशन में पैरामीटर तय किए जा सकते हैं और क्लाउड में उनकी वैल्यू अपडेट की जा सकती हैं. इससे, ऐप्लिकेशन का अपडेट डिस्ट्रिब्यूट किए बिना, उसके लुक और काम करने के तरीके में बदलाव किया जा सकता है. इस गाइड में, शुरू करने का तरीका बताया गया है. साथ ही, कुछ सैंपल कोड भी दिए गए हैं. इन सभी को firebase/quickstart-android GitHub रिपॉज़िटरी से क्लोन या डाउनलोड किया जा सकता है.

पहला चरण: अपने ऐप्लिकेशन में Firebase और रिमोट कॉन्फ़िगरेशन SDK टूल जोड़ना

  1. अगर आपने पहले से ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें.

  2. Remote Config के लिए, उपयोगकर्ता प्रॉपर्टी और ऑडियंस के लिए, ऐप्लिकेशन इंस्टेंस की शर्तों के हिसाब से टारगेटिंग करने के लिए Google Analytics की ज़रूरत होती है. पक्का करें कि आपने अपने प्रोजेक्ट में Google Analytics चालू किया हो.

  3. अपनी मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle) में, Android के लिए Remote Config लाइब्रेरी की डिपेंडेंसी जोड़ें. हमारा सुझाव है कि लाइब्रेरी के वर्शन को कंट्रोल करने के लिए, Firebase Android BoM का इस्तेमाल करें.

    इसके अलावा, Analytics सेट अप करने के दौरान, आपको अपने ऐप्लिकेशन में Google Analytics के लिए Firebase SDK टूल जोड़ना होगा.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.6.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 लाइब्रेरी के काम करने वाले वर्शन का इस्तेमाल करेगा.

    (विकल्प)  BoM का इस्तेमाल किए बिना Firebase लाइब्रेरी की डिपेंडेंसी जोड़ें

    अगर 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:22.0.1")
        implementation("com.google.firebase:firebase-analytics:22.1.2")
    }
    क्या आपको Kotlin के लिए कोई लाइब्रेरी मॉड्यूल चाहिए? अक्टूबर 2023 (Firebase BoM 32.5.0) से, Kotlin और Java डेवलपर, दोनों मुख्य लाइब्रेरी मॉड्यूल पर काम कर सकते हैं. ज़्यादा जानकारी के लिए, इस पहल के बारे में अक्सर पूछे जाने वाले सवाल देखें.

दूसरा चरण: Remote Config सिंगलटन ऑब्जेक्ट पाना

एक 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);

सिंगलटन ऑब्जेक्ट का इस्तेमाल, इन-ऐप्लिकेशन डिफ़ॉल्ट पैरामीटर वैल्यू को सेव करने, बैकएंड से अपडेट की गई पैरामीटर वैल्यू को फ़ेच करने, और फ़ेच की गई वैल्यू को आपके ऐप्लिकेशन के लिए उपलब्ध कराने के समय को कंट्रोल करने के लिए किया जाता है.

डेवलपमेंट के दौरान, हमारा सुझाव है कि फ़ेच करने के लिए कम से कम इंटरवल सेट करें. ज़्यादा जानकारी के लिए, थ्रॉटलिंग देखें.

तीसरा चरण: ऐप्लिकेशन में डिफ़ॉल्ट पैरामीटर वैल्यू सेट करना

Remote Config ऑब्जेक्ट में, इन-ऐप्लिकेशन डिफ़ॉल्ट पैरामीटर वैल्यू सेट की जा सकती हैं, ताकि आपका ऐप्लिकेशन Remote Config बैकएंड से कनेक्ट होने से पहले, सही तरीके से काम करे. साथ ही, बैकएंड में कोई वैल्यू सेट न होने पर, डिफ़ॉल्ट वैल्यू उपलब्ध हों.

  1. पैरामीटर के नाम और डिफ़ॉल्ट पैरामीटर वैल्यू का एक सेट तय करें. इसके लिए, अपने ऐप्लिकेशन के res/xml फ़ोल्डर में सेव किए गए Maps ऑब्जेक्ट या एक्सएमएल रिसॉर्स फ़ाइल का इस्तेमाल करें. Remote Config क्विकस्टार्ट के लिए बने सैंपल ऐप्लिकेशन में, डिफ़ॉल्ट पैरामीटर के नाम और वैल्यू तय करने के लिए, एक्सएमएल फ़ाइल का इस्तेमाल किया जाता है.

    अगर आपने Remote Config बैकएंड पैरामीटर की वैल्यू पहले से कॉन्फ़िगर कर ली हैं, तो जनरेट की गई एक्सएमएल फ़ाइल डाउनलोड की जा सकती है. इसमें सभी डिफ़ॉल्ट वैल्यू शामिल होती हैं. साथ ही, इसे अपने ऐप्लिकेशन की res/xml डायरेक्ट्री में सेव किया जा सकता है:

    REST

    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. जब कहा जाए, तब Android के लिए .xml चालू करें. इसके बाद, फ़ाइल डाउनलोड करें पर क्लिक करें.

  2. इन वैल्यू को Remote Config ऑब्जेक्ट में जोड़ने के लिए, setDefaultsAsync(int) का इस्तेमाल करें, जैसा कि यहां दिखाया गया है:

    Kotlin+KTX

    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

    Java

    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

चौथा चरण: अपने ऐप्लिकेशन में इस्तेमाल करने के लिए पैरामीटर वैल्यू पाना

अब Remote Config ऑब्जेक्ट से पैरामीटर की वैल्यू ली जा सकती हैं. अगर बैकएंड में वैल्यू सेट करके, उन्हें फ़ेच किया जाता है और फिर उन्हें चालू किया जाता है, तो ये वैल्यू आपके ऐप्लिकेशन पर उपलब्ध होंगी. अगर ऐसा नहीं है, तो आपको setDefaultsAsync(int) का इस्तेमाल करके, इन-ऐप्लिकेशन पैरामीटर की वैल्यू कॉन्फ़िगर करनी होंगी. ये वैल्यू पाने के लिए, नीचे दिए गए तरीके को कॉल करें. यह तरीका आपके ऐप्लिकेशन को उस डेटा टाइप से मैप करता है जिसकी उम्मीद आपके ऐप्लिकेशन को होती है. साथ ही, पैरामीटर कुंजी को आर्ग्युमेंट के तौर पर इस्तेमाल करें:

पांचवां चरण: Remote Config बैकएंड में पैरामीटर वैल्यू सेट करना

Firebase कंसोल या Remote Config बैकएंड एपीआई का इस्तेमाल करके, सर्वर साइड की नई डिफ़ॉल्ट वैल्यू बनाई जा सकती हैं. ये वैल्यू, आपकी पसंद के कंडीशनल लॉजिक या उपयोगकर्ता टारगेटिंग के हिसाब से, इन-ऐप्लिकेशन वैल्यू को बदल देती हैं. इस सेक्शन में, Firebase कंसोल में इन वैल्यू को बनाने का तरीका बताया गया है.

  1. Firebase कंसोल में, अपना प्रोजेक्ट खोलें.
  2. Remote Config डैशबोर्ड देखने के लिए, मेन्यू से Remote Config चुनें.
  3. पैरामीटर के नाम वही रखें जो आपने अपने ऐप्लिकेशन में तय किए हैं. हर पैरामीटर के लिए, एक डिफ़ॉल्ट वैल्यू सेट की जा सकती है. यह वैल्यू, आखिर में ऐप्लिकेशन में मौजूद डिफ़ॉल्ट वैल्यू को बदल देगी. साथ ही, शर्त के हिसाब से वैल्यू भी सेट की जा सकती हैं. ज़्यादा जानने के लिए, Remote Config पैरामीटर और शर्तें देखें.

छठा चरण: वैल्यू फ़ेच और चालू करना

  1. Remote Config बैकएंड से पैरामीटर वैल्यू फ़ेच करने के लिए, fetch() वाला तरीका इस्तेमाल करें. बैकएंड में सेट की गई सभी वैल्यू को फ़ेच किया जाता है और Remote Config ऑब्जेक्ट में सेव किया जाता है.
  2. अपने ऐप्लिकेशन में फ़ेच की गई पैरामीटर वैल्यू उपलब्ध कराने के लिए, activate() तरीके को कॉल करें.

    अगर आपको एक ही कॉल में वैल्यू फ़ेच और चालू करनी हैं, तो Remote Config बैकएंड से वैल्यू फ़ेच करने और उन्हें ऐप्लिकेशन के लिए उपलब्ध कराने के लिए, fetchAndActivate() अनुरोध का इस्तेमाल किया जा सकता है:

    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 बैकएंड से अपडेट पाने के लिए, रीयल-टाइम Remote Config का इस्तेमाल किया जा सकता है. अपडेट उपलब्ध होने पर, कनेक्ट किए गए डिवाइसों को रीयल-टाइम में Remote Config सिग्नल भेजता है. साथ ही, नया Remote Config वर्शन पब्लिश करने के बाद, बदलावों को अपने-आप फ़ेच करता है.

Firebase SDK टूल पर, Android के v21.3.0 या इसके बाद के वर्शन (Firebase BoM 31.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<Boolean>() {
                @Override
                public void onComplete(@NonNull Task<Boolean> task) {
                    displayWelcomeMessage();
                }
            });
        }
        @Override
        public void onError(FirebaseRemoteConfigException error) {
            Log.w(TAG, "Config update error with code: " + error.getCode(), error);
        }
    });
  2. अगली बार Remote Config का नया वर्शन पब्लिश करने पर, जिन डिवाइसों पर आपका ऐप्लिकेशन चल रहा है और जिनमें बदलावों को सुना जा रहा है वे ConfigUpdateListener को कॉल करेंगे.

थ्रॉटलिंग

अगर कोई ऐप्लिकेशन कम समय में कई बार फ़ेच करता है, तो फ़ेच कॉल को कम कर दिया जाता है और एसडीके टूल FirebaseRemoteConfigFetchThrottledException दिखाता है. SDK टूल के 17.0.0 वर्शन से पहले, 60 मिनट की विंडो में फ़ेच करने के लिए पांच अनुरोध ही किए जा सकते थे. हालांकि, नए वर्शन में इसकी सीमा ज़्यादा है.

ऐप्लिकेशन डेवलपमेंट के दौरान, आपको कॉन्फ़िगरेशन को बार-बार (हर घंटे कई बार) फ़ेच और चालू करना पड़ सकता है, ताकि ऐप्लिकेशन को डेवलप और टेस्ट करते समय तेज़ी से बदलाव किए जा सकें. जब सर्वर पर कॉन्फ़िगरेशन अपडेट किया जाता है, तो रीयल-टाइम Remote Config अपडेट अपने-आप कैश मेमोरी को बायपास कर देता है. ज़्यादा से ज़्यादा 10 डेवलपर के साथ किसी प्रोजेक्ट पर तेज़ी से बदलाव करने के लिए, अपने ऐप्लिकेशन में कुछ समय के लिए FirebaseRemoteConfigSettings ऑब्जेक्ट को सेट किया जा सकता है. इसके लिए, फ़ेच करने के लिए कम से कम इंटरवल (setMinimumFetchIntervalInSeconds) सेट करें.

Remote Config के लिए, फ़ेच करने का डिफ़ॉल्ट कम से कम इंटरवल 12 घंटे का होता है. इसका मतलब है कि 12 घंटे की विंडो में, बैकएंड से कॉन्फ़िगरेशन एक से ज़्यादा बार फ़ेच नहीं किए जाएंगे. भले ही, फ़ेच करने के कितने कॉल किए गए हों. खास तौर पर, फ़ेच करने का कम से कम इंटरवल इस क्रम में तय किया जाता है:

  1. fetch(long) में मौजूद पैरामीटर
  2. FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long) में मौजूद पैरामीटर
  3. डिफ़ॉल्ट वैल्यू 12 घंटे

डेटा फ़ेच करने के लिए तय किया गया कम से कम इंटरवल, कस्टम वैल्यू पर सेट करने के लिए FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long) का इस्तेमाल करें.

अगले चरण

अगर आपने अब तक इसका इस्तेमाल नहीं किया है, तो Remote Config इस्तेमाल के उदाहरण देखें. साथ ही, कुछ अहम कॉन्सेप्ट और बेहतर रणनीतियों के दस्तावेज़ देखें. इनमें ये शामिल हैं: