iOS-এর জন্য Navigation SDK সুরক্ষিত করতে App Check ব্যবহার করা

Firebase App Check আপনার অ্যাপ থেকে Google Maps Platform-এ করা কলকে সুরক্ষিত রাখে। এটি আপনার বৈধ অ্যাপ ছাড়া অন্য সোর্স থেকে আসা ট্রাফিককে ব্লক করে। এটি করার জন্য App Attest-এর মতো অ্যাটেস্টেশন প্রদানকারীর থেকে অ্যাপ বা ডিভাইসের সত্যতা মূল্যায়ন করার অনুরোধ করা হয়। আপনি যখন অ্যাপ চেকের সাথে আপনার অ্যাপ ইন্টিগ্রেট করেন, তখন আপনি ক্ষতিকর এবং অননুমোদিত অনুরোধের বিরুদ্ধে সুরক্ষা যোগ করেন, যা আপনার বিলিংকে অননুমোদিত চার্জ থেকে রক্ষা করে। এছাড়াও, অ্যাপ চেক আপনার ফ্লিট অ্যাপ ইকোসিস্টেমে রিয়েল-টাইম বিঘ্ন রিপোর্টিং উল্লেখযোগ্যভাবে উন্নত করে, যার ফলে আপনার অ্যাপ ব্যবহারকারী সব ড্রাইভার উপকৃত হন। আরও তথ্যের জন্য, বিঘ্ন রিপোর্টিং দেখুন।

App Check কেন ব্যবহার করবেন?

App Check, iOS-এর জন্য Navigation SDK-এর দুটি আলাদা ক্ষেত্রকে সুরক্ষিত করে: প্রধান নেভিগেশন কার্যকারিতা এবং বিঘ্ন রিপোর্টিং।

অ্যাপ চেক, ক্ষতিকর বা অননুমোদিত সোর্স থেকে iOS-এর জন্য প্রধান Navigation SDK-এর অনুরোধ ব্লক করতে সাহায্য করে। বিলিং জালিয়াতি এবং কোটা শেষ হয়ে যাওয়া থেকে আপনার প্রোজেক্টকে রক্ষা করার মাধ্যমে এটি আপনাকে সরাসরি উপকৃত করে।

বিঘ্ন ঘটার বিষয়ে অভিযোগ জানানো

আপনার অ্যাপে রিয়েল-টাইম বিঘ্ন রিপোর্টিং এবং ভোট দেওয়ার ক্ষমতা থাকলে, অ্যাপ চেক ব্যবহার করার জন্য বিশেষভাবে সাজেস্ট করা হয়। অ্যাপ চেক চালু করলে, আপনার ড্রাইভারদের সব রিয়েল-টাইম ফিডব্যাক বিবেচনা করে সবচেয়ে সঠিক রুট প্রদান করা হয়।

অভিযোগ জানানোর ক্ষেত্রে কেন App Check গুরুত্বপূর্ণ:

  • রাস্তা বন্ধের ক্ষেত্রে উচ্চ বিশ্বাসযোগ্যতার মাপকাঠি: রাস্তা বন্ধের মতো ঘটনা যা রুটের উপর প্রভাব ফেলে, তা সব চালকের রুট সংক্রান্ত আচরণে উল্লেখযোগ্য পরিবর্তন আনতে পারে। সম্ভাব্য ভাঙচুর, স্প্যাম বা ভুল রিপোর্টিং থেকে ম্যাপকে সুরক্ষিত রাখতে, রাস্তা বন্ধ থাকার কারণে বিঘ্ন ঘটার জন্য Google-এর মডারেশন ইনফ্রাস্ট্রাকচার শক্তিশালী ডিভাইস এবং অ্যাপ ইন্টিগ্রিটি সিগন্যালের উপর নির্ভর করে।
  • কীভাবে অ্যাপ চেক রিপোর্ট যাচাই করে: iOS-এর জন্য Navigation SDK থেকে পাঠানো ব্যবহারকারীর রিপোর্ট ও ভোটে অ্যাপ চেক টোকেন থাকে। Google-এর ব্যাকএন্ড এই টোকেন ব্যবহার করে ফিডব্যাকের বৈধতা যাচাই করে। এর ফলে ব্যাকএন্ডের বিশ্বাসযোগ্যতা বাড়ে এবং লাইভ ম্যাপের উপর প্রভাবের জন্য ফিডব্যাক মূল্যায়ন করা যায়।
  • অ্যাপ চেক বাদ দেওয়ার প্রভাব: সঠিক অ্যাপ চেক টোকেন ছাড়া জমা দেওয়া রিপোর্ট কম-বিশ্বস্ত মডেলের অধীনে মূল্যায়ন করা হয় এবং শুধুমাত্র সাইলেন্ট সিগন্যাল হিসেবে প্রসেস করা হতে পারে। এর অর্থ হল, আপনার ব্যবহারকারীরা এখনও রিপোর্ট করতে ও ভোট দিতে পারলেও, তাদের রিপোর্ট ম্যাপে দেখা যাওয়ার সম্ভাবনা কম থাকে বা অন্যান্য ড্রাইভারের রুটকে প্রভাবিত করে না এবং অতিরিক্ত যাচাইকরণের প্রয়োজন হয়।

App Check কি আমার জন্য সঠিক?

বেশিরভাগ ক্ষেত্রে অ্যাপ চেক ব্যবহার করার সাজেশন দেওয়া হয়; তবে, নিম্নলিখিত পরিস্থিতিতে অ্যাপ চেক প্রয়োজন হয় না বা কাজ করে না:

  • ব্যক্তিগত বা পরীক্ষামূলক অ্যাপ: আপনার অ্যাপ সর্বজনীনভাবে অ্যাক্সেস করা না গেলে, অ্যাপ চেক করার প্রয়োজন নেই।
  • সুরক্ষা লঙ্ঘিত ডিভাইস: সাজেস্ট করা অ্যাটেস্টেশন প্রদানকারী, রুট করা বা জেলব্রোকেন ফোনের মতো বিশ্বাসযোগ্য নয় এমন ডিভাইসে iOS-এর জন্য নেভিগেশন SDK চলতে বাধা দেয়। এইসব ডিভাইসকে সাপোর্ট করতে, কাস্টম অ্যাটেস্টেশন প্রদানকারী ডেপ্লয় করুন।

প্রয়োগ করার বিভিন্ন ধাপের ওভারভিউ

উচ্চ স্তরে, আপনার অ্যাপকে App Check-এর সাথে ইন্টিগ্রেট করতে আপনাকে এইসব ধাপ অনুসরণ করতে হবে:

  1. আপনার অ্যাপে Firebase যোগ করুন।
  2. App Check লাইব্রেরি যোগ করুন এবং App Check শুরু করুন।
  3. টোকেন প্রদানকারী যোগ করুন। এই ধাপটি ডিভাইস বা অ্যাপের ইন্টিগ্রিটি যাচাই করার জন্য আপনার পছন্দের অ্যাটেস্টেশন প্রদানকারীকে কল করে।
  4. নেভিগেশন এবং অ্যাপ চেক API শুরু করুন।
  5. ডিবাগিং চালু করুন। এটি ডেভেলপমেন্ট বা একটানা ইন্টিগ্রেশন (CI) এনভায়রনমেন্টের সময় কাজে লাগে।
  6. এনফোর্সমেন্ট চালু করার আগে আপনার অ্যাপের অনুরোধ মনিটর করুন। এইভাবে, আপনি ব্যবহারকারীদের কোনও সমস্যা না করেই নির্বিঘ্নে অ্যাপ চেক এনফোর্স করতে পারবেন।

