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