استفاده از App Check برای ایمن کردن Navigation SDK برای iOS

بررسی برنامه Firebase با مسدود کردن ترافیکی که از منابعی غیراز برنامه‌های قانونی شما می‌آید، از تماس‌های برنامه‌تان با «پلاتفرم Google Maps» محافظت می‌کند. این کار را با درخواست ارزیابی اصالت برنامه یا دستگاه از ارائه‌دهنده گواهی مانند App Attest انجام می‌دهد. وقتی برنامه‌تان را با App Check ادغام می‌کنید، دربرابر درخواست‌های مخرب و غیرمجاز محافظت اضافه می‌کنید که به نوبه خود از صورت‌حساب شما دربرابر کسر هزینه‌های غیرمجاز محافظت می‌کند. «بررسی برنامه» همچنین گزارش اختلالات هم‌زمان را در اکوسیستم برنامه ناوگان شما به‌طور قابل‌توجهی بهبود می‌بخشد و ازاین‌رو به همه رانندگانی که از برنامه شما استفاده می‌کنند سود می‌رساند. برای اطلاعات بیشتر، به گزارش اختلال مراجعه کنید.

چرا از «بررسی برنامه» استفاده کنیم؟

«بررسی برنامه» از دو حوزه متمایز «کیت توسعه نرم‌افزار پیمایش برای iOS» محافظت می‌کند: عملکرد اصلی پیمایش و گزارش اختلال.

«بررسی برنامه» کمک می‌کند درخواست‌های اصلی «کیت توسعه نرم‌افزار پیمایش برای iOS» را از منابع مخرب یا غیرمجاز مسدود کند. این کار با محافظت از پروژه‌تان دربرابر کلاهبرداری صورت‌حسابی و اتمام سهمیه، مستقیماً به شما سود می‌رساند.

گزارش اختلال

اگر برنامه‌تان از قابلیت‌های رأی‌گیری و گزارش اختلال هم‌زمان پشتیبانی می‌کند، «بررسی برنامه» به‌شدت توصیه می‌شود. با فعال کردن App Check، مطمئن می‌شوید که دقیق‌ترین مسیرها با درنظر گرفتن همه بازخوردهای هم‌زمان به رانندگان شما ارائه می‌شود.

چرا App Check برای گزارش‌دهی مهم است:

  • معیار اعتماد بالا برای بستن مسیر: رویدادهای تأثیرگذار بر مسیر، مانند بستن جاده، می‌توانند رفتار مسیریابی را برای همه رانندگان به‌طور قابل‌توجهی تغییر دهند. برای محافظت از نقشه دربرابر خرابکاری احتمالی، هرزنامه، یا گزارش نادرست، زیرساخت تعدیل Google برای اختلالات راه‌بندان به سیگنال‌های قوی تمامیت برنامه و دستگاه متکی است.
  • نحوه اعتبارسنجی گزارش‌ها توسط App Check: گزارش‌ها و رأی‌های کاربر که از Navigation SDK for iOS ارسال می‌شوند شامل کد App Check هستند که توسط پس‌بخش Google برای اعتبارسنجی مشروعیت بازخورد استفاده می‌شود، سطح اعتماد آن را افزایش می‌دهد، و امکان ارزیابی آن را برای تأثیر نقشه زنده فراهم می‌کند.
  • تأثیر حذف App Check: گزارش‌های ارسال‌شده بدون یک توکن معتبر App Check تحت یک مدل با اعتماد پایین‌تر ارزیابی می‌شوند و ممکن است صرفاً به‌عنوان نشان‌های بی‌صدا پردازش شوند. این یعنی اگرچه کاربران شما همچنان می‌توانند گزارش دهند و رأی دهند، احتمال اینکه گزارش‌هایشان در نقشه دیده شود یا بر مسیر رانندگان دیگر تأثیر بگذارد کمتر است و به اعتبارسنجی بیشتری نیاز دارد.

آیا App Check برای من مناسب است؟

«بررسی برنامه» در اکثر موارد توصیه می‌شود؛ بااین‌حال، «بررسی برنامه» در سناریوهای زیر لازم نیست یا پشتیبانی نمی‌شود:

  • برنامه‌های خصوصی یا آزمایشی: اگر برنامه‌تان به‌طور عمومی دردسترس نیست، به «بررسی برنامه» نیازی نیست.
  • دستگاه‌های درمعرض خطر: ارائه‌دهندگان گواهی توصیه‌شده از اجرای Navigation SDK ویژه iOS در دستگاه‌های غیرقابل‌اعتماد، مانند تلفن‌های روت‌شده یا قفل‌شکسته، جلوگیری می‌کنند. برای پشتیبانی از این دستگاه‌ها، ارائه‌دهنده گواهی سفارشی را مستقر کنید.

نمای کلی مراحل پیاده‌سازی

در سطح بالا، برای ادغام کردن برنامه‌تان با App Check، این مراحل را دنبال خواهید کرد:

  1. Firebase را به برنامه‌تان اضافه کنید.
  2. کتابخانه App Check را اضافه کنید و App Check را مقداردهی اولیه کنید.
  3. ارائه‌دهنده کد اضافه کنید. این مرحله ارائه‌دهنده تصدیق انتخابی شما را فراخوانی می‌کند تا یکپارچگی دستگاه یا برنامه را درستی‌سنجی کند.
  4. میاناهای برنامه‌سازی کاربردی Navigation و App Check را مقداردهی اولیه کنید.
  5. اشکال‌زدایی را فعال کنید. این کار درطول توسعه یا در محیط‌های ادغام مداوم (CI) مفید است.
  6. قبل‌از فعال کردن اجرا، درخواست‌های برنامه‌تان را پایش کنید. به‌این‌ترتیب، «بررسی برنامه» را بدون ایجاد اختلال برای کاربران به‌طور یکپارچه اجرا می‌کنید.