App Check ইন্টিগ্রেশন প্ল্যান করার সময় বিবেচ্য বিষয়

  • অ্যাটেস্টেশন প্রোভাইডার কোটা: আমরা যেসব অ্যাটেস্টেশন প্রোভাইডার সাজেস্ট করি, যেমন DeviceCheck বা App Attest, সেগুলি Apple-এর সেট করা কোটা ও সীমাবদ্ধতা অনুযায়ী কাজ করে।
  • স্টার্ট-আপ লেটেন্সি: বেশিরভাগ ক্ষেত্রে, আপনার ব্যবহারকারীরা স্বাভাবিক ব্যবহারের সময় লেটেন্সি অনুভব করবেন না, কারণ অ্যাপ চেক টোকেন ডিভাইসে ক্যাশে করা হয়। নির্বিঘ্নে পারফর্ম্যান্স বজায় রাখতে, মেয়াদ শেষ হওয়ার আগেই সিস্টেম ব্যাকগ্রাউন্ডে অটোমেটিক App Check টোকেন রিফ্রেশ করে। তবে, সঠিক App Check টোকেন না থাকলে, আপনার অ্যাপ ব্যবহারকারীরা স্টার্টআপে কিছু লেটেন্সি অনুভব করবেন। যেমন, কোল্ড স্টার্টের সময় এই লেটেন্সি হয় যখন ক্যাশে করা টোকেনের মেয়াদ শেষ হয়ে যায় বা সেটি পাওয়া যায় না।
  • টোকেন TTL: টাইম টু লাইভ (TTL) নির্ধারণ করে যে রিফ্রেশ করার আগে অ্যাপ চেক টোকেন কতক্ষণ বৈধ থাকবে। আপনি Firebase কনসোলে এই সময়সীমা ৩০ মিনিট থেকে ৭ দিন পর্যন্ত কনফিগার করতে পারবেন। নিরাপদ বেসলাইন হিসেবে ১ ঘণ্টা সময়সীমা সাজেস্ট করা হয়, তবে SDK অটোমেটিক TTL সময়সীমার প্রায় অর্ধেক সময়ে ব্যাকগ্রাউন্ড রিফ্রেশ করার চেষ্টা করে। কনসোল সংক্রান্ত ধাপে-ধাপে নির্দেশাবলীর জন্য, Firebase App Check ডকুমেন্টেশন দেখুন।

App Check-এর সাথে আপনার অ্যাপ ইন্টিগ্রেট করা

পূর্বশর্ত ও প্রয়োজনীয়তা

  • iOS ভার্সন ১১.০ বা তার পরবর্তী ভার্সনের জন্য Navigation SDK সহ একটি অ্যাপ ইনস্টল করা আছে।
  • অ্যাপের বান্ডেল আইডি।
  • আপনার Apple Developer Console-এ মেম্বারশিপ ট্যাব থেকে আপনার টিম আইডি।
  • আপনি 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 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-তে অ্যাপ চেক এনফোর্স করার পরে, iOS-এর জন্য Navigation SDK-এর উপর নির্ভর করে এমন আপনার অ্যাপের ফিচার সিমুলেটর বা কন্টিনিউয়াস ইন্টিগ্রেশন (CI) এনভায়রনমেন্টে কাজ করবে না, কারণ এইসব এনভায়রনমেন্ট বৈধ ডিভাইস হিসেবে বিবেচিত হয় না। ডেভেলপমেন্ট ও টেস্টিংয়ের সময় এইসব এনভায়রনমেন্টে আপনার অ্যাপ চালাতে, আপনাকে অ্যাপের একটি ডিবাগ বিল্ড তৈরি করতে হবে যা প্রোডাকশন অ্যাটেস্টেশন প্রোভাইডারের পরিবর্তে 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 অ্যাপ চেক ডিবাগ প্রোভাইডার ডকুমেন্টেশন দেখুন।

ধাপ ৬: আপনার অ্যাপের অনুরোধ মনিটর করুন এবং এনফোর্সমেন্ট সম্পর্কে সিদ্ধান্ত নিন

এনফোর্সমেন্ট চালু করার আগে, আপনার অ্যাপের অনুরোধ মনিটর করুন যাতে আপনি বৈধ ব্যবহারকারীদের বাধা না দেন।

  1. যাচাই করা বনাম যাচাই না করা ট্রাফিকের শতাংশ দেখতে Firebase কনসোলে App Check মেট্রিক্স স্ক্রিনে যান।
  2. আপনার বেশিরভাগ ট্রাফিক যাচাই করা এবং বৈধ ব্যবহারকারীরা আপনার অ্যাপের এমন একটি ভার্সনে আপডেট করেছেন যাতে আপনার অ্যাপ চেক প্রয়োগ করা আছে, এই ব্যাপারে নিশ্চিত হওয়ার পরে এনফোর্সমেন্ট চালু করুন।
  3. এনফোর্সমেন্ট চালু হয়ে গেলে, App Check বৈধ টোকেন না থাকলে সব ট্রাফিক বাতিল করে দেবে।