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 का इस्तेमाल किया जा रहा है, तो FirebaseApp.configure() को कॉल करने से पहले, AppCheckProviderFactory को लागू करें और उसे रजिस्टर करें:

      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 को शुरू करना

GMSServices का इस्तेमाल करके, 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
if let services = GMSServices.sharedServices() as? GMSServices {
    services.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 *)[GMSServices sharedServices]).appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];

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

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