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

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

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

आम तौर पर, यह सुझाव दिया जाता है कि उपयोगकर्ताओं को App Attest सेवा में धीरे-धीरे शामिल करें, ताकि कोटा की सीमाएं न बढ़ें. ज़्यादा जानकारी के लिए, Apple का "Preparing to Use the App Attest Service" दस्तावेज़ देखें.

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

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

आपको क्या सीखने को मिलेगा

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

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

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

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

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

2. कस्टम अटेस्टेशन प्रोवाइडर बनाना

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

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

  1. AppCheckProvider प्रोटोकॉल के मुताबिक काम करने वाली NSObject की सबक्लास "MyAppCheckProvider" फ़ाइल बनाएं.
  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) {}
}

टोकन का अनुरोध, App Attest की सेवा देने वाली कंपनी को फ़ॉरवर्ड करें

अब आपके पास, getToken() तरीके में App Attest की सेवा देने वाली कंपनी को टोकन का अनुरोध भेजने के लिए ज़रूरी सभी चीज़ें हैं.

ध्यान दें: 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 बूलियन पैरामीटर की जांच करता है. इस रिमोट कॉन्फ़िगरेशन पैरामीटर को बाद में कोडलैब में बनाया जाएगा. अगर वैल्यू 'गलत है' पर सेट है, तो कोड काम नहीं करेगा. इससे पता चलता है कि App Check की सुविधा, मौजूदा डिवाइस पर रोल आउट नहीं की गई है. अगर वैल्यू सही है, तो कोड App Attest की सुविधा देने वाली कंपनी से संपर्क करने की कोशिश करता है. अगर ऐसा नहीं हो पाता है, तो कोड काम नहीं करता. अगर गड़बड़ी की ये जांचें पास हो जाती हैं, तो कोड, टोकन के अनुरोध को App Attest की सेवा देने वाली कंपनी को भेज देगा.

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

Analytics इवेंट जोड़ने से, आपको यह बेहतर तरीके से पता चलता है कि App Check को रोल आउट करना कितना सफल रहा. Analytics से यह तय करने में मदद मिलेगी कि ज़्यादा ऑडियंस के लिए App Attest को चालू किया जाना चाहिए या नहीं.

दो Analytics इवेंट लॉग करें: पुष्टि होने पर AppAttestSuccess और पुष्टि न होने पर AppAttestFailure. इन दो Analytics इवेंट की मदद से, App Check को रोल आउट करने की प्रोसेस की सफलता को ट्रैक किया जा सकता है. साथ ही, यह तय किया जा सकता है कि बड़े पैमाने पर रोल आउट करना है या नहीं.

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. Provider Factory क्लास को अपडेट करना

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

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

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

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

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

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

शर्त के हिसाब से वैल्यू को true पर सेट करें, ताकि App Attest को 10% उपयोगकर्ताओं के लिए रोल आउट किया जा सके.

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

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

बदलाव करने के बाद, Remote Config में किए गए बदलावों को पब्लिश करें.

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

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

आखिरी चरण में, Google Analytics का इस्तेमाल करके यह मॉनिटर करें कि App Attest को रोल आउट करने में आपको कितनी सफलता मिली.

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

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

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

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

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

ज़रूरी नहीं: Google Analytics ऑडियंस का इस्तेमाल करना

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

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

ज़रूरी नहीं: ऐप्लिकेशन बंद होने की समस्या को मॉनिटर करने के लिए, Crashlytics का इस्तेमाल करें

लॉन्च के दौरान अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर तरीके से समझने के लिए, Firebase Crashlytics का इस्तेमाल करें. इससे, क्रैश और नॉन-फ़ैटल को मॉनिटर किया जा सकता है.

6. बधाई हो!

आपने रिमोट कॉन्फ़िगरेशन के साथ App Check को रोल आउट कर दिया है 🎉

अन्य संसाधन: