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