iOS के लिए Navigation SDK को सुरक्षित करने के लिए, App Check का इस्तेमाल करना

Firebase App Check, Google Maps Platform पर आपके ऐप्लिकेशन से किए जाने वाले कॉल को सुरक्षित रखता है. इसके लिए, यह आपके असली ऐप्लिकेशन के अलावा अन्य सोर्स से आने वाले ट्रैफ़िक को ब्लॉक करता है. यह सुविधा, App Attest जैसे पुष्टि करने वाले सोर्स से, ऐप्लिकेशन या डिवाइस की असलियत का आकलन करने का अनुरोध करके ऐसा करती है. अपने ऐप्लिकेशन को App Check के साथ इंटिग्रेट करने पर, आपको नुकसान पहुंचाने वाले और बिना अनुमति वाले अनुरोधों से सुरक्षा मिलती है. इससे, आपको बिना अनुमति के लगाए गए शुल्कों से भी सुरक्षा मिलती है. App Check की मदद से, आपके फ़्लीट ऐप्लिकेशन के ईकोसिस्टम में, रीयल-टाइम में होने वाली गड़बड़ियों की रिपोर्टिंग को भी बेहतर बनाया जा सकता है. इससे, आपके ऐप्लिकेशन का इस्तेमाल करने वाले सभी ड्राइवर को फ़ायदा मिलता है. ज़्यादा जानकारी के लिए, गड़बड़ी की रिपोर्टिंग देखें.

App Check का इस्तेमाल क्यों करना चाहिए?

App Check, iOS के लिए Navigation SDK के दो अलग-अलग हिस्सों को सुरक्षित रखता है: मुख्य नेविगेशन की सुविधा और गड़बड़ी की रिपोर्टिंग.

App Check की मदद से, iOS के लिए मुख्य Navigation SDK के अनुरोधों को, नुकसान पहुंचाने वाले या बिना अनुमति वाले सोर्स से ब्लॉक किया जा सकता है. इससे आपको सीधे तौर पर फ़ायदा मिलता है, क्योंकि यह आपके प्रोजेक्ट को बिलिंग की धोखाधड़ी और कोटा खत्म होने से बचाता है.

गड़बड़ी की रिपोर्टिंग

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

रिपोर्टिंग के लिए, App Check क्यों ज़रूरी है:

  • सड़क बंद होने की जानकारी के लिए, भरोसे का ऊंचा स्तर: सड़क बंद होने जैसे इवेंट, सभी ड्राइवर के लिए रूटिंग के व्यवहार को काफ़ी हद तक बदल सकते हैं. मैप को तोड़-फोड़, स्पैम या गलत रिपोर्टिंग से बचाने के लिए, रास्ते बंद होने की वजह से होने वाली गड़बड़ियों के लिए, Google का मॉडरेशन इन्फ़्रास्ट्रक्चर, डिवाइस और ऐप्लिकेशन की इंटिग्रिटी के मज़बूत सिग्नल पर निर्भर करता है.
  • App Check, रिपोर्ट की पुष्टि कैसे करता है: iOS के लिए Navigation SDK से भेजे गए, उपयोगकर्ता की रिपोर्ट और वोट में App Check टोकन शामिल होता है. इसका इस्तेमाल, Google का बैकएंड, फ़ीडबैक की असलियत की पुष्टि करने के लिए करता है. इससे, भरोसे का लेवल बढ़ता है और लाइव मैप पर पड़ने वाले असर का आकलन किया जा सकता है.
  • App Check को शामिल न करने पर पड़ने वाला असर: मान्य App Check टोकन के बिना सबमिट की गई रिपोर्ट का आकलन, कम भरोसे वाले मॉडल के तहत किया जाता है. साथ ही, इन्हें सिर्फ़ साइलेंट सिग्नल के तौर पर प्रोसेस किया जा सकता है. इसका मतलब है कि आपके उपयोगकर्ता अब भी रिपोर्ट कर सकते हैं और वोट कर सकते हैं. हालांकि, उनकी रिपोर्ट के मैप पर दिखने या अन्य ड्राइवर के रास्तों पर असर पड़ने की संभावना कम होती है. साथ ही, इसके लिए अतिरिक्त पुष्टि की ज़रूरत होगी.

