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:34.0.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 की हर लाइब्रेरी के वर्शन की जानकारी देनी होगी.

    ध्यान दें कि अगर आपके ऐप्लिकेशन में 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.0")
        implementation("com.google.firebase:firebase-analytics:23.0.0")
    }

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

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

KotlinJava
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

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

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

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

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

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

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

    REST Firebase कंसोल
    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
    
    1. पैरामीटर टैब में, मेन्यू खोलें. इसके बाद, डिफ़ॉल्ट वैल्यू डाउनलोड करें को चुनें.

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

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

    KotlinJava
    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
    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. अगर कस्टम सिग्नल की शर्तों का इस्तेमाल किया जा रहा है, तो एट्रिब्यूट और उनकी वैल्यू तय करें. यहां दिए गए उदाहरणों में, कस्टम सिग्नल की शर्त तय करने का तरीका बताया गया है.

    KotlinJava
        val customSignals = customSignals {
            put("city", "Tokyo")
            put("preferred_event_category", "sports")
        }
    
        remoteConfig.setCustomSignals(customSignals)
        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 बैकएंड से वैल्यू फ़ेच की जा सकती हैं और उन्हें ऐप्लिकेशन के लिए उपलब्ध कराया जा सकता है:

    KotlinJava
    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()
        }
    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 की लोडिंग रणनीतियां देखें.

google-services.json

सातवां चरण: रीयल टाइम में अपडेट सुनना

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

रीयल-टाइम अपडेट की सुविधा, Firebase SDK के Android v21.3.0+ (Firebase BoM v31.2.4+) वर्शन के साथ काम करती है.

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

    KotlinJava
    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)
        }
    })
    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 इस्तेमाल के उदाहरण देखें. साथ ही, कुछ मुख्य कॉन्सेप्ट और बेहतर रणनीतियों से जुड़े दस्तावेज़ देखें. इनमें ये शामिल हैं: