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


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

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

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

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

  3. सिंगलटन रिमोट कॉन्फ़िगरेशन ऑब्जेक्ट बनाएं, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

    Swift

    remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 0
    remoteConfig.configSettings = settings

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
    remoteConfigSettings.minimumFetchInterval = 0;
    self.remoteConfig.configSettings = remoteConfigSettings;

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

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

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

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

  1. किसी NSDictionary ऑब्जेक्ट या किसी plist फ़ाइल का इस्तेमाल करके, पैरामीटर के नामों का एक सेट और डिफ़ॉल्ट पैरामीटर वैल्यू तय करें.

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

    REST

    curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
    

    Firebase कंसोल

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

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

  2. setDefaults: का इस्तेमाल करके, इन वैल्यू को रिमोट कॉन्फ़िगरेशन ऑब्जेक्ट में जोड़ें. नीचे दिए गए उदाहरण में, plist फ़ाइल से इन-ऐप्लिकेशन डिफ़ॉल्ट वैल्यू सेट की गई हैं:

    Swift

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

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

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

चौथा चरण: पैरामीटर वैल्यू को सेट करना

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

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

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

रिमोट कॉन्फ़िगरेशन से पैरामीटर की वैल्यू फ़ेच करने के लिए, fetchWithCompletionHandler: या fetchWithExpirationDuration:completionHandler: तरीके को कॉल करें. बैकएंड पर सेट की गई सभी वैल्यू, फ़ेच की जाती हैं और रिमोट कॉन्फ़िगरेशन ऑब्जेक्ट में कैश मेमोरी में सेव की जाती हैं.

ऐसे मामलों के लिए, जहां आपको एक ही कॉल में वैल्यू फ़ेच और चालू करनी हैं, उनके लिए fetchAndActivateWithCompletionHandler: का इस्तेमाल करें.

इस उदाहरण में, रिमोट कॉन्फ़िगरेशन बैकएंड से वैल्यू फ़ेच की गई हैं (कैश मेमोरी में सेव की गई वैल्यू नहीं) और activateWithCompletionHandler: को कॉल करके, उन्हें ऐप्लिकेशन में उपलब्ध कराया गया है:

Swift

remoteConfig.fetch { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate { changed, error in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.displayWelcome()
}

Objective-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        if (error != nil) {
          NSLog(@"Activate error: %@", error.localizedDescription);
        } else {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self displayWelcome];
          });
        }
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
}];

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

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

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

रीयल-टाइम अपडेट, Apple प्लैटफ़ॉर्म v10.7.0 और इसके बाद के वर्शन के लिए Firebase SDK टूल पर काम करते हैं.

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

    Swift

    remoteConfig.addOnConfigUpdateListener { configUpdate, error in
      guard let configUpdate, error == nil else {
        print("Error listening for config updates: \(error)")
      }
    
      print("Updated keys: \(configUpdate.updatedKeys)")
    
      self.remoteConfig.activate { changed, error in
        guard error == nil else { return self.displayError(error) }
        DispatchQueue.main.async {
          self.displayWelcome()
        }
      }
    }
    

    Objective-C

    __weak __typeof__(self) weakSelf = self;
    [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error listening for config updates %@", error.localizedDescription);
      } else {
        NSLog(@"Updated keys: %@", configUpdate.updatedKeys);
    
        __typeof__(self) strongSelf = weakSelf;
        [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Activate error %@", error.localizedDescription);
          }
    
          dispatch_async(dispatch_get_main_queue(), ^{
            [strongSelf displayWelcome];
          });
        }];
      }
    }];
    
  2. अगली बार अपने रिमोट कॉन्फ़िगरेशन का नया वर्शन पब्लिश करने पर, ऐसे डिवाइस जिनमें आपका ऐप्लिकेशन चल रहा है और बदलावों को सुना जा रहा है, उन्हें पूरा करने वाले हैंडलर को कॉल किया जाएगा.

थ्रॉटलिंग

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

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

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

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

अगले चरण

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