ملاحظات هنگام برنامه‌ریزی برای ادغام App Check

  • سهمیه‌های ارائه‌دهنده گواهی: ارائه‌دهندگان گواهی که توصیه می‌کنیم، یعنی DeviceCheck یا App Attest، مشمول سهمیه‌ها و محدودیت‌های تعیین‌شده توسط Apple هستند.
  • تأخیر راه‌اندازی: در اکثر شرایط، کاربران شما درطول استفاده عادی با تأخیر مواجه نخواهند شد، زیرا کدهای App Check در دستگاه ذخیره می‌شوند. سیستم به‌طور خودکار کدهای App Check را در پس‌زمینه قبل‌از انقضا بازآوری می‌کند تا عملکرد یکپارچه حفظ شود. بااین‌حال، اگر یک کد معتبر App Check وجود نداشته باشد، کاربران برنامه شما در هنگام راه‌اندازی با کمی تأخیر مواجه خواهند شد. برای مثال، این تأخیر درطول شروع‌های سرد زمانی که یک کد ذخیره‌شده منقضی یا گم شده است رخ می‌دهد.
  • زمان بقای (TTL) کد: زمان بقا (TTL) مدت زمانی را تعیین می‌کند که کد App Check قبل‌از نیاز به بازآوری معتبر است. می‌توانید این مدت را از ۳۰ دقیقه تا ۷ روز در کنسول Firebase پیکربندی کنید. مدت ۱ ساعت به‌عنوان خط مبنای امن توصیه می‌شود، اما کیت توسعه نرم‌افزار به‌طور خودکار تلاش می‌کند بازآوری پس‌زمینه را تقریباً در نصف مدت TTL انجام دهد. برای دستورالعمل‌های گام‌به‌گام کنسول، سند Firebase App Check را ببینید.

یکپارچه کردن برنامه با «بررسی برنامه»

پیش‌نیازها و الزامات

  • برنامه‌ای که «کیت توسعه نرم‌افزار پیمایش» برای iOS نسخه ۱۱.۰ یا بالاتر در آن نصب شده باشد.
  • شناسه دسته نرم‌افزاری برنامه.
  • «شناسه تیم» شما از برگه «عضویت» در کنسول Apple Developer.
  • اگر قصد دارید از DeviceCheck استفاده کنید، فایل کلید خصوصی و شناسه کلید شما.
  • باید مالک برنامه در کنسول Google Cloud باشید.
  • شناسه پروژه برنامه شما از کنسول Google Cloud.

مرحله ۱: افزودن Firebase به برنامه

دستورالعمل‌های موجود در مستندات توسعه‌دهنده Firebase را برای افزودن Firebase به برنامه‌تان دنبال کنید. فایل GoogleService-Info.plist خود را بدون تغییر به سطح ریشه پروژه‌تان اضافه کنید.

در فایل AppDelegate، واحدهای زیر را وارد کنید:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

آبجکتیو-سی

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

مرحله ۲: افزودن کتابخانه App Check و مقداردهی اولیه App Check

‫Firebase دستورالعمل‌هایی برای هر ارائه‌دهنده گواهی پیش‌فرض ارائه می‌دهد. این دستورالعمل‌ها به شما نشان می‌دهند که چگونه یک پروژه Firebase راه‌اندازی کنید و کتابخانه App Check را به برنامه خود اضافه کنید. نمونه کدهای ارائه‌شده را برای مقداردهی اولیه App Check دنبال کنید.

  1. برای افزودن کتابخانه «بررسی برنامه»، دستورالعمل‌های 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()

      آبجکتیو-سی

      #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())

      آبجکتیو-سی

      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)
        }
    }
}

آبجکتیو-سی

// 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 APIs

کیت توسعه نرم‌افزار ناوبری برای iOS را مقداردهی اولیه کنید و نمونه ارائه‌دهنده کدتان را در 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()

آبجکتیو-سی

// 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، ویژگی‌های برنامه‌تان که به «کیت توسعه نرم‌افزار پیمایش» ویژه iOS وابسته است در شبیه‌ساز یا از محیط ادغام مداوم (CI) اجرا نخواهد شد زیرا این محیط‌ها به‌عنوان دستگاه‌های معتبر واجدشرایط نیستند. برای اجرای برنامه‌تان در این محیط‌ها درطول توسعه و آزمایش، باید نسخه ساخت اشکال‌زدایی از برنامه‌تان ایجاد کنید که به‌جای ارائه‌دهنده گواهی تولید، از ارائه‌دهنده اشکال‌زدایی App Check استفاده کند.

  1. کارخانه ارائه‌دهنده اشکال‌زدایی را در AppDelegate پیکربندی کنید:

    Swift

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

    آبجکتیو-سی

    #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 بروید.
  2. وقتی مطمئن شدید که اکثر ترافیک شما درستی‌سنجی شده است و کاربران قانونی به نسخه‌ای از برنامه‌تان که حاوی پیاده‌سازی App Check است به‌روزرسانی کرده‌اند، اجرای اجباری را فعال کنید.
  3. وقتی اجرای خط‌مشی روشن باشد، «بررسی برنامه» همه ترافیک بدون کد «بررسی برنامه» معتبر را رد خواهد کرد.