क्या App Check मेरे लिए सही है?

ज़्यादातर मामलों में, App Check का इस्तेमाल करने का सुझाव दिया जाता है. हालांकि, इन स्थितियों में App Check की ज़रूरत नहीं होती या यह काम नहीं करता:

  • निजी या एक्सपेरिमेंटल ऐप्लिकेशन: अगर आपका ऐप्लिकेशन सार्वजनिक तौर पर उपलब्ध नहीं है, तो App Check की ज़रूरत नहीं है.
  • समझौता किए गए डिवाइस: सुझाए गए पुष्टि करने वाले सोर्स, iOS के लिए Navigation SDK को, भरोसेमंद नहीं माने जाने वाले डिवाइसों पर चलने से रोकते हैं. जैसे, रूट किए गए या जेलब्रेक किए गए फ़ोन. इन डिवाइसों के साथ काम करने के लिए, पुष्टि करने वाले कस्टम सोर्स को डिप्लॉय करें.

लागू करने के चरणों की खास जानकारी

अपने ऐप्लिकेशन को App Check के साथ इंटिग्रेट करने के लिए, आपको यह तरीका अपनाना होगा:

  1. अपने ऐप्लिकेशन में Firebase जोड़ें.
  2. App Check लाइब्रेरी जोड़ें और App Check को शुरू करें.
  3. टोकन देने वाला सोर्स जोड़ें. इस चरण में, डिवाइस या ऐप्लिकेशन की इंटिग्रिटी की पुष्टि करने के लिए, अपनी पसंद के पुष्टि करने वाले सोर्स को शुरू किया जाता है.
  4. नेविगेशन और App Check के एपीआई शुरू करें.
  5. डीबग करने की सुविधा चालू करें. यह सुविधा, डेवलपमेंट या कंटीन्यूअस इंटिग्रेशन (सीआई) एनवायरमेंट में काम की होती है.
  6. एनफ़ोर्समेंट की सुविधा चालू करने से पहले, अपने ऐप्लिकेशन के अनुरोधों को मॉनिटर करें. इससे, App Check को बिना किसी रुकावट के लागू किया जा सकता है और आपके उपयोगकर्ताओं को कोई परेशानी नहीं होती.

App Check को इंटिग्रेट करने की योजना बनाते समय ध्यान रखने वाली बातें

  • पुष्टि करने वाले सोर्स के कोटे: हम पुष्टि करने वाले जिन सोर्स का सुझाव देते हैं वे Apple की ओर से तय किए गए कोटे और सीमाओं के तहत आते हैं. जैसे, DeviceCheck या App Attest.
  • स्टार्टअप में लगने वाला समय: ज़्यादातर मामलों में, आपके उपयोगकर्ताओं को सामान्य इस्तेमाल के दौरान, कोई समस्या नहीं होगी. ऐसा इसलिए, क्योंकि App Check टोकन डिवाइस पर कैश किए जाते हैं. सिस्टम, App Check टोकन को एक्सपायर होने से पहले, बैकग्राउंड में अपने-आप रीफ़्रेश करता है, ताकि परफ़ॉर्मेंस में कोई रुकावट न आए. हालांकि, अगर कोई मान्य App Check टोकन मौजूद नहीं है, तो आपके ऐप्लिकेशन के उपयोगकर्ताओं को स्टार्टअप में कुछ समय लग सकता है. उदाहरण के लिए, यह समस्या तब होती है, जब कैश किया गया टोकन एक्सपायर हो जाता है या मौजूद नहीं होता है.
  • टोकन टीटीएल: टाइम टू लिव (टीटीएल) से यह तय होता है कि App Check टोकन को रीफ़्रेश करने से पहले, वह कितने समय तक मान्य रहेगा. Firebase कंसोल में, इस अवधि को 30 मिनट से लेकर सात दिनों तक कॉन्फ़िगर किया जा सकता है. सुरक्षित बेसलाइन के तौर पर, एक घंटे की अवधि का सुझाव दिया जाता है. हालांकि, एसडीके, टीटीएल की अवधि के लगभग आधे समय पर, बैकग्राउंड में अपने-आप रीफ़्रेश करने की कोशिश करता है. कंसोल के निर्देशों के लिए, Firebase App Check का दस्तावेज़ देखें.

