Sử dụng Kiểm tra ứng dụng để bảo mật SDK Điều hướng cho iOS

Tính năng Kiểm tra ứng dụng của Firebase giúp bảo vệ các lệnh gọi từ ứng dụng của bạn đến Google Maps Platform bằng cách chặn lưu lượng truy cập đến từ các nguồn không phải là ứng dụng hợp pháp của bạn. Ứng dụng này thực hiện việc này bằng cách yêu cầu đánh giá tính xác thực của ứng dụng hoặc thiết bị từ một nhà cung cấp chứng thực như App Attest. Khi tích hợp ứng dụng của bạn với App Check, bạn sẽ thêm lớp bảo vệ chống lại các yêu cầu độc hại và trái phép, từ đó bảo vệ hoạt động thanh toán của bạn khỏi các khoản phí trái phép. Kiểm tra ứng dụng cũng cải thiện đáng kể tính năng báo cáo sự cố theo thời gian thực trong hệ sinh thái ứng dụng đội xe của bạn, nhờ đó mang lại lợi ích cho tất cả những người lái xe sử dụng ứng dụng của bạn. Để biết thêm thông tin, hãy xem phần Báo cáo sự cố.

Tại sao nên dùng Kiểm tra ứng dụng?

Kiểm tra ứng dụng bảo vệ 2 khu vực riêng biệt của Navigation SDK cho iOS: chức năng điều hướng chính và báo cáo gián đoạn.

Kiểm tra ứng dụng giúp chặn các yêu cầu chính của Navigation SDK cho iOS từ các nguồn độc hại hoặc trái phép. Việc này mang lại lợi ích trực tiếp cho bạn bằng cách bảo vệ dự án của bạn khỏi hành vi gian lận trong thanh toán và tình trạng hết hạn mức.

Báo cáo sự gián đoạn

Bạn nên dùng Kiểm tra ứng dụng nếu ứng dụng của bạn hỗ trợ các chức năng báo cáo và bình chọn sự cố theo thời gian thực. Việc bật tính năng Kiểm tra ứng dụng đảm bảo rằng tài xế của bạn được cung cấp các tuyến đường chính xác nhất, có tính đến mọi thông tin phản hồi theo thời gian thực.

Tại sao Kiểm tra ứng dụng lại quan trọng đối với việc báo cáo:

  • Thanh tin cậy cao đối với thông tin đóng đường: Các sự kiện ảnh hưởng đến tuyến đường, chẳng hạn như đường bị đóng, có thể thay đổi đáng kể hành vi định tuyến cho tất cả người lái xe. Để bảo vệ bản đồ khỏi hành vi phá hoại, nội dung rác hoặc báo cáo không chính xác, cơ sở hạ tầng kiểm duyệt của Google đối với thông tin gián đoạn do đường bị đóng dựa vào các tín hiệu mạnh mẽ về tính toàn vẹn của thiết bị và ứng dụng.
  • Cách Kiểm tra ứng dụng xác thực báo cáo: Báo cáo và lượt bình chọn của người dùng được gửi từ Navigation SDK cho iOS bao gồm mã thông báo Kiểm tra ứng dụng. Mã thông báo này được phần phụ trợ của Google dùng để xác thực tính hợp lệ của ý kiến phản hồi, từ đó nâng cao mức độ tin cậy và cho phép đánh giá ý kiến phản hồi về mức độ ảnh hưởng đến bản đồ trực tiếp.
  • Tác động của việc bỏ qua Kiểm tra ứng dụng: Những báo cáo được gửi mà không có mã thông báo Kiểm tra ứng dụng hợp lệ sẽ được đánh giá theo mô hình có độ tin cậy thấp hơn và có thể chỉ được xử lý dưới dạng tín hiệu thầm lặng. Điều này có nghĩa là mặc dù người dùng vẫn có thể báo cáo và bình chọn, nhưng báo cáo của họ ít có khả năng xuất hiện trên bản đồ hoặc ảnh hưởng đến tuyến đường của những người lái xe khác và sẽ cần được xác thực thêm.

Tính năng Kiểm tra ứng dụng có phù hợp với tôi không?

