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

Kiểm tra ứng dụng Firebase 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. Để làm việc này, ứng dụng sẽ yêu cầu một nhà cung cấp dịch vụ chứng thực (chẳng hạn như Play Integrity) đánh giá tính xác thực của ứng dụng hoặc thiết bị. Khi tích hợp ứng dụng với Kiểm tra ứng dụng, bạn sẽ thêm biện phá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ệ thông tin thanh toá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ể báo cáo gián đoạn theo thời gian thực trong hệ sinh thái ứng dụng của đội xe, 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 phần Báo cáo gián đoạn.

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

Kiểm tra ứng dụng bảo vệ hai khu vực riêng biệt của SDK Điều hướng cho Android: 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 SDK Điều hướng cho Android từ các nguồn độc hại hoặc trái phép. Điều này trực tiếp mang lại lợi ích 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ỏ phiếu về 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 đảm bảo tài xế của bạn được cung cấp tuyến đường chính xác nhất, có tính đến tất cả ý kiến phản hồi theo thời gian thực.

Lý do Kiểm tra ứng dụng quan trọng đối với việc báo cáo:

  • Ngưỡng tin cậy cao đối với việc đường bị đóng: Các sự kiện ảnh hưởng đến tuyến đường, chẳng hạn như đường bị đóng, có thể làm thay đổi đáng kể hành vi định tuyến của 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 các sự cố đóng đườ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à phiếu bầu của người dùng được gửi từ SDK Điều hướng cho Android 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 sử dụng để xác thực tính hợp pháp 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 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 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 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 dùng tính năng Kiểm tra ứng dụng.
  • Thiết bị bị xâm phạm: Các nhà cung cấp dịch vụ chứng thực được đề xuất sẽ ngăn SDK điều hướng cho Android 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 vào hệ thống hoặc bẻ khoá. Để hỗ trợ các thiết bị này, hãy triển khai một nhà cung cấp dịch vụ chứng thực tuỳ chỉnh.
  • Thiết bị Android không có GMS: Thiết bị Android phải chạy Các dịch vụ của Google dành cho thiết bị di động (GMS) để sử dụng Play Integrity. Nếu bạn dự định hỗ trợ các thiết bị Android không phải GMS, hãy triển khai một nhà cung cấp dịch vụ 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 nhà cung cấp mã thông báo. Bước này gọi nhà cung cấp dịch vụ 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 rất 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 dịch vụ chứng thực: Nhà cung cấp dịch vụ chứng thực mà chúng tôi đề xuất, Play Integrity, có giới hạn số lệnh gọi hằng ngày cho cấp sử dụng API tiêu chuẩn. Để biết thêm thông tin về giới hạn lệnh gọi, hãy xem trang Thiết lập trong tài liệu dành cho nhà phát triển về Google Play Integrity.
  • Độ 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 Kiểm tra ứng dụng ở chế độ 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 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 thời lượng 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 một nửa thời lượng TTL. Để xem 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 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 SDK Điều hướng cho Android phiên bản 7.9 trở lên.
  • Dấu vân tay chứng chỉ SHA-256 của ứng dụng.
  • Tên gói của ứng dụng.
  • 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 Google 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 google-services.json vào thư mục cấp ứng dụng của dự án.

Bước 2: Thêm thư viện Kiểm tra ứng dụng và khởi chạy tính năng Kiểm tra ứng dụng

Thêm phần phụ thuộc Kiểm tra ứng dụng vào tệp build.gradle của ứng dụng:

Groovy (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

Khởi động tính năng Kiểm tra ứng dụng trong lớp Ứng dụng hoặc hoạt động chính:

Java

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

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

Tạo một phương thức triển khai giao diện MapsAppCheckTokenProvider. Nhà cung cấp này tìm nạp mã thông báo Kiểm tra ứng dụng một cách không đồng bộ từ tính năng Kiểm tra ứng dụng Firebase và chuyển các mã thông báo đó đến bộ phần cứng và phần mềm mạng của SDK Điều hướng cho Android bằng cách sử dụng MapsAppCheckTokenCallback:

Java

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

Kotlin

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

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

Khởi động SDK điều hướng cho Android và đăng ký thực thể của nhà cung cấp mã thông báo hợp nhất bằng MapsApiSettings.setAppCheckTokenProvider():

Java

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

Kotlin

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

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

Sau khi Kiểm tra ứng dụng được thực thi cho SDK điều hướng cho Android, các tính năng của ứng dụng phụ thuộc vào SDK điều hướng cho Android 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à thử nghiệm, bạn cần tạo một bản gỡ lỗi của ứng dụng sử dụng nhà cung cấp dịch vụ gỡ lỗi Kiểm tra ứng dụng thay vì nhà cung cấp dịch vụ chứng thực chính thức.

  1. Thêm phần phụ thuộc của nhà cung cấp dịch vụ gỡ lỗi vào tệp build.gradle của ứng dụng:

    Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. Định cấu hình Kiểm tra ứng dụng để sử dụng nhà máy của nhà cung cấp dịch vụ gỡ lỗi trong bản gỡ lỗi:

    Java

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    Kotlin

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. Chạy ứng dụng trên trình mô phỏng hoặc thiết bị gỡ lỗi. Kiểm tra ứng dụng sẽ in mã gỡ lỗi cục bộ vào kết quả logcat.
  4. Sao chép và đăng ký mã thông báo gỡ lỗi này trong Bảng điều khiển của Firebase. Để biết thêm thông tin, 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: Theo dõi các yêu cầu của ứng dụng và quyết định biện pháp 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 pháp.

  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 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 pháp đã cập nhật lên phiên bản ứng dụng có chứa phương thức triển khai Kiểm tra ứng dụng, 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ệ.