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

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

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

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

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

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

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

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

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

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

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

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

पहला चरण: अपने ऐप्लिकेशन में 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 API को शुरू करना

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 टोकन के बिना आने वाले सभी ट्रैफ़िक को अस्वीकार कर देगा.