รับรหัสโฆษณาที่ผู้ใช้รีเซ็ตได้ ส่วนหนึ่งของ Android Jetpack
แนวทางปฏิบัติแนะนำสำหรับแอป Android ทั้งหมดคือการทำงานร่วมกับตัวระบุที่ผู้ใช้รีเซ็ตได้เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ ตัวระบุอย่างหนึ่งคือรหัสโฆษณา ซึ่ง ระบุผู้ใช้รายหนึ่งๆ โดยไม่ซ้ำกันสำหรับกรณีการใช้งานโฆษณา เช่น การปรับโฆษณาตามโปรไฟล์ผู้ใช้
คุณสามารถใช้ไลบรารีรหัสโฆษณาเพื่อรองรับโซลูชันการติดตามโฆษณาที่ได้มาตรฐานในอุปกรณ์ที่เรียกใช้แอปของคุณ ไลบรารีนี้พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 4.0 (API ระดับ 14) ขึ้นไป โดยจะกำหนดอินเทอร์เฟซเพื่อโต้ตอบกับผู้ให้บริการโฆษณาระดับระบบ อินเทอร์เฟซนี้ช่วยให้แอปได้รับค่ารหัสโฆษณาที่สอดคล้องกัน
ผู้ให้บริการโฆษณาที่รวมอยู่ในไลบรารีรหัสโฆษณายังกำหนด Intent มาตรฐานสำหรับการเปิดหน้าจอการตั้งค่าที่ผู้ให้บริการโฆษณาใช้ด้วย หน้าจอการตั้งค่านี้ช่วยให้ผู้ใช้รีเซ็ตรหัสโฆษณาและเลือกไม่ใช้ การปรับโฆษณาตามโปรไฟล์ของผู้ใช้ได้
คู่มือนี้อธิบายวิธีใช้โมดูลไคลเอ็นต์ของไลบรารีรหัสโฆษณา เพื่อรับรหัสโฆษณาที่สอดคล้องกันในระดับผู้ใช้ต่ออุปกรณ์ จากนั้นคู่มือนี้ จะแสดงภาพรวมของสถาปัตยกรรมของไลบรารี
กำหนดค่าแอปไคลเอ็นต์
การโต้ตอบกับโมดูลไคลเอ็นต์ของไลบรารีรหัสโฆษณาจะช่วยให้แอปของคุณ เรียกข้อมูลรหัสโฆษณาที่สอดคล้องกันซึ่งแสดงถึงผู้ใช้ที่ โต้ตอบกับแอปได้
รหัสโฆษณาจะแสดงโดยใช้เวอร์ชัน 3 ของรูปแบบตัวระบุที่ไม่ซ้ำกับผู้อื่น (UUID) หรือรูปแบบ 128 บิตที่เทียบเท่า
38400000-8cf0-11bd-b23e-10b96e40000d
ไลบรารีรหัสโฆษณาจะปรับค่าที่แสดงผลตามความจำเป็นเพื่อให้ รหัสโดยใช้รูปแบบนี้
หากต้องการดึงรหัสโฆษณาที่ผู้ใช้รีเซ็ตได้สำหรับแอป ให้ทำตาม ขั้นตอนต่อไปนี้
ตรวจสอบว่ามีผู้ให้บริการโฆษณาหรือไม่โดยโทรไปที่
AdvertisingIdClient.isAdvertisingIdProviderAvailable()หากเมธอดนี้ แสดงผลfalseแอปของคุณต้องใช้วิธีอื่นเพื่อดำเนินการตามกรณีการใช้งานการติดตามโฆษณาที่จำเป็นดูรายละเอียดตัวระบุโฆษณา รวมถึงรหัสโฆษณา โดยเรียกใช้
AdvertisingIdClient.getAdvertisingIdInfo()ไลบรารีรหัสโฆษณา จะเรียกใช้เมธอดนี้ในเธรดของ Worker และใช้การเชื่อมต่อที่หมดเวลา 10 วินาที
ข้อมูลโค้ดต่อไปนี้แสดงวิธีดึงรหัสโฆษณา พร้อมกับข้อมูลอื่นๆ จากผู้ให้บริการโฆษณา
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") }
MyAdIdClient
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.
    }
}
สถาปัตยกรรมไลบรารีรหัสโฆษณา
รูปที่ 1 แสดงโครงสร้างของไลบรารีรหัสโฆษณา ไลบรารีประกอบด้วยโมดูลต่อไปนี้
- โมดูลไคลเอ็นต์ ซึ่งเป็นเลเยอร์บางๆ ที่รวมอยู่ในแอป
 - โมดูลผู้ให้บริการที่ผู้ผลิตอุปกรณ์จัดหาให้ การติดตั้งใช้งานโมดูลนี้ต้องกำหนด UI การตั้งค่าเพื่อให้ผู้ใช้มี ความสามารถในการรีเซ็ตรหัสโฆษณาและสลับค่ากําหนดการติดตามโฆษณา
 
โมดูลไคลเอ็นต์จะสื่อสารกับโมดูลผู้ให้บริการเพื่อดึงข้อมูล Advertising ID และค่ากําหนดของผู้ใช้เกี่ยวกับการติดตามโฆษณา
วิธีที่ห้องสมุดจัดการผู้ให้บริการหลายราย
อุปกรณ์อาจรองรับผู้ให้บริการโฆษณาระดับระบบหลายรายพร้อมกันได้ หากไลบรารีรหัสโฆษณาสังเกตเห็นสถานการณ์นี้ ไลบรารีจะยืนยัน ว่าแอปของคุณจะดึงข้อมูลจากผู้ให้บริการรายเดียวกันเสมอ โดยสมมติว่า ผู้ให้บริการยังคงพร้อมให้บริการ กระบวนการนี้จะช่วยให้รหัสโฆษณา สอดคล้องกัน
หากชุดผู้ให้บริการโฆษณาที่พร้อมใช้งานมีการเปลี่ยนแปลงเมื่อเวลาผ่านไปและแอปของคุณ โต้ตอบกับผู้ให้บริการตัวระบุโฆษณารายอื่น แอปไคลเอ็นต์อื่นๆ ทั้งหมดจะเริ่ม ใช้ผู้ให้บริการรายใหม่นั้นด้วย แอปของคุณแสดงลักษณะการทำงานเดียวกันกับที่ จะเกิดขึ้นหากผู้ใช้ขอรีเซ็ตรหัสโฆษณา
ไลบรารีผู้ให้บริการรหัสโฆษณาจะใช้ลำดับที่แน่นอนต่อไปนี้เพื่อ จัดอันดับผู้ให้บริการ
- ผู้ให้บริการที่ขอสิทธิ์
androidx.ads.identifier.provider.HIGH_PRIORITY - ผู้ให้บริการที่ติดตั้งในอุปกรณ์นานที่สุด
 - ผู้ให้บริการที่ปรากฏเป็นอันดับแรกตามลำดับตัวอักษร