अपने ऐप्लिकेशन को App Check के साथ इंटिग्रेट करना

ज़रूरी शर्तें और आवश्यकताएं

  • ऐसा ऐप्लिकेशन जिसमें iOS के लिए Navigation SDK का 11.0 या उसके बाद का वर्शन इंस्टॉल हो.
  • ऐप्लिकेशन का बंडल आईडी.
  • Apple Developer कंसोल में, सदस्यता टैब से मिला आपका टीम आईडी.
  • अगर आपको DeviceCheck का इस्तेमाल करना है, तो आपकी निजी कुंजी वाली फ़ाइल और कुंजी आईडी.
  • यह ज़रूरी है कि आपके पास Google Cloud कंसोल में, ऐप्लिकेशन का मालिकाना हक हो.
  • Google Cloud कंसोल से मिला, आपके ऐप्लिकेशन का प्रोजेक्ट आईडी.

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

अपने ऐप्लिकेशन में Firebase जोड़ने के लिए, Firebase के डेवलपर दस्तावेज़ में दिए गए निर्देशों का पालन करें. अपनी GoogleService-Info.plist फ़ाइल को, बिना किसी बदलाव के, अपने प्रोजेक्ट के रूट लेवल पर जोड़ें.

अपनी AppDelegate फ़ाइल में, ये मॉड्यूल इंपोर्ट करें:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

@import FirebaseCore;
@import FirebaseAppCheck;
@import GoogleNavigation;

दूसरा चरण: App Check लाइब्रेरी जोड़ना और App Check को शुरू करना

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

  1. App Check लाइब्रेरी जोड़ने के लिए, Firebase के निर्देशों का पालन करें:
  2. अपने AppDelegate में App Check को शुरू करें:
    • अगर App Attest का इस्तेमाल किया जा रहा है, तो AppCheckProviderFactory का कोई लागू करने का तरीका बनाएं और FirebaseApp.configure() को कॉल करने से पहले, उसे रजिस्टर करें:

      Swift

      class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
          func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
              return AppAttestProvider(app: app)
          }
      }
      // In application(_:didFinishLaunchingWithOptions:)
      let providerFactory = YourAppCheckProviderFactory()
      AppCheck.setAppCheckProviderFactory(providerFactory)
      FirebaseApp.configure()

      Objective-C

      #import <FirebaseCore/FirebaseCore.h>
      #import <FirebaseAppCheck/FirebaseAppCheck.h>
      
      @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
      @end
      
      @implementation YourAppCheckProviderFactory
      - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
          return [[FIRAppAttestProvider alloc] initWithApp:app];
      }
      @end
      
      // In application:didFinishLaunchingWithOptions:
      YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];
      [FIRApp configure];
    • अगर इसके बजाय DeviceCheck का इस्तेमाल किया जा रहा है, तो फ़ैक्ट्री को इस तरीके से सेट करें:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];

तीसरा चरण: टोकन देने वाला सोर्स जोड़ना

अपने ऐप्लिकेशन के रूट लेवल पर, AppCheckTokenProvider नाम की कोई फ़ाइल बनाएं. अगर Objective-C का इस्तेमाल किया जा रहा है, तो AppCheckTokenProvider.h और AppCheckTokenProvider.m नाम की दो फ़ाइलें बनाएं.

इस क्लास को GMSAppCheckTokenProvider प्रोटोकॉल के मुताबिक होना चाहिए. साथ ही, इसमें fetchAppCheckTokenWithCompletion तरीका लागू होना चाहिए.

Swift

import Foundation
import FirebaseAppCheck
import GoogleNavigation

