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 की ज़रूरत नहीं है.
  • जोखिम वाले डिवाइस: अटेस्टेशन की सेवा देने वाली सुझाई गई कंपनियां, iOS के लिए Navigation SDK को ऐसे डिवाइसों पर चलने से रोकती हैं जिन पर भरोसा नहीं किया जा सकता. जैसे, रूट किए गए या जेलब्रेक किए गए फ़ोन. इन डिवाइसों पर पुष्टि की सुविधा इस्तेमाल करने के लिए, पुष्टि करने की सुविधा देने वाली कस्टम कंपनी को डिप्लॉय करें.

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

अपने ऐप्लिकेशन को 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

चौथा चरण: Navigation और 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 टोकन नहीं है.