फ़ायरबेस रिमोट कॉन्फ़िगरेशन का उपयोग करके फ़ायरबेस ऐप चेक को धीरे-धीरे रोल आउट करें

1 परिचय

आप अपनी बैकएंड सेवाओं की सुरक्षा के लिए ऐप अटेस्ट के साथ फायरबेस ऐप चेक का उपयोग कर सकते हैं और यह सत्यापित कर सकते हैं कि फायरबेस सेवाओं के लिए अनुरोध आपके प्रामाणिक ऐप से आ रहे हैं।

आमतौर पर कोटा सीमा से बचने के लिए उपयोगकर्ताओं को धीरे-धीरे ऐप अटेस्ट सेवा में शामिल करने की सिफारिश की जाती है। अधिक जानकारी के लिए, Apple का " ऐप अटेस्ट सेवा का उपयोग करने की तैयारी " दस्तावेज़ देखें।

ऐप्पल के ऐप स्टोर कनेक्ट सुविधा का उपयोग करके ऐप अपडेट को क्रमिक रूप से जारी करने की क्षमता, जैसा कि " चरणों में एक संस्करण अपडेट जारी करना " में वर्णित है, ऐप चेक रोलआउट को आसान बना सकता है। यह एक सीधा, सरल उपाय है. हालाँकि, चरणों में ऐप संस्करण अपडेट जारी करने से आपको नए ऐप संस्करण को प्रकाशित किए बिना रोलआउट को नियंत्रित करने या मौजूदा, अपडेट किए गए ऐप्स के व्यवहार को बदलने की अनुमति नहीं मिलती है।

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

आप क्या सीखेंगे

इस मल्टीस्टेप कोडलैब में, आप सीखेंगे कि अपने ऐप के लिए ऐप चेक को रोल आउट करने के लिए फायरबेस रिमोट कॉन्फिग का उपयोग कैसे करें।

यह कोडलैब DatabaseExample क्विकस्टार्ट ऐप पर आधारित एक फायरबेस प्रोजेक्ट का उपयोग करता है और फायरबेस ऐप चेक के साथ एकीकृत होता है, जैसा कि ऐप्पल प्लेटफ़ॉर्म कोडलैब के लिए फायरबेस ऐप चेक में वर्णित है। DatabaseExample क्विकस्टार्ट ऐप उपयोगकर्ताओं को फायरबेस रीयलटाइम डेटाबेस की सुविधाओं का उपयोग करके लॉग इन करने और पोस्ट जोड़ने की अनुमति देता है।

आप अपने स्वयं के ऐप का परीक्षण करने के लिए इस कोडलैब के चरणों को भी अनुकूलित कर सकते हैं।

आवश्यक शर्तें

आपको किस चीज़ की ज़रूरत पड़ेगी

  • एक्सकोड 12.5+
  • ऐप अटेस्ट परीक्षण के लिए:
  • फायरबेस प्रोजेक्ट के साथ:
  • रिमोट कॉन्फ़िगरेशन बनाने और प्रबंधित करने और Google Analytics देखने की अनुमति के साथ, आपके ऐप के संबद्ध फायरबेस प्रोजेक्ट तक पहुंच

2. एक कस्टम सत्यापन प्रदाता बनाएँ

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

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

  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 Framework Reference में 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 बूलियन पैरामीटर की जाँच करता है (यह रिमोट कॉन्फिग पैरामीटर बाद में कोडलैब में बनाया जाएगा)। यदि मान गलत है, तो कोड विफल हो जाता है, यह दर्शाता है कि वर्तमान डिवाइस पर ऐप चेक रोल आउट नहीं किया गया है। यदि मान सत्य है, तो कोड एक ऐप अटेस्ट प्रदाता प्राप्त करने का प्रयास करता है और यदि ऐसा नहीं हो पाता है तो विफल हो जाता है। यदि ये त्रुटि जांच पास हो जाती है, तो कोड टोकन अनुरोध को ऐप अटेस्ट प्रदाता को अग्रेषित कर देगा।

एनालिटिक्स इवेंट जोड़ें

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

दो एनालिटिक्स इवेंट लॉग करें: सफलता पर AppAttestSuccess , और विफलता पर AppAttestFairure । ये दो एनालिटिक्स इवेंट आपके ऐप चेक रोलआउट की सफलता को ट्रैक करने में मदद कर सकते हैं और आपको यह तय करने में मदद कर सकते हैं कि क्या एक बड़ा रोलआउट आगे बढ़ना चाहिए।

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. प्रदाता फ़ैक्टरी वर्ग को अद्यतन करें

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

Apple प्लेटफ़ॉर्म कोडलैब के लिए फ़ायरबेस ऐप चेक में आपके द्वारा बनाए गए 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. फायरबेस कंसोल में एक रिमोट कॉन्फिग पैरामीटर जोड़ें

अब आप फायरबेस कंसोल में रिमोट कॉन्फिग पैरामीटर AppAttestEnabled जोड़ देंगे। आपकी getToken विधि को इस पैरामीटर की आवश्यकता है।

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

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

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

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

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

फ़ायरबेस कंसोल में रिमोट कॉन्फ़िगरेशन स्थिति को परिभाषित करना

सशर्त मान को सत्य पर सेट करें ताकि ऐप अटेस्ट आपके 10% उपयोगकर्ताओं तक पहुंच जाए।

  1. आपके द्वारा अभी बनाई गई स्थिति के लिए मान को सत्य पर सेट करें।
  2. सहेजें पर क्लिक करें.

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

जब आपका काम पूरा हो जाए, तो रिमोट कॉन्फ़िगरेशन परिवर्तन प्रकाशित करें।

अपने डिवाइस पर रोलआउट का परीक्षण करें

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

अंतिम चरण आपके ऐप अटेस्ट रोलआउट की सफलता की निगरानी के लिए Google Analytics का उपयोग करना है।

5. अपने ऐपचेक रोलआउट की सफलता की समीक्षा करें

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

वैकल्पिक रूप से, आप क्रैश दरों में वृद्धि के लिए क्रैशलाइटिक्स डैशबोर्ड की निगरानी कर सकते हैं। अपने ऐप में Crashlytics जोड़ने के बारे में अधिक जानकारी के लिए, Firebase Crashlytics के साथ आरंभ करें देखें।

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

फायरबेस कंसोल में एनालिटिक्स इवेंट की समीक्षा करना

वैकल्पिक: Google Analytics ऑडियंस का लाभ उठाएं

यदि आप AppAttestEnabled Analytics ईवेंट का और अधिक लाभ उठाना चाहते हैं, तो आप AppAttestEnabled को सत्य पर सेट करके उपयोगकर्ताओं को ट्रैक करने के लिए एक एनालिटिक्स ऑडियंस बना सकते हैं।

ऐप अटेस्ट iOS 14.0 के साथ जारी किया गया था। आपके कुछ उपयोगकर्ता इस रिलीज़ पर नहीं हो सकते हैं, और इस प्रकार ऐप अटेस्ट के लिए पात्र नहीं हैं। आप इन उपयोगकर्ताओं को ट्रैक करने के लिए एक अन्य एनालिटिक्स ईवेंट लॉग कर सकते हैं, फिर उस ऑडियंस को किसी अन्य सत्यापन विधि, जैसे डिवाइसचेक के लिए लक्षित कर सकते हैं।

वैकल्पिक: क्रैश की निगरानी के लिए क्रैशलिटिक्स का उपयोग करें

रोलआउट के दौरान अपने ऐप की स्थिरता को बेहतर ढंग से समझने के लिए, क्रैश और गैर-घातकों की निगरानी के लिए फायरबेस क्रैशलाइटिक्स का उपयोग करें।

6. बधाई हो!

आपने रिमोट कॉन्फिगरेशन के साथ ऐप चेक को सफलतापूर्वक रोल आउट कर दिया है

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