Firebase रिमोट कॉन्फ़िगरेशन का इस्तेमाल करके, Firebase ऐप्लिकेशन जांच को धीरे-धीरे रोल आउट करें

1. शुरुआती जानकारी

ऐप्लिकेशन अटेस्ट के साथ Firebase App Check का इस्तेमाल करके, बैकएंड सेवाओं को सुरक्षित रखा जा सकता है. साथ ही, यह पुष्टि की जा सकती है कि Firebase सेवाओं के लिए अनुरोध, आपके सही ऐप्लिकेशन से ही आ रहे हैं.

आम तौर पर, यह सुझाव दिया जाता है कि उपयोगकर्ताओं को ऐप्लिकेशन अटेस्ट सेवा पर धीरे-धीरे शामिल किया जाए, ताकि कोटा की सीमा खत्म न हो. ज़्यादा जानकारी के लिए, Apple का "App प्रमाणित करने की सेवा का इस्तेमाल करने की तैयारी" देखें दस्तावेज़.

Apple के App Store Connect की सुविधा का इस्तेमाल करके, समय-समय पर ऐप्लिकेशन के अपडेट रिलीज़ करने की सुविधा. इसके बारे में "अलग-अलग चरणों में वर्शन अपडेट रिलीज़ करना" में बताया गया है ऐप्लिकेशन की जांच के रोल आउट को आसान बना सकते हैं. यह एक सीधा और सरल समाधान है. हालांकि, ऐप्लिकेशन के वर्शन के अपडेट को अलग-अलग चरणों में रिलीज़ करने से, आपको ऐप्लिकेशन का नया वर्शन पब्लिश किए बिना रोल आउट को कंट्रोल करने या मौजूदा और अपडेट किए गए ऐप्लिकेशन के काम करने का तरीका बदलने की अनुमति नहीं मिलती.

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

आपको इनके बारे में जानकारी मिलेगी

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

यह कोडलैब, DatabaseExample क्विकस्टार्ट ऐप्लिकेशन पर आधारित Firebase प्रोजेक्ट का इस्तेमाल करता है और इसे Firebase App Check के साथ इंटिग्रेट किया गया है. इसकी जानकारी Apple Platforms codelab के लिए Firebase App Check में दी गई है. DatabaseExample क्विकस्टार्ट ऐप्लिकेशन की मदद से उपयोगकर्ता, Firebase रीयल टाइम डेटाबेस की सुविधाओं का इस्तेमाल करके लॉग इन कर सकते हैं और पोस्ट जोड़ सकते हैं.

अपने ऐप्लिकेशन की जांच करने के लिए, इस कोडलैब में दिए गए तरीके को अपनाया जा सकता है.

ज़रूरी शर्तें

आपको इन चीज़ों की ज़रूरत होगी

2. अपनी पसंद के मुताबिक पुष्टि करने की सेवा देने वाली कंपनी बनाएं

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

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

  1. "MyAppCheckProvider" फ़ाइल बनाएं जो AppCheckProvider प्रोटोकॉल के अनुरूप NSObject की एक सब-क्लास है.
  2. कोई खाली getToken() तरीका शामिल करें, जिसे आप बाद में भरें.

खाली getToken() तरीके वाली कस्टम प्रोवाइडर क्लास के लिए, उदाहरण के तौर पर दिया गया यह कोड देखें.

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

AppAttestProvider को इंस्टैंशिएट करने के लिए, आपको इससे जुड़े FirebaseApp का एक इंस्टेंस पास करना होगा. इसके लिए, सेव की गई प्रॉपर्टी बनाएं और इसे शुरू करने वाले पैरामीटर के तौर पर स्वीकार करें:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

ऐप्लिकेशन प्रमाणित करने वाली कंपनी को टोकन अनुरोध फ़ॉरवर्ड करें

अब आपके पास getToken() वाले तरीके में, ऐप्लिकेशन प्रमाणित करने वाली कंपनी को टोकन अनुरोध फ़ॉरवर्ड करने की पूरी सुविधा है.

ध्यान दें: FirebaseAppCheck फ़्रेमवर्क रेफ़रंस में getToken() तरीके के बारे में ज़्यादा जानें.

अपने getToken() तरीके में यह कोड जोड़ें:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  private lazy var appAttestProvider = AppAttestProvider(app: firebaseApp)

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
    // Fetch App Attest flag from Remote Config
    let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
    remoteConfig.fetchAndActivate { remoteConfigStatus, error in
      // Get App Attest flag value
      let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

      guard appAttestEnabled else {
        // Skip attestation if App Attest is disabled. Another attestation
        // method like DeviceCheck may be used instead of just skipping.
        handler(nil, MyProviderError.appAttestIsDisabled)
        return
      }

      // Try to obtain an App Attest provider instance and fail if cannot
      guard let appAttestProvider = self.appAttestProvider else {
        handler(nil, MyProviderError.appAttestIsUnavailable)
        return
      }

      // If App Attest is enabled for the app instance, then forward the
      // Firebase App Check token request to the App Attest provider
      appAttestProvider.getToken(completion: handler)
    }
  }
}

enum MyProviderError: Error {
  case appAttestIsDisabled
  case appAttestIsUnavailable
  case unexpected(code: Int)
}

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

Analytics इवेंट जोड़ना

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

Analytics के दो इवेंट लॉग करें: सक्सेस (सफलता) होने पर AppAttestSupport और फ़ेल होने पर AppAttestFailure. Analytics के ये दो इवेंट, आपके ऐप्लिकेशन की जांच के रोल आउट की परफ़ॉर्मेंस को ट्रैक करने में मदद कर सकते हैं. साथ ही, इससे आपको यह तय करने में भी मदद मिल सकती है कि बड़े पैमाने पर रोल आउट को जारी रखना है या नहीं.

func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
  // Fetch Remote Config.
  let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
  remoteConfig.fetchAndActivate { remoteConfigStatus, error in
    // Get App Attest flag value from Remote Config.
    let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

    guard appAttestEnabled else {
      // Skip attestation if App Attest is disabled. Another attestation
      // method like DeviceCheck may be used instead of just skipping.
      handler(nil, MyProviderError.appAttestIsDisabled)
      return
    }

    // Try to obtain an App Attest provider instance and fail otherwise.
    guard let appAttestProvider = self.appAttestProvider else {
      handler(nil, MyProviderError.appAttestIsUnavailable)
      return
    }

    // If App Attest is enabled for the app instance, then forward the
    // Firebase App Check token request to the App Attest provider.
    appAttestProvider.getToken { token, error in
      // Log an Analytics event to track attestation success rate.
      let appAttestEvent: String
      if (token != nil && error == nil) {
        appAttestEvent = "AppAttestSuccess"
      } else {
        appAttestEvent = "AppAttestFailure"
      }
      Analytics.logEvent(appAttestEvent, parameters: nil)

      // Pass the result to the handler
      handler(token, error)
    }
  }
}

3. प्रोवाइडर फ़ैक्ट्री क्लास अपडेट करें

टोकन अनुरोध को ऐप्लिकेशन अटेस्ट की सेवा देने वाली कंपनी को फ़ॉरवर्ड करने और कुछ Analytics इवेंट जोड़ने के लिए लॉजिक लागू करने के बाद, आपको MyAppCheckProviderFactory.class अपडेट करना होगा. इसे आपने Apple प्लैटफ़ॉर्म के लिए ऐप्लिकेशन कोडलैब के लिए ऐप्लिकेशन जांच में बनाया है. यह क्लास, सिम्युलेटर के लिए ऐप्लिकेशन जांच डीबग सेवा देने वाली कंपनी को टारगेट करेगी. इसके अलावा, यह कस्टम सेवा देने वाली कंपनी को भी टारगेट करेगी.

Apple प्लैटफ़ॉर्म कोडलैब के लिए Firebase App Check में बनाई गई MyAppCheckProviderFactory क्लास में, नीचे दिए गए कोड में बदलाव करें:

// MyAppCheckProviderFactory.swift

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
      #if targetEnvironment(simulator)
      // App Attest is not available on simulators.
      // Use a debug provider.
      let provider = AppCheckDebugProvider(app: app)

      // Print only locally generated token to avoid a valid token leak on CI.
      print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

      return provider
      #else
      if #available(iOS 14.0, *) {
        // Use your custom App Attest provider on real devices.
        return MyAppCheckProvider(app: app)
      } else {
        return DeviceCheckProvider(app: app)
      }
      #endif
  }
}

FirebaseApp को कॉन्फ़िगर करने से पहले, पुष्टि करें कि आपने AppCheckProviderFactory को सेट कर दिया है:

// DatabaseExampleApp.swift

import SwiftUI
import Firebase
import FirebaseAppCheck

@main
struct DatabaseExampleApp: App {
  init() {
    AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
    FirebaseApp.configure()
  }

  // ...
}

4. Firebase कंसोल में रिमोट कॉन्फ़िगरेशन पैरामीटर जोड़ना

अब आपको Firebase कंसोल में, रिमोट कॉन्फ़िगरेशन पैरामीटर AppAttestEnabled जोड़ना होगा . आपके getToken तरीके में यह पैरामीटर होना ज़रूरी है.

Firebase कंसोल में रिमोट कॉन्फ़िगरेशन पैरामीटर बनाने के लिए :

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

Firebase कंसोल में रिमोट कॉन्फ़िगरेशन पैरामीटर बनाना

'सेव करें' पर क्लिक करने से पहले, 10% उपयोगकर्ताओं के लिए कंडिशनल वैल्यू बनाएं:

  1. नया जोड़ें क्लिक करें > शर्त के साथ वैल्यू > नई शर्त बनाएं.
  2. नाम फ़ील्ड में, शर्त का नाम डालें.
  3. लागू होता है, अगर... में, रैंडम पर्सेंटाइल में उपयोगकर्ता <= चुनें. इसके बाद, % फ़ील्ड में 10 डालें.
  4. शर्त बनाएं पर क्लिक करें.

Firebase कंसोल में रिमोट कॉन्फ़िगरेशन की शर्त तय करना

कंडिशनल वैल्यू को true पर सेट करें, ताकि ऐप्लिकेशन प्रमाणित करने की सुविधा आपके 10% उपयोगकर्ताओं को रोल आउट हो जाए.

  1. आपने अभी जो शर्त बनाई है उसकी वैल्यू को true पर सेट करें.
  2. सेव करें पर क्लिक करें.

Firebase कंसोल में रिमोट कॉन्फ़िगरेशन पैरामीटर की समीक्षा करना

काम पूरा होने के बाद, रिमोट कॉन्फ़िगरेशन में किए गए बदलावों को पब्लिश करें.

अपने डिवाइस पर रोल आउट की जांच करना

ऐप्लिकेशन कोड में बदलाव किए बिना, अपने डिवाइस पर अलग-अलग रिमोट कॉन्फ़िगरेशन फ़्लैग वैल्यू की जांच करने के लिए, AppAttestEnabled पैरामीटर पर एक्सपेरिमेंट को कॉन्फ़िगर करें. इसके लिए, A/B टेस्टिंग ट्यूटोरियल की मदद से, Firebase रिमोट कॉन्फ़िगरेशन के एक्सपेरिमेंट बनाएं लेख पढ़ें. ट्यूटोरियल सेक्शन "टेस्ट डिवाइस पर अपने प्रयोग की पुष्टि करना" आपके टेस्ट डिवाइस के लिए अलग-अलग वैल्यू असाइन करने का तरीका बताता है.

Google Analytics का इस्तेमाल करके, अपने ऐप्लिकेशन प्रमाणित करने के रोल आउट की सफलता को मॉनिटर करना आखिरी चरण है.

5. AppCheck के रोल आउट की सफलता की समीक्षा करना

Analytics इवेंट डैशबोर्ड पर, रोल आउट की सफलता का आकलन किया जा सकता है. AppAttest Success और AppAttestFailure इवेंट देखें. डैशबोर्ड में इवेंट दिखने में 24 घंटे तक लग सकते हैं. इसके अलावा, आपके पास डीबग करने की सुविधा को चालू करने और डीबग इवेंट को ज़्यादा तेज़ी से देखने के लिए, DebugView का इस्तेमाल करने का विकल्प भी होता है.

इसके अलावा, क्रैश रेट में हुई बढ़ोतरी देखने के लिए, Crashlytics का डैशबोर्ड इस्तेमाल किया जा सकता है. अपने ऐप्लिकेशन में Crashlytics जोड़ने के बारे में ज़्यादा जानकारी पाने के लिए, Firebase Crashlytics का इस्तेमाल करने का तरीका लेख पढ़ें.

जब आपको ज़्यादातर AppAttest Success इवेंट और कुछ AppAttestFailure इवेंट दिखते हैं, तो इस बात का अच्छा संकेत है कि ऐप्लिकेशन Attest की सुविधा चालू करके, उपयोगकर्ताओं का प्रतिशत बढ़ाया जा सकता है. इसके लिए, आपको रिमोट कॉन्फ़िगरेशन पैरामीटर AppAttestEnabled में जाकर शर्त में बदलाव करना होगा.

Firebase कंसोल में Analytics इवेंट की समीक्षा करना

ज़रूरी नहीं: Google Analytics की ऑडियंस का फ़ायदा पाएं

अगर आपको AppAttestEnabled इवेंट का ज़्यादा फ़ायदा लेना है, तो ऐसे उपयोगकर्ताओं को ट्रैक करने के लिए Analytics की ऑडियंस बनाएं जिनके लिए AppAttestEnabled को 'सही है' पर सेट किया गया हो.

App Attest को iOS 14.0 के साथ रिलीज़ किया गया था. ऐसा हो सकता है कि आपके कुछ उपयोगकर्ता इस रिलीज़ का हिस्सा न हों और इसलिए, उन्हें ऐप्लिकेशन की पुष्टि करने की सुविधा न मिले. इन उपयोगकर्ताओं को ट्रैक करने के लिए, कोई दूसरा Analytics इवेंट लॉग किया जा सकता है. इसके बाद, उस ऑडियंस को पुष्टि करने का कोई दूसरा तरीका चुना जा सकता है, जैसे कि DeviceCheck.

ज़रूरी नहीं: क्रैश पर नज़र रखने के लिए Crashlytics का इस्तेमाल करें

लॉन्च के दौरान अपने ऐप्लिकेशन की स्थिरता को बेहतर ढंग से समझने के लिए, Firebase Crashlytics का इस्तेमाल करके क्रैश और नुकसान न पहुंचाने वाली चीज़ों पर नज़र रखें.

6. बधाई हो!

आपने रिमोट कॉन्फ़िगरेशन की मदद से, ऐप्लिकेशन की जांच करने की सुविधा लॉन्च कर दी है 🎉

अतिरिक्त संसाधन: