Nhận mã nhận dạng cho quảng cáo mà người dùng có thể đặt lại Một phần của Android Jetpack.

Để bảo vệ quyền riêng tư của người dùng, tất cả ứng dụng Android là phương pháp hay nhất để xử lý giá trị nhận dạng mà người dùng đặt lại được. Một trong những giá trị nhận dạng như vậy là mã nhận dạng cho quảng cáo. Mã này giúp nhận dạng duy nhất một người dùng cụ thể cho các trường hợp sử dụng quảng cáo, chẳng hạn như cá nhân hoá quảng cáo.

Để hỗ trợ giải pháp theo dõi quảng cáo chuẩn trên các thiết bị chạy ứng dụng, bạn có thể sử dụng thư viện mã nhận dạng cho quảng cáo. Thư viện này có sẵn trên các thiết bị chạy Android 4.0 (API cấp 14) trở lên, xác định một giao diện để tương tác với nhà cung cấp quảng cáo ở cấp hệ thống. Giao diện này cho phép ứng dụng nhận được các giá trị mã nhận dạng nhất quán cho quảng cáo.

Nhà cung cấp quảng cáo có trong thư viện Mã nhận dạng cho quảng cáo cũng xác định ý định chuẩn để mở màn hình cài đặt mà nhà cung cấp quảng cáo triển khai. Màn hình cài đặt này cho phép người dùng đặt lại mã nhận dạng cho quảng cáo và chọn không sử dụng chế độ cá nhân hoá quảng cáo.

Hướng dẫn này giải thích cách sử dụng mô-đun ứng dụng của thư viện mã nhận dạng cho quảng cáo để lấy mã nhận dạng cho quảng cáo nhất quán trên cơ sở từng người dùng thiết bị. Sau đó, hướng dẫn này sẽ trình bày thông tin tổng quan về cấu trúc của thư viện.

Định cấu hình ứng dụng

Bằng cách tương tác với mô-đun ứng dụng của thư viện Mã nhận dạng cho quảng cáo, ứng dụng của bạn có thể truy xuất một mã nhận dạng cho quảng cáo nhất quán đại diện cho người dùng đang tương tác với ứng dụng.

Mã nhận dạng cho quảng cáo được biểu thị bằng phiên bản 3 của định dạng giá trị nhận dạng duy nhất trên toàn cầu (UUID) hoặc định dạng 128 bit tương đương:

38400000-8cf0-11bd-b23e-10b96e40000d

Thư viện mã nhận dạng cho quảng cáo chuẩn hoá giá trị trả về khi cần thiết để cung cấp các mã nhận dạng sử dụng định dạng này.

Để truy xuất mã nhận dạng cho quảng cáo mà người dùng có thể đặt lại cho ứng dụng, hãy hoàn tất các bước sau:

  1. Kiểm tra xem có nhà cung cấp quảng cáo nào không bằng cách gọi AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Nếu phương thức này trả về false, ứng dụng của bạn sẽ sử dụng một phương thức khác để thực hiện mọi trường hợp sử dụng theo dõi quảng cáo bắt buộc.

  2. Lấy thông tin chi tiết về giá trị nhận dạng quảng cáo, bao gồm cả mã nhận dạng cho quảng cáo, bằng cách gọi AdvertisingIdClient.getAdvertisingIdInfo(). Thư viện Mã nhận dạng cho quảng cáo thực thi phương thức này trên một luồng worker và sử dụng thời gian chờ kết nối là 10 giây.

Đoạn mã sau đây minh hoạ cách truy xuất mã nhận dạng cho quảng cáo cùng với các thông tin khác từ nhà cung cấp quảng cáo:

app/build.gradle

Groovy

dependencies {
    implementation 'androidx.ads:ads-identifier:1.0.0-alpha01'

    // Used for the calls to addCallback() in the snippets on this page.
    implementation 'com.google.guava:guava:28.0-android'
}

Kotlin

dependencies {
    implementation("androidx.ads:ads-identifier:1.0.0-alpha01")

    // Used for the calls to addCallback() in the snippets on this page.
    implementation("com.google.guava:guava:28.0-android")
}

Mã khách hàng của tôi

Kotlin

// Used for the call to addCallback() within this snippet.
import com.google.common.util.concurrent.Futures.addCallback

private fun determineAdvertisingInfo() {
    if (AdvertisingIdClient.isAdvertisingIdProviderAvailable()) {
        val advertisingIdInfoListenableFuture =
                AdvertisingIdClient.getAdvertisingIdInfo(applicationContext)

        addCallback(advertisingIdInfoListenableFuture,
                object : FutureCallback<AdvertisingIdInfo> {
            override fun onSuccess(adInfo: AdvertisingIdInfo?) {
                val id: String = adInfo?.id
                val providerPackageName: String = adInfo?.providerPackageName
                val isLimitTrackingEnabled: Boolean =
                                adInfo?.isLimitTrackingEnabled
            }

            // Any exceptions thrown by getAdvertisingIdInfo()
            // cause this method to be called.
            override fun onFailure(t: Throwable) {
                Log.e("MY_APP_TAG",
                        "Failed to connect to Advertising ID provider.")
                // Try to connect to the Advertising ID provider again or fall
                // back to an ad solution that doesn't require using the
                // Advertising ID library.
            }
        }, Executors.newSingleThreadExecutor())
    } else {
        // The Advertising ID client library is unavailable. Use a different
        // library to perform any required ad use cases.
    }
}

Java

// Used for the call to addCallback() within this snippet.
import com.google.common.util.concurrent.Futures;

private void determineAdvertisingInfo() {
    if (AdvertisingIdClient.isAdvertisingIdProviderAvailable()) {
        ListenableFuture<AdvertisingIdInfo> advertisingIdInfoListenableFuture =
                AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
        Futures.addCallback(advertisingIdInfoListenableFuture,
                new FutureCallback<AdvertisingIdInfo>() {
                    @Override
                    public void onSuccess(AdvertisingIdInfo adInfo) {
                        String id = adInfo.getId();
                        String providerPackageName =
                                adInfo.getProviderPackageName();
                        boolean isLimitTrackingEnabled =
                                adInfo.isLimitTrackingEnabled();

                    // Any exceptions thrown by getAdvertisingIdInfo()
                    // cause this method to be called.
                    @Override
                    public void onFailure(Throwable throwable) {
                        Log.e("MY_APP_TAG",
                                "Failed to connect to Advertising ID provider.");
                        // Try to connect to the Advertising ID provider again
                        // or fall back to an ad solution that doesn't require
                        // using the Advertising ID library.
                    }
                });
    } else {
        // The Advertising ID client library is unavailable. Use a different
        // library to perform any required ad use cases.
    }
}

Cấu trúc thư viện mã nhận dạng cho quảng cáo

Sơ đồ cấu trúc
Hình 1. Cấu trúc thư viện mã nhận dạng cho quảng cáo

Hình 1 mô tả cấu trúc của thư viện mã nhận dạng cho quảng cáo. Thư viện này bao gồm các mô-đun sau:

  • Mô-đun ứng dụng, là một lớp mỏng có trong ứng dụng.
  • Một mô-đun nhà cung cấp mà nhà sản xuất thiết bị cung cấp. Việc triển khai mô-đun này phải xác định giao diện người dùng cài đặt để cho phép người dùng có thể đặt lại mã nhận dạng cho quảng cáo và bật/tắt các lựa chọn ưu tiên về tính năng theo dõi quảng cáo.

Mô-đun ứng dụng giao tiếp với mô-đun nhà cung cấp để truy xuất mã nhận dạng cho quảng cáo và các lựa chọn ưu tiên của người dùng liên quan đến tính năng theo dõi quảng cáo.

Cách thư viện xử lý nhiều nhà cung cấp

Một thiết bị có thể hỗ trợ nhiều nhà cung cấp quảng cáo cấp hệ thống cùng một lúc. Nếu thư viện mã nhận dạng cho quảng cáo phát hiện được trường hợp này, thư viện sẽ đảm bảo rằng ứng dụng của bạn luôn truy xuất thông tin từ cùng một nhà cung cấp, giả sử rằng nhà cung cấp đó vẫn có sẵn. Quy trình này sẽ giúp mã nhận dạng cho quảng cáo nhất quán.

Nếu tập hợp các nhà cung cấp quảng cáo có sẵn thay đổi theo thời gian và ứng dụng của bạn tương tác với một nhà cung cấp giá trị nhận dạng quảng cáo khác, thì tất cả các ứng dụng khách khác cũng sẽ bắt đầu sử dụng nhà cung cấp mới đó. Ứng dụng của bạn minh hoạ hành vi tương tự sẽ xảy ra nếu người dùng đã yêu cầu đặt lại mã nhận dạng cho quảng cáo của họ.

Thư viện nhà cung cấp mã nhận dạng cho quảng cáo sử dụng thứ tự xác định sau đây để xếp hạng các nhà cung cấp:

  1. Các nhà cung cấp đã yêu cầu quyền androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Những nhà cung cấp dịch vụ được cài đặt trên thiết bị trong thời gian dài nhất.
  3. Nhà cung cấp xuất hiện đầu tiên theo thứ tự bảng chữ cái.