class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider {
    func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) {
        AppCheck.appCheck().token(forcingRefresh: false) { token, error in
            if let error = error {
                print("App Check Error: \(error)")
                completion(nil, error)
                return
            }
            guard let token = token else {
                completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"]))
                return
            }
            print("App Check Token: \(token.token)")
            completion(token.token, nil)
        }
    }
}

Objective-C

// AppCheckTokenProvider.h
#import <Foundation/Foundation.h>
#import <GoogleNavigation/GoogleNavigation.h>

NS_ASSUME_NONNULL_BEGIN

@interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider>
@end

NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m
#import "AppCheckTokenProvider.h"
#import <FirebaseAppCheck/FirebaseAppCheck.h>

@implementation AppCheckTokenProvider
- (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion {
    [[FIRAppCheck appCheck] tokenForcingRefresh:NO
                                     completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) {
        if (token) {
            completion(token.token, nil);
        } else {
            completion(nil, error);
        }
    }];
}
@end

चौथा चरण: नेविगेशन और App Check के एपीआई शुरू करना

iOS के लिए Navigation SDK को शुरू करें और GMSServices पर, टोकन देने वाले सोर्स के इंस्टेंस को रजिस्टर करें:

Swift

// In application(_:didFinishLaunchingWithOptions:)
GMSServices.provideAPIKey("YOUR_API_KEY")

// Register your App Check token provider before initializing Navigation SDK for iOS
GMSServices.appCheckTokenProvider = AppCheckTokenProvider()

Objective-C

// In application:didFinishLaunchingWithOptions:
[GMSServices provideAPIKey:@"YOUR_API_KEY"];

// Register your App Check token provider before initializing Navigation SDK for iOS
GMSServices.appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];

पांचवा चरण: डीबग करने की सुविधा चालू करना (ज़रूरी नहीं)

iOS के लिए Navigation SDK पर App Check लागू होने के बाद, आपके ऐप्लिकेशन की वे सुविधाएं सिम्युलेटर या लगातार इंटिग्रेशन (सीआई) एनवायरमेंट में नहीं चलेंगी जो iOS के लिए Navigation SDK पर निर्भर करती हैं. ऐसा इसलिए, क्योंकि इन एनवायरमेंट को मान्य डिवाइस नहीं माना जाता. डेवलपमेंट और टेस्टिंग के दौरान, इन एनवायरमेंट में अपने ऐप्लिकेशन को चलाने के लिए, आपको अपने ऐप्लिकेशन का डीबग के लिए बिल्ड बनाना होगा. इसमें, प्रोडक्शन के लिए पुष्टि करने वाले सोर्स के बजाय, App Check के डीबग प्रोवाइडर का इस्तेमाल किया जाता है.

  1. अपने AppDelegate में, डीबग सोर्स फ़ैक्ट्री को कॉन्फ़िगर करें:

    Swift

    #if targetEnvironment(simulator)
    let providerFactory = AppCheckDebugProviderFactory()
    #else
    let providerFactory = YourAppCheckProviderFactory()
    #endif
    AppCheck.setAppCheckProviderFactory(providerFactory)

    Objective-C

    #if TARGET_OS_SIMULATOR
    id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init];
    #else
    id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init];
    #endif
    [FIRAppCheck setAppCheckProviderFactory:providerFactory];
  2. अपने Xcode प्रोजेक्ट पर लॉगिंग की सुविधा चालू करें, ऐप्लिकेशन लॉन्च करें, और कंसोल लॉग में, स्थानीय डीबग टोकन ढूंढें.
  3. इस डीबग टोकन को कॉपी करें और Firebase कंसोल में जोड़ें. ज़्यादा जानकारी के लिए, Firebase App Check के डीबग सोर्स का दस्तावेज़ देखें.

छठा चरण: अपने ऐप्लिकेशन के अनुरोधों को मॉनिटर करना और एनफ़ोर्समेंट के बारे में फ़ैसला लेना

एनफ़ोर्समेंट की सुविधा चालू करने से पहले, अपने ऐप्लिकेशन के अनुरोधों को मॉनिटर करें, ताकि यह पक्का किया जा सके कि असली उपयोगकर्ताओं को कोई समस्या न हो.

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