استفاده از «بررسی برنامه» برای ایمن کردن «کیت توسعه نرم‌افزار ناوبری» برای iOS

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

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

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

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

گزارش کردن اختلال

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

چرا «بررسی برنامه» برای گزارش‌دهی مهم است:

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

آیا «بررسی برنامه» برای من مناسب است؟

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

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

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

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

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

ملاحظات هنگام برنامه‌ریزی برای یکپارچه‌سازی «بررسی برنامه»

  • سهمیه‌های ارائه‌دهنده گواهی: ارائه‌دهندگان گواهی که توصیه می‌کنیم، DeviceCheck یا App Attest، مشمول سهمیه‌ها و محدودیت‌های تعیین‌شده توسط Apple هستند.
  • تأخیر راه‌اندازی: در اکثر شرایط، کاربران شما درطول استفاده عادی با تأخیر مواجه نخواهند شد، زیرا کدهای App Check در دستگاه ذخیره می‌شوند. سیستم به‌طور خودکار توکن‌های «بررسی برنامه» را در پس‌زمینه قبل‌از انقضا بازآوری می‌کند تا عملکرد یکپارچه حفظ شود. بااین‌حال، اگر یک کد App Check معتبر وجود نداشته باشد، کاربران برنامه شما در هنگام راه‌اندازی با کمی تأخیر مواجه خواهند شد. برای مثال، این تأخیر درطول راه‌اندازی سرد زمانی رخ می‌دهد که یک توکن ذخیره‌شده در حافظه پنهان منقضی شده یا وجود نداشته باشد.
  • زمان بقای کد: زمان بقا (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 راه‌اندازی کنید و کتابخانه «بررسی برنامه» را به برنامه‌تان اضافه کنید. برای مقداردهی اولیه «بررسی برنامه»، نمونه کدهای ارائه‌شده را دنبال کنید.

  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 API و App Check API

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

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