Sử dụng tính năng Kiểm tra ứng dụng để bảo mật Navigation SDK cho iOS

Kiểm tra ứng dụng 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 lệ của bạn. Tính nă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 với tính năng Kiểm tra ứng dụng, bạn sẽ tăng cường khả năng bảo vệ trước các yêu cầu trái phép và độc hại, từ đó bảo vệ hoá đơn của bạn khỏi các khoản phí trái phép. Tính năng Kiểm tra ứng dụng cũng cải thiện đáng kể tính năng báo cáo sự gián đoạn 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ả tài xế sử dụng ứng dụng của bạn. Để biết thêm thông tin, hãy xem bài viết Báo cáo sự gián đoạn.

Tại sao nên sử dụng tính năng Kiểm tra ứng dụng?

Tính nă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à tính năng báo cáo sự gián đoạn.

Tính năng 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. Điều 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 lừa đảo qua giao dịch 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 sử dụng tính năng Kiểm tra ứng dụng nếu ứng dụng của bạn hỗ trợ tính năng báo cáo và bình chọn sự gián đoạn theo thời gian thực. Việc bật tính năng Kiểm tra ứng dụng sẽ đảm bảo 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 ý kiến phản hồi theo thời gian thực.

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

  • Mức độ tin cậy cao đối với việc đó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ả tài xế. Để bảo vệ bản đồ khỏi hành vi phá hoại, tin nhắn 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 các sự 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à tính toàn vẹn của ứng dụng.
  • Cách tính năng 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. Phần phụ trợ của Google sử dụng mã thông báo này để xác thực tính hợp lệ của ý kiến phản hồi, nâng cao mức độ tin cậy và cho phép đánh giá tác động của ý kiến phản hồi đó đối với bản đồ trực tiếp.
  • Tác động của việc bỏ qua tính năng Kiểm tra ứng dụng: Các 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 ẩn. Đ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 các tài xế 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 sử dụng tính nă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ợ tính nă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 được cung cấp công khai, thì bạn không cần tính năng Kiểm tra ứng dụng.
  • Thiết bị bị xâm phạm: Các 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 đã root hoặc jailbreak. Để hỗ trợ các thiết bị này, hãy triển khai một nhà cung cấp chứng thực tuỳ chỉnh.

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

Ở cấp độ cao, bạn sẽ làm theo các bước sau để tích hợp ứng dụng với tính năng 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 động tính năng Kiểm tra ứng dụng.
  3. Thêm nhà cung cấp mã thông báo. Bước này sẽ gọi 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 động API Điều hướng và Kiểm tra ứng dụng.
  5. Bật tính năng gỡ lỗi. Tính năng 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 tính năng thực thi. Bằng cách này, bạn có thể thực thi tính năng 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 tính năng 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 sẽ tự động làm mới mã thông báo Kiểm tra ứng dụng 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 hợp lệ 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 cơ sở an toàn, nhưng SDK sẽ tự động thử làm mới trong nền với thời lượng khoả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ề tính năng Kiểm tra ứng dụng của Firebase.

Tích hợp ứng dụng với tính năng 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 trên thẻ Thành viên trong bảng điều khiển của Nhà phát triển Apple.
  • Nếu bạn dự định sử dụng DeviceCheck, hãy cung cấp tệp khoá riêng tư và mã khoá.
  • Bạn phải là chủ sở hữu của ứng dụng trong Cloud Console của Google.
  • Mã dự án của ứng dụng trong Cloud Console của Google.

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 (không 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 tính năng Kiểm tra ứng dụng

Firebase cung cấp hướng dẫn cho từng nhà cung cấp chứng thực mặc định. Các hướng dẫn này cho biết cách thiết lập dự án Firebase và thêm thư viện Kiểm tra ứng dụng vào ứng dụng của bạn. Làm theo các mã mẫu được cung cấp để khởi động tính nă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 cách triển khai AppCheckProviderFactory và đăng ký cách triển khai đó 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 nội dung sau:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

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

Bước 3: Thêm 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 2 tệp có tên là AppCheckTokenProvider.h và AppCheckTokenProvider.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 động API Điều hướng và Kiểm tra ứng dụng

Khởi động Navigation SDK cho iOS và đăng ký thực thể nhà cung cấp mã thông báo trên 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];

Bước 5: Bật tính năng gỡ lỗi (không bắt buộc)

Sau khi tính năng 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 trong môi trường tích hợp liên tục (CI) vì các 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 bản dựng gỡ lỗi của ứng dụng sử dụng nhà cung cấp gỡ lỗi Kiểm tra ứng dụng thay vì 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ã thông báo 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 gỡ lỗi Kiểm tra ứng dụng của Firebase.

Bước 6: Theo dõi 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 tính năng 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ệ lưu lượng truy cập đã xác minh so với 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 đã được xác minh và người dùng hợp lệ đã cập nhật lên phiên bản ứng dụng có triển khai tính năng Kiểm tra ứng dụng, hãy bật tính năng thực thi.
  3. Sau khi bật tính năng thực thi, tính năng 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ệ.