Android पर Remote Config का इस्तेमाल शुरू करना

प्लैटफ़ॉर्म चुनें: iOS+ Android Web Flutter Unity C++


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

पहला चरण: अपने ऐप्लिकेशन में Firebase और Remote Config 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 और Analytics लाइब्रेरी की डिपेंडेंसी जोड़ें. हमारा सुझाव है कि लाइब्रेरी के वर्शन को कंट्रोल करने के लिए, Firebase Android BoM का इस्तेमाल करें.

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.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:23.0.1")
    implementation("com.google.firebase:firebase-analytics:23.0.0")
    }

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

Remote Config ऑब्जेक्ट इंस्टेंस पाएं और समय-समय पर रीफ़्रेश के लिए फ़ेच करने का छोटे से छोटा इंटरवल सेट करें:

Kotlin

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. Map ऑब्जेक्ट या XML रिसॉर्स फ़ाइल का इस्तेमाल करके, पैरामीटर के नामों और पैरामीटर की डिफ़ॉल्ट वैल्यू का सेट तय करें. यह फ़ाइल, आपके ऐप्लिकेशन के res/xml फ़ोल्डर में सेव की जाती है. Remote Config क्विकस्टार्ट सैंपल ऐप्लिकेशन, डिफ़ॉल्ट पैरामीटर के नाम और वैल्यू तय करने के लिए XML फ़ाइल का इस्तेमाल करता है.

    अगर आपने 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
    

    Google Cloud CLI या Cloud Shell का इस्तेमाल करके, यह कमांड चलाकर बियरर टोकन जनरेट किया जा सकता है:

    gcloud auth print-access-token
    

    यह टोकन कुछ समय के लिए ही मान्य होता है. इसलिए, पुष्टि करने में गड़बड़ी होने पर, आपको इसे फिर से जनरेट करना पड़ सकता है.

    Firebase कंसोल

    1. पैरामीटर टैब में, मेन्यू खोलें. इसके बाद, डिफ़ॉल्ट वैल्यू डाउनलोड करें को चुनें.

    2. जब आपसे कहा जाए, तब Android के लिए .xml फ़ाइल को चालू करें. इसके बाद, फ़ाइल डाउनलोड करें पर क्लिक करें.

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

    Kotlin

    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 पैरामीटर और शर्तें लेख पढ़ें.
  4. अगर कस्टम सिग्नल की शर्तों का इस्तेमाल किया जा रहा है, तो एट्रिब्यूट और उनकी वैल्यू तय करें. यहां दिए गए उदाहरणों में, कस्टम सिग्नल की शर्त तय करने का तरीका बताया गया है.

    Kotlin

            val customSignals = customSignals {
                put("city", "Tokyo")
                put("preferred_event_category", "sports")
            }
    
            remoteConfig.setCustomSignals(customSignals)
        

    Java

            CustomSignals customSignals = new CustomSignals.Builder()
                .put("city", "Tokyo")
                .put("preferred_event_category", "sports")
                .build();
    
            mFirebaseRemoteConfig.setCustomSignals(customSignals);
    
        

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

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

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

    Kotlin

    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 v31.2.4+) वर्शन के साथ काम करती है.

  1. अपने ऐप्लिकेशन में, addOnConfigUpdateListener() का इस्तेमाल करके अपडेट सुनना शुरू करें. इससे नई पैरामीटर वैल्यू अपने-आप फ़ेच हो जाएंगी. अपडेट किए गए कॉन्फ़िगरेशन को चालू करने के लिए, onUpdate() कॉलबैक लागू करें.

    Kotlin

    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 दिखाता है. एसडीके टूल के 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) का इस्तेमाल करें.