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


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

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

  1. अगर आपने पहले से ऐसा नहीं किया है, तो अपने 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 प्लैटफ़ॉर्म के लिए Firebase SDK टूल v10.7.0 और इसके बाद के वर्शन पर काम करते हैं.

  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 घंटे की डिफ़ॉल्ट वैल्यू

अगले चरण

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