Bạn nên dùng Kiểm tra ứng dụng trong hầu hết các trường hợp; tuy nhiên, bạn không cần hoặc không được hỗ trợ dùng Kiểm tra ứng dụng trong các trường hợp sau:

  • Ứng dụng riêng tư hoặc ứng dụng thử nghiệm: Nếu ứng dụng của bạn không truy cập được công khai, thì bạn không cần dùng Kiểm tra ứng dụng.
  • Thiết bị bị xâm phạm: Các trình cung cấp chứng thực được đề xuất sẽ ngăn Navigation SDK cho iOS chạy trên các thiết bị không đáng tin cậy, chẳng hạn như điện thoại đã bị can thiệp hoặc bẻ khoá. Để hỗ trợ các thiết bị này, hãy triển khai một trình cung cấp chứng thực tuỳ chỉnh.

Tổng quan về các bước triển khai

Nhìn chung, bạn sẽ làm theo các bước sau để tích hợp ứng dụng của mình với Kiểm tra ứng dụng:

  1. Thêm Firebase vào ứng dụng của bạn.
  2. Thêm thư viện Kiểm tra ứng dụng và khởi chạy Kiểm tra ứng dụng.
  3. Thêm một nhà cung cấp mã thông báo. Bước này sẽ gọi trình cung cấp chứng thực mà bạn chọn để xác minh tính toàn vẹn của thiết bị hoặc ứng dụng.
  4. Khởi chạy API Điều hướng và API Kiểm tra ứng dụng.
  5. Bật tính năng gỡ lỗi. Điều này hữu ích trong quá trình phát triển hoặc trong môi trường tích hợp liên tục (CI).
  6. Theo dõi các yêu cầu của ứng dụng trước khi bật chế độ thực thi. Bằng cách này, bạn có thể thực thi Kiểm tra ứng dụng một cách liền mạch mà không làm gián đoạn người dùng.

Những điều cần cân nhắc khi lên kế hoạch tích hợp Kiểm tra ứng dụng

  • Hạn mức của nhà cung cấp chứng thực: Các nhà cung cấp chứng thực mà chúng tôi đề xuất (DeviceCheck hoặc App Attest) phải tuân theo hạn mức và giới hạn do Apple đặt ra.
  • Độ trễ khi khởi động: Trong hầu hết các trường hợp, người dùng sẽ không gặp phải độ trễ trong quá trình sử dụng thông thường, vì mã thông báo Kiểm tra ứng dụng được lưu vào bộ nhớ đệm trên thiết bị. Hệ thống tự động làm mới mã thông báo App Check trong nền trước khi hết hạn để duy trì hiệu suất liền mạch. Tuy nhiên, nếu không có mã thông báo Kiểm tra ứng dụng hợp lệ, người dùng ứng dụng của bạn sẽ gặp phải một số độ trễ khi khởi động. Ví dụ: độ trễ này xảy ra trong quá trình khởi động nguội khi mã thông báo được lưu vào bộ nhớ đệm đã hết hạn hoặc bị thiếu.
  • TTL của mã thông báo: Thời gian tồn tại (TTL) xác định khoảng thời gian mà mã thông báo Kiểm tra ứng dụng có hiệu lực trước khi cần được làm mới. Bạn có thể định cấu hình khoảng thời gian này từ 30 phút đến 7 ngày trong bảng điều khiển của Firebase. Bạn nên đặt thời lượng là 1 giờ làm giá trị cơ sở an toàn, nhưng SDK sẽ tự động cố gắng làm mới trong nền sau khoảng thời gian bằng một nửa thời lượng TTL. Để biết hướng dẫn từng bước về bảng điều khiển, hãy xem tài liệu về Kiểm tra ứng dụng Firebase.

Tích hợp ứng dụng của bạn với Kiểm tra ứng dụng

Điều kiện tiên quyết và yêu cầu

  • Một ứng dụng đã cài đặt Navigation SDK cho iOS phiên bản 11.0 trở lên.
  • Mã nhận dạng gói của ứng dụng.
  • Mã nhóm của bạn trong thẻ Thành viên trong Apple Developer Console.
  • Nếu bạn dự định sử dụng DeviceCheck, hãy dùng tệp khoá riêng tưmã nhận dạng khoá.
  • Bạn phải là chủ sở hữu của ứng dụng trong Google Cloud Console.
  • Mã dự án của ứng dụng trong Cloud Console.

Bước 1: Thêm Firebase vào ứng dụng của bạn

