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

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


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

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

  1. अगर आपने पहले से ही A/B टेस्टिंग नहीं बनाई है, तो अपने 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 सेट अप करने के लिए, आपको अपने ऐप्लिकेशन में Firebase SDK Google Analytics जोड़ना होगा.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.12.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 लाइब्रेरी की डिपेंडेंसी जोड़नाBoM

    अगर आपने Firebase BoM का इस्तेमाल नहीं किया है, तो आपको हर Firebase लाइब्रेरी का वर्शन उसकी डिपेंडेंसी लाइन में तय करना होगा.

    ध्यान दें कि अगर आपके ऐप्लिकेशन में Firebase की एक से ज़्यादा लाइब्रेरी इस्तेमाल की जाती हैं, तो हमारा सुझाव है कि लाइब्रेरी के वर्3/} मैनेज करने के लिए 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.2.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. अपने ऐप्लिकेशन के res/xml फ़ोल्डर में सेव की गई, मैप ऑब्जेक्ट या एक्सएमएल रिसॉर्स फ़ाइल का इस्तेमाल करके, पैरामीटर के नामों और डिफ़ॉल्ट पैरामीटर वैल्यू का सेट तय करें. रिमोट कॉन्फ़िगरेशन के 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
    

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

    gcloud auth print-access-token
    

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

    Firebase कंसोल

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

    2. प्रॉम्प्ट मिलने पर, Android के लिए .xml को चालू करें. इसके बाद, फ़ाइल डाउनलोड करें पर क्लिक करें.

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

    Kotlin

    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

    Java

    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

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

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

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

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

  1. Firebase 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();
                }
            });

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

google-services.json

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

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

Firebase SDK for 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) का इस्तेमाल करें.