Làm theo hướng dẫn trong tài liệu dành cho nhà phát triển Firebase để thêm Firebase vào ứng dụng của bạn. Thêm tệp GoogleService-Info.plist (chưa sửa đổi) vào cấp gốc của dự án.

Trong tệp AppDelegate, hãy nhập các mô-đun sau:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

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

Bước 2: Thêm thư viện Kiểm tra ứng dụng và khởi động Kiểm tra ứng dụng

Firebase cung cấp hướng dẫn cho từng trình chứng thực mặc định. Các hướng dẫn này cho bạn biết cách thiết lập một dự án Firebase và thêm thư viện Kiểm tra ứng dụng vào ứng dụng của bạn. Hãy làm theo các mã mẫu được cung cấp để khởi động Kiểm tra ứng dụng.

  1. Làm theo hướng dẫn của Firebase để thêm thư viện Kiểm tra ứng dụng:
  2. Chạy tính năng Kiểm tra ứng dụng trong AppDelegate:
    • Nếu bạn đang sử dụng App Attest, hãy tạo một quy trình triển khai AppCheckProviderFactory và đăng ký quy trình đó trước khi gọi 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];
    • Nếu bạn đang sử dụng DeviceCheck, hãy đặt nhà máy bằng cách sử dụng thông tin sau:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];

Bước 3: Thêm trình cung cấp mã thông báo

Tạo một tệp có tên là AppCheckTokenProvider (hoặc nếu bạn đang sử dụng Objective-C, hãy tạo hai tệp có tên là AppCheckTokenProvider.hAppCheckTokenProvider.m) ở cấp gốc của ứng dụng.

Lớp này phải tuân thủ giao thức GMSAppCheckTokenProvider và triển khai phương thức 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

Bước 4: Khởi chạy API Điều hướng và API Kiểm tra ứng dụng

Khởi chạy Navigation SDK cho iOS (bằng cách sử dụng GMSServices) và đăng ký phiên bản trình cung cấp mã thông báo bằng cách truyền tay cầm dịch vụ mờ dùng chung đến 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];

Bước 5: Bật chế độ gỡ lỗi (không bắt buộc)

Sau khi Kiểm tra ứng dụng được thực thi cho Navigation SDK cho iOS, các tính năng của ứng dụng phụ thuộc vào Navigation SDK cho iOS sẽ không chạy trong trình mô phỏng hoặc từ môi trường tích hợp liên tục (CI) vì những môi trường này không đủ điều kiện là thiết bị hợp lệ. Để chạy ứng dụng trong các môi trường này trong quá trình phát triển và kiểm thử, bạn cần tạo một bản gỡ lỗi của ứng dụng sử dụng trình cung cấp gỡ lỗi App Check thay vì trình cung cấp chứng thực sản xuất.

  1. Định cấu hình nhà máy nhà cung cấp dịch vụ gỡ lỗi trong 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. Bật tính năng ghi nhật ký trên dự án Xcode, chạy ứng dụng và tìm mã thông báo gỡ lỗi cục bộ trong nhật ký bảng điều khiển.
  3. Sao chép và thêm mã gỡ lỗi này vào Bảng điều khiển của Firebase. Để biết thêm thông tin chi tiết, hãy tham khảo tài liệu về nhà cung cấp dịch vụ gỡ lỗi Kiểm tra ứng dụng Firebase.

Bước 6: Giám sát các yêu cầu của ứng dụng và quyết định về việc thực thi

Trước khi bật chế độ thực thi, hãy theo dõi các yêu cầu của ứng dụng để đảm bảo rằng bạn sẽ không làm gián đoạn người dùng hợp lệ.

  1. Truy cập vào màn hình chỉ số Kiểm tra ứng dụng trong bảng điều khiển của Firebase để xem tỷ lệ phần trăm lưu lượng truy cập đã xác minh so với lưu lượng truy cập chưa xác minh.
  2. Sau khi bạn chắc chắn rằng phần lớn lưu lượng truy cập của bạn là người dùng hợp pháp đã được xác minh và đã cập nhật lên phiên bản ứng dụng có chứa quy trình triển khai App Check, hãy bật chế độ thực thi.
  3. Sau khi bạn bật chế độ thực thi, Kiểm tra ứng dụng sẽ từ chối tất cả lưu lượng truy cập không có mã thông báo Kiểm tra ứng dụng hợp lệ.