การเปลี่ยนแปลงรหัสโฆษณา: วิธีดึงข้อมูล Google GAID ใน Android 13 ขึ้นไป?

opoinstall
2026-08-24
5 min read

GAID คืออะไรและจะดึงข้อมูลด้วยโปรแกรมได้อย่างไร? Google Advertising ID (GAID) คือรหัสซอฟต์แวร์ที่ผู้ใช้สามารถรีเซ็ตได้ ซึ่งให้บริการโดย Google Play services สำหรับการวัดผลโฆษณา โดยจะดึงข้อมูลผ่านโปรแกรมนอกเธรดหลักด้วย AdvertisingIdClient API หลังจากตรวจสอบให้แน่ใจว่าไฟล์ manifest ของแอปที่ผสานกันมีสิทธิ์ AD_ID เมื่อจำเป็น

Google Advertising ID (GAID) หรือที่รู้จักกันในชื่อ Android Advertising ID (AAID) คือสตริงที่ไม่ซ้ำกันซึ่งผู้ใช้สามารถรีเซ็ตได้ โดยให้บริการโดย Google Play services สำหรับการระบุแหล่งที่มาของโฆษณา การกำหนดเป้าหมายโฆษณาเฉพาะบุคคล และการวิเคราะห์บนอุปกรณ์ Android แอปที่กำหนดเป้าหมาย Android 13 (API ระดับ 33) ขึ้นไปจะต้องตรวจสอบให้แน่ใจว่าไฟล์ manifest ที่ผสานแล้วมีสิทธิ์ com.google.android.gms.permission.AD_ID เมื่อเข้าถึงรหัสโฆษณาของ Google Play services มิฉะนั้น API จะส่งค่าเป็นศูนย์ทั้งหมดกลับมา

คำศัพท์ คำนิยาม
GAID Google Advertising ID ที่ให้บริการโดย Google Play services สำหรับการวัดผลโฆษณา
AdvertisingIdClient API ของ Google Play services ที่ใช้ในการคิวรีข้อมูลเมตาของรหัสโฆษณา
สิทธิ์ AD_ID สิทธิ์ในไฟล์ Android manifest ที่จำเป็นสำหรับแอปที่กำหนดเป้าหมาย API ระดับ 33 ขึ้นไปเมื่อเข้าถึงรหัสโฆษณาของ Google Play services
รหัสที่เป็นค่าศูนย์ ค่าเซนติเนลที่เป็นศูนย์ทั้งหมด (00000000-0000-0000-0000-000000000000) ที่ส่งคืนเมื่อรหัสโฆษณาไม่พร้อมใช้งานหรือไม่ถูกเปิดเผย

GAID คืออะไรและ Google Advertising ID ทำงานอย่างไร

โครงสร้างทางเทคนิคของรหัสโฆษณา

Google Advertising ID (GAID) จะถูกส่งกลับโดย Google Play services เป็นสตริงรหัสทึบแสง ซึ่งมักจะอยู่ในรูปแบบ UUID แบบเลขฐานสิบหกตัวพิมพ์เล็ก 128 บิต (เช่น 38400000-8cf0-11bd-b23e-10b96e4ef00d) แอปพลิเคชันควรปฏิบัติกับสตริงที่ส่งคืนเสมือนเป็นรหัสทึบแสง แทนที่จะอนุมานลอจิกทางธุรกิจจากรูปแบบของมัน

ต่างจากรหัสระดับฮาร์ดแวร์ GAID ถูกออกแบบมาพร้อมกับการควบคุมความเป็นส่วนตัวที่ชัดเจน:

  • ผู้ใช้สามารถรีเซ็ตได้: ผู้ใช้สามารถสร้างรหัสสุ่มใหม่ได้ตลอดเวลาผ่านการตั้งค่าอุปกรณ์
  • ผู้ใช้สามารถลบได้: เริ่มตั้งแต่ Android 12 เป็นต้นมา ผู้ใช้สามารถลบรหัสโฆษณาของตนได้ ซึ่งเป็นการสั่งให้ Google Play services ระงับการส่งรหัสโฆษณาไปยังแอปทั้งหมด
  • ขอบเขตอุปกรณ์ต่อโปรไฟล์: โดยทั่วไปแล้วรหัสโฆษณาจะใช้งานได้ทั่วทั้งแอปสำหรับโปรไฟล์ผู้ใช้เดียวกันบนอุปกรณ์ แต่โปรไฟล์ผู้ใช้หรือแขก Android ที่แตกต่างกันบนอุปกรณ์ทางกายภาพเครื่องเดียวกันจะได้รับรหัสโฆษณาที่แตกต่างกัน

บทบาทของ Google Play Services ในการจัดการสถานะของรหัส

GAID ไม่ได้เป็นส่วนหนึ่งของเฟรมเวิร์ก Android แบบโอเพนซอร์สหลัก แต่เป็นบริการระดับแอปพลิเคชันที่จัดการและให้บริการแบบไดนามิกโดยไลบรารีไคลเอ็นต์ Google Play services ที่เป็นกรรมสิทธิ์ (com.google.android.gms:play-services-ads-identifier)

เมื่อแอปพลิเคชันเรียกใช้ Google Play services ไคลเอ็นต์จะทำการสื่อสารแบบบล็อกกิ้งกับ Google Play services เพื่อดึงรหัสโฆษณาปัจจุบันและการตั้งค่าจำกัดการติดตามโฆษณาของผู้ใช้

เหตุใด GAID จึงเข้ามาแทนที่รหัสฮาร์ดแวร์

ในรุ่น Android ยุคแรกๆ เครือข่ายโฆษณาและนักพัฒนาจะติดตามเหตุการณ์การแปลงโดยใช้รหัสฮาร์ดแวร์ที่ไม่สามารถรีเซ็ตได้:

  • International Mobile Equipment Identity (IMEI): ผูกติดกับฮาร์ดแวร์เซลลูลาร์ของอุปกรณ์
  • Media Access Control (MAC) Address: ผูกติดกับฮาร์ดแวร์อินเทอร์เฟซเครือข่าย
  • ANDROID_ID (SSAID): บน Android 8.0+ รุ่นใหม่ รหัสนี้จะมีขอบเขตต่อการผสมผสานระหว่างคีย์การเซ็นชื่อแอป ผู้ใช้ และอุปกรณ์ แทนที่จะทำหน้าที่เป็นคีย์โฆษณาข้ามแอปสากล

สำหรับกรณีการใช้งานด้านโฆษณาบน Google Play นักพัฒนาต้องใช้รหัสโฆษณาเมื่อใช้งานได้ แทนที่จะใช้รหัสอุปกรณ์ถาวรตัวอื่นมาแทนที่

ดูเพิ่มเติม: GAID ──> สถาปัตยกรรมระบุแหล่งที่มาบนมือถือ

ข้อกำหนดสิทธิ์ของ Android 13: การประกาศ Manifest ของ AD_ID

โมเดลการบังคับใช้ระดับ API 33

เริ่มต้นด้วย Android 13 (API ระดับ 33) ทาง Google ได้introduced สิทธิ์ com.google.android.gms.permission.AD_ID:

  • Target SDK 33 ขึ้นไป: แอปพลิเคชันที่กำหนดเป้าหมาย Android 13 หรือสูงกว่าจะต้องประกาศสิทธิ์ AD_ID ในไฟล์ manifest หากละเว้นสิทธิ์นี้ Google Play services จะส่งคืนสตริงที่เป็นศูนย์ (00000000-0000-0000-0000-000000000000)
  • Target SDK 32 ลงมา: ไม่จำเป็นต้องมีสิทธิ์ AD_ID ในไฟล์ manifest อย่างไรก็ตาม รหัสโฆษณายังคงอาจไม่พร้อมใช้งานหรือเป็นศูนย์เนื่องจากการตั้งค่าความเป็นส่วนตัวของรหัสโฆษณาของผู้ใช้ รวมถึงสถานะการจำกัดการติดตามโฆษณาหรือการลบ
  • การประกาศนโยบาย Play Store: เมื่อส่งการอัปเดตที่กำหนดเป้าหมาย API ระดับ 33+ นักพัฒนาจะต้องกรอกการประกาศรหัสโฆษณาปัจจุบันใน Google Play Console ให้เสร็จสิ้น โดยรายงานอย่างถูกต้องว่าแอปใช้รหัสนี้หรือไม่และอย่างไร

Android 13 การดึงข้อมูล GAID และโฟลว์รหัสที่เป็นศูนย์

การกำหนดค่า AndroidManifest.xml และการพึ่งพา Gradle

หากต้องการประกาศสิทธิ์ ให้ใส่แท็ก <uses-permission> ไว้ภายใน AndroidManifest.xml ในไฟล์ build.gradle ของโมดูลแอปของคุณ ให้เพิ่มการพึ่งพา play-services-ads-identifier อย่างเป็นทางการ

การกำหนดค่าด้านล่างแสดงไวยากรณ์สิทธิ์ของ manifest และการตั้งค่าการพึ่งพา Gradle:

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- จำเป็นต้องใช้บน API 33+ เพื่อเข้าถึง GAID ที่ไม่ใช่ศูนย์ -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyApp">
        <!-- ส่วนประกอบของแอปพลิเคชัน -->
    </application>
</manifest>
// ตำแหน่ง: app/build.gradle
// หมายเหตุ: แสดงเวอร์ชันการพึ่งพาตัวอย่าง โปรดตรวจสอบรุ่นเสถียรปัจจุบันในที่เก็บข้อมูลอย่างเป็นทางการก่อนนำไปใช้งานจริง

dependencies {
    // ไลบรารี Ads Identifier อย่างเป็นทางการของ Google Play services
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'

    // Kotlin Coroutines สำหรับการทำงานแบบอะซิงโครนัสนอกเธรดหลัก
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}

ทำความเข้าใจกับการผสาน Manifest: การฉีด SDK ทางอ้อม

เมื่อสร้าง APK ของ Android หรือ Android App Bundle (AAB) ระบบบิลด์ Gradle จะผสานไฟล์ manifest จากไลบรารีของบุคคลที่สามที่นำเข้าทั้งหมดเข้าเป็นไฟล์ AndroidManifest.xml หลักไฟล์เดียว

หาก SDK ของเครือข่ายโฆษณา เครื่องมือวิเคราะห์ หรือไลบรารีระบุแหล่งที่มาที่นำเข้าประกาศ com.google.android.gms.permission.AD_ID ไว้ใน manifest ภายใน สิทธิ์นั้นจะถูกผสานเข้ากับการสร้างบิลด์หลักของคุณโดยอัตโนมัติ นักพัฒนาสามารถตรวจสอบ app/build/outputs/logs/manifest-merger-release-report.txt เพื่อตรวจสอบว่าการพึ่งพาใดเป็นตัวนำสิทธิ์ดังกล่าวเข้ามา

การดึงข้อมูลด้วยโปรแกรม: การดึง GAID ผ่าน AdvertisingIdClient ใน Kotlin

กฎข้อบังคับในการ执行นอกเธรดหลัก (Main-Thread Execution Rule)

การเรียกใช้ AdvertisingIdClient.getAdvertisingIdInfo(context) จะเป็นการเริ่มต้นการเรียกใช้งานแบบซิงโครนัสไปยัง Google Play services โดย Google ห้ามมิให้ดำเนินการเมธอดนี้บนเธรดหลัก (UI) อย่างเด็ดขาด

การเรียก getAdvertisingIdInfo() บนเธรดหลักจะทำให้เกิดข้อยกเว้น IllegalStateException ทันที:

java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock

เพื่อป้องกันข้อผิดพลาด ANR (Application Not Responding) และการแครชขณะรันไทม์ของแอปพลิเคชัน นักพัฒนาจะต้องส่งคำสั่งการดึงข้อมูลภายในตัวทำงานเบื้องหลัง (Background Worker) หรือ Kotlin Coroutine โดยใช้ Dispatchers.IO

การดึงข้อมูล GAID ของ AdvertisingIdClient นอกเธรดหลัก

การใช้งานแท็กงานเบื้องหลังโดยใช้ Kotlin Coroutines

การใช้งาน Kotlin ด้านล่างนี้แสดง AdvertisingIdManager ที่มีความปลอดภัยของเธรด ซึ่งดำเนินการดึงข้อมูลนอกเธรดหลัก จัดการข้อยกเว้นความพร้อมใช้งานของ Google Play services และตรวจสอบความสมบูรณ์ของรหัส:

package com.example.myapp.analytics

import android.content.Context
import android.util.Log
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.android.gms.common.GooglePlayServicesNotAvailableException
import com.google.android.gms.common.GooglePlayServicesRepairableException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.IOException

data class GaidResult(
    val gaid: String?,
    val isLimitAdTrackingEnabled: Boolean,
    val isZeroed: Boolean,
    val isAvailable: Boolean
)

object AdvertisingIdManager {

    private const val TAG = "AdvertisingIdManager"
    private const val ZEROED_GAID = "00000000-0000-0000-0000-000000000000"

    /**
     * ดึงข้อมูล Google Advertising ID นอกเธรดการทำงานหลักผ่านโปรแกรม
     * จัดการข้อยกเว้น สถานะค่าศูนย์ และการเลือกไม่รับของผู้ใช้โดยอัตโนมัติ
     */
    suspend fun fetchGaid(context: Context): GaidResult = withContext(Dispatchers.IO) {
        try {
            // เรียกใช้งาน IPC ของ Google Play services แบบบล็อกกิ้งบน IO coroutine dispatcher
            val adInfo: AdvertisingIdClient.Info = AdvertisingIdClient.getAdvertisingIdInfo(context)
            
            val rawId = adInfo.id
            val isLAT = adInfo.isLimitAdTrackingEnabled
            val isZeroed = rawId == null || rawId.equals(ZEROED_GAID, ignoreCase = true)

            if (isZeroed) {
                Log.w(TAG, "รหัสโฆษณาไม่พร้อมใช้งานหรือเป็นค่าศูนย์")
                GaidResult(
                    gaid = null,
                    isLimitAdTrackingEnabled = isLAT,
                    isZeroed = true,
                    isAvailable = false
                )
            } else {
                Log.d(TAG, "ดึงข้อมูลรหัสโฆษณาสำเร็จ เปิดใช้งาน LAT: $isLAT")
                GaidResult(
                    gaid = rawId,
                    isLimitAdTrackingEnabled = isLAT,
                    isZeroed = false,
                    isAvailable = true
                )
            }
        } catch (e: GooglePlayServicesNotAvailableException) {
            Log.e(TAG, "ไม่ได้ติดตั้ง Google Play services หรือไม่พร้อมใช้งานบนอุปกรณ์นี้", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: GooglePlayServicesRepairableException) {
            Log.w(TAG, "Google Play services จำเป็นต้องมีการอัปเดตหรือการกู้คืนโดยผู้ใช้", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: IOException) {
            Log.e(TAG, "เกิดข้อผิดพลาดในการสื่อสารขณะเชื่อมต่อกับ Google Play services", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: IllegalStateException) {
            Log.e(TAG, "สถานะไม่ถูกต้องขณะดึงข้อมูลรหัสโฆษณา", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: Exception) {
            Log.e(TAG, "เกิดข้อผิดพลาดที่ไม่คาดคิดขณะดึงข้อมูล Google Advertising ID", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        }
    }
}

การวิเคราะห์ AdvertisingIdClient.Info และการจัดการการจำกัดการติดตามโฆษณา

เมธอด AdvertisingIdClient.getAdvertisingIdInfo() จะส่งคืนออบเจ็กต์ AdvertisingIdClient.Info ซึ่งประกอบด้วยคุณสมบัติสำคัญสองประการ:

  • getId() (String): สตริงตัวอักษรและตัวเลขที่แทนรหัสโฆษณา
  • isLimitAdTrackingEnabled() (Boolean): เมื่อเปิดใช้งานการจำกัดการติดตามโฆษณา นโยบายของ Google Play จะห้ามไม่ให้ใช้ข้อมูลรหัสโฆษณาเพื่อสร้างโปรไฟล์โฆษณาหรือกำหนดเป้าหมายโฆษณาเฉพาะบุคคล แต่นโยบายยังคงอนุญาตกิจกรรมต่างๆ เช่น โฆษณาตามบริบท การจำกัดความถี่ การติดตามการแปลง การรายงาน และการตรวจจับความปลอดภัย/การฉ้อโกง อย่างไรก็ตาม บน Google Play services ปัจจุบัน ตัวรหัสโฆษณาเองจะถูกตั้งค่าเป็นศูนย์เมื่อเปิดใช้งานการตั้งค่านี้ ดังนั้นแอปพลิเคชันจึงไม่ควรคิดว่า GAID ที่ใช้งานได้จะยังคงมีอยู่

การจัดการรหัสที่เป็นค่าศูนย์และสถานะการลบโดยผู้ใช้

สตริง 00000000-0000-0000-0000-000000000000: ปรากฏขึ้นเมื่อใดและเพราะเหตุใด

ในสภาพแวดล้อมการใช้งานจริง AdvertisingIdClient.Info.getId() จะส่งคืนค่า 00000000-0000-0000-0000-000000000000 เมื่อ:

  1. ผู้ใช้ลบรหัสโฆษณา: ผู้ใช้เข้าไปที่การตั้งค่าอุปกรณ์และทำการลบรหัสโฆษณาของตน
  2. เปิดใช้งานการจำกัดการติดตามโฆษณา: ผู้ใช้เปิดใช้งานการจำกัดการติดตามโฆษณาบนเวอร์ชัน OS ที่รองรับ
  3. สิทธิ์ Manifest หายไป: แอปพลิเคชันกำหนดเป้าหมาย Android 13+ (API ระดับ 33+) และไม่สามารถประกาศ com.google.android.gms.permission.AD_ID ในไฟล์ manifest ที่ผสานแล้ว

การจัดการรหัส GAID ที่เป็นศูนย์และสถานะความเป็นส่วนตัว

เวิร์กโฟลว์การตั้งค่าผู้ใช้: การลบรหัสโฆษณา

ผู้ใช้บน Android รุ่นปัจจุบันสามารถลบรหัสของตนได้โดยไปที่:

การตั้งค่า > ความเป็นส่วนตัว > โฆษณา > ลบรหัสโฆษณา (ป้ายกำกับที่แน่นอนอาจแตกต่างกันไปตาม OEM ของอุปกรณ์)

เมื่อถูกลบ Google Play services จะล้างค่าพื้นฐานนั้นทิ้ง คำขอ API ครั้งต่อๆ ไปในแอปทั้งหมดที่ติดตั้งไว้จะส่งคืนสตริงที่เป็นศูนย์

ข้อกำหนดนโยบาย Google Play สำหรับสถานะการรีเซ็ตและการลบ

อ้างอิงตาม นโยบายสำหรับนักพัฒนาซอฟต์แวร์ของ Google Play เกี่ยวกับรหัสโฆษณา นักพัฒนาต้องจัดการกับการดำเนินการด้านความเป็นส่วนตัวของผู้ใช้ตามกฎที่กำหนดไว้:

  • ข้อกำหนดการรีเซ็ต: เมื่อผู้ใช้รีเซ็ตรหัสโฆษณาของตน นักพัฒนาจะต้องไม่เชื่อมโยงรหัสโฆษณาใหม่เข้ากับรหัสโฆษณาเดิมหรือข้อมูลที่ได้มาจากรหัสนั้นโดยปราศจากความยินยอมที่ชัดเจนจากผู้ใช้
  • ข้อกำหนดการลบ: เมื่อผู้ใช้ลบรหัสโฆษณาของตน นักพัฒนาจะต้องไม่เชื่อมต่ออุปกรณ์นั้นกับข้อมูลที่ลิงก์หรือได้มาจากรหัสโฆษณาเดิมของมัน

การทำความสะอาดข้อมูลอินพุตของรหัสในไปป์ไลน์การนำเข้าข้อมูลปลายทาง

เอนจิ้นการระบุแหล่งที่มาส่วนหลังต้องใช้งานฟิลเตอร์ตรวจสอบความถูกต้องเพื่อป้องกันไม่ให้สตริงที่เป็นศูนย์สร้างความเสียหายให้กับฐานข้อมูลการระบุแหล่งที่มา:

fun isGaidValid(gaid: String?): Boolean {
    if (gaid.isNullOrBlank()) return false
    val zeroedGaid = "00000000-0000-0000-0000-000000000000"
    return !gaid.equals(zeroedGaid, ignoreCase = true)
}

หากตรวจพบรหัสที่เป็นค่าศูนย์ ระบบปลายทางจะต้องไม่ปฏิบัติกับมันเสมือนเป็น GAID ที่ใช้งานได้หรือคีย์สำหรับจับคู่รหัส การประมวลผลการระบุแหล่งที่มาหรือการวิเคราะห์ใดๆ ควรอ้างอิงจากสัญญาณอื่นๆ ที่ได้รับอนุญาตอย่างอิสระเท่านั้น

นโยบายครอบครัวของ Google Play และข้อจำกัดด้านหมวดหมู่แอป

แนวปฏิบัติด้านข้อมูลในแอปสำหรับครอบครัว

Google Play บังคับใช้กฎการคุ้มครองข้อมูลที่เข้มงวดสำหรับแอปพลิเคชันที่เข้าร่วมโครงการ Families หรือกำหนดเป้าหมายไปที่เด็กๆ:

  • ข้อห้ามในการส่งต่อ AAID: แอปพลิเคชันที่กำหนดเป้าหมายไปที่เด็กโดยเฉพาะจะต้องไม่ส่งต่อรหัสโฆษณา (AAID) สำหรับแอปที่กำหนดเป้าหมาย API ระดับ 33 ขึ้นไป Google แนะนำให้ละเว้นหรือปิดใช้งานสิทธิ์ AD_ID เพื่อเป็นกลไกการปฏิบัติตามข้อกำหนดที่ง่ายดาย
  • การจัดการกลุ่มเป้าหมายแบบผสม: แอปพลิเคชันที่กำหนดเป้าหมายทั้งเด็กและผู้ชมที่มีอายุมากกว่าจะต้องไม่ส่งต่อ AAID จากเด็กหรือผู้ใช้ที่ไม่ทราบอายุ โดยค่าเริ่มต้น แอปและ SDK ควรหลีกเลี่ยงการส่งต่อ AAID จนกว่าการยืนยันอายุจะยืนยันได้ว่าผู้ใช้ไม่ใช่เด็ก

การใช้ tools:node=“remove” ใน Manifest

หากแอปพลิเคชันของคุณกำหนดเป้าหมายเด็ก แต่ SDK ของบุคคลที่สามที่นำเข้าเข้ามาทำการฉีดสิทธิ์ AD_ID โดยอัตโนมัติผ่านการผสานไฟล์ manifest ให้เพิ่มแอตทริบิวต์ tools:node="remove" ในไฟล์ AndroidManifest.xml หลักของคุณ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.familyapp">

    <!-- ลบ AD_ID ที่ถูกฉีดเข้ามาโดยการพึ่งพาทางอ้อมอย่างชัดเจน -->
    <uses-permission 
        android:name="com.google.android.gms.permission.AD_ID" 
        tools:node="remove"/>

</manifest>

ทางเลือกในการวัดผลเฉพาะกรณีการใช้งานเมื่อ GAID ไม่พร้อมใช้งาน

เมื่อ GAID เป็นค่าศูนย์ ถูกลบ หรือถูกจำกัดด้วยนโยบาย ทีมวิศวกรรมจะปรับใช้ทางเลือกเฉพาะกรณีการใช้งานตามวัตถุประสงค์การทำงานของตน:

  • การระบุแหล่งที่มาของแคมเปญ: ใช้ Google Play Install Referrer API เพื่อดึงพารามิเตอร์แคมเปญที่จัดการโดยสโตร์ซึ่งส่งผ่าน URL ของ Play Store (referrer=...) โดยทำงานเป็นอิสระจากการลบ GAID
  • การเริ่มต้นใช้งานและความตั้งใจของผู้ใช้: ใช้การกำหนดเส้นทางพารามิเตอร์ตามบริบทของฝ่ายแรกเพื่อกู้คืนโทเค็นการแนะนำ โค้ดโปรโมชัน และปลายทางลิงก์เชิงลึกที่ส่งมาจากหน้า Landing Page ของเว็บ
  • การวิเคราะห์และการฉ้อโกงที่มีขอบเขตสำหรับนักพัฒนา: ใช้ App Set ID (AppSetIdClient) เพื่อสร้างรหัสที่ใช้ร่วมกันในแอปต่างๆ ที่เผยแพร่ภายใต้บัญชีนักพัฒนาเดียวกัน โดยไม่ต้องมีการติดตามโฆษณาข้ามแอป
                    GAID ไม่พร้อมใช้งานหรือเป็นค่าศูนย์
                                 │
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
   แคมเปญที่มีค่าใช้จ่าย           การเริ่มต้นใช้งาน &      การวิเคราะห์ & การฉ้อโกง
   การระบุแหล่งที่มา            ความตั้งใจในการแนะนำ         ที่เป็นของนักพัฒนา
         │                       │                       │
         ▼                       ▼                       ▼
    Google Play             First-Party             App Set ID
  Install Referrer          Contextual              (กำหนดขอบเขตโดย
     (Store URL)             Routing                นักพัฒนาหรือแอป)

ทางเลือก GAID สำหรับการเริ่มต้นใช้งานการระบุแหล่งที่มาและการวิเคราะห์

ตารางเปรียบเทียบ: GAID เทียบกับ Install Referrer เทียบกับ App Set ID

มิติข้อมูล Google Advertising ID (GAID) Google Play Install Referrer App Set ID (AppSet)
ประเภทของรหัส UUID โฆษณาข้ามแอปที่รีเซ็ตได้ สตริงพารามิเตอร์แคมเปญที่จัดการโดยสโตร์ รหัสที่มีขอบเขตระดับนักพัฒนาหรือแอป ขึ้นอยู่กับการติดตั้งและบริบทของ Play services
สิทธิ์ Manifest com.google.android.gms.permission.AD_ID ไม่มี ไม่มี
ผลกระทบจากการลbโดยผู้ใช้ ส่งคืนสตริงที่เป็นศูนย์ เป็นอิสระจากการลบ GAID อาจรีเซ็ตหลังจากผ่านไป 13 เดือนโดยไม่มีการเข้าถึง API เมื่อแอปสุดท้ายในชุดถูกถอนการติดตั้ง หรือหลังจากการรีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน
กรณีการใช้งานหลัก การระบุแหล่งที่มาของโฆษณาข้ามแอปและการทำรีทาร์เก็ตing การติดตามประสิทธิภาพแคมเปญบน Play Store การตรวจจับการฉ้อโกงและการวิเคราะห์ที่เป็นของนักพัฒนา
ความเหมาะสมกับนโยบาย Families ต้องไม่ถูกส่งต่อจากเด็ก ไม่อยู่ภายใต้ข้อห้ามในการส่งต่อเฉพาะ AAID; การใช้งานยังคงต้องปฏิบัติตามนโยบาย Families ที่เกี่ยวข้อง ได้รับการสนับสนุนจาก Google สำหรับการวิเคราะห์ในแอปสำหรับครอบครัว

คำถามที่พบบ่อย (FAQ)

เหตุใดการเรียก AdvertisingIdClient จึงเกิดข้อผิดพลาด IllegalStateException?
AdvertisingIdClient.getAdvertisingIdInfo(context) ดำเนินการสื่อสารแบบบล็อกกิ้งกับ Google Play services โดย Google ห้ามมิให้เรียกใช้เมธอดนี้บนเธรดการทำงานหลักอย่างเด็ดขาด นักพัฒนาจะต้องเรียกใช้ภายในเธรดเบื้องหลังหรือ Kotlin Coroutine โดยใช้ `Dispatchers.IO`
จะเกิดอะไรขึ้นหากแอปกำหนดเป้าหมาย Android 13 และไม่ได้ประกาศสิทธิ์ AD_ID?
หากแอปกำหนดเป้าหมาย API ระดับ 33 ขึ้นไปและไม่ได้ประกาศสิทธิ์ `com.google.android.gms.permission.AD_ID` ในไฟล์ manifest ที่ผสานแล้ว API ของ Google Play services จะส่งคืนค่า `00000000-0000-0000-0000-000000000000` โดยอัตโนมัติแทนที่จะเป็นรหัสโฆษณาจริง
ฉันจะลบสิทธิ์ AD_ID ที่ถูกฉีดเข้ามาโดยการพึ่งพา SDK ของบุคคลที่สามได้อย่างไร?
หากไลบรารีของบุคคลที่สามทำการฉีดสิทธิ์ `AD_ID` โดยอัตโนมัติผ่านการผสานไฟล์ manifest และแอปของคุณต้องปฏิบัติตามนโยบาย Google Play Families ให้เพิ่ม `<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>` ลงในไฟล์ `AndroidManifest.xml` หลักของคุณ

บทสรุปและกรอบการตัดสินใจ

Google Advertising ID ยังคงเป็นรหัสที่สามารถรีเซ็ตได้ซึ่งมีความสำคัญสำหรับกรณีการใช้งานด้านโฆษณาบน Android และการวิเคราะห์ผู้ใช้ แต่การทำงานบน Android 13+ จำเป็นต้องปฏิบัติตามนโยบายสิทธิ์ของ manifest มาตรฐานการทำงานเบื้องหลัง และการจัดการสถานะรหัสที่เป็นศูนย์อย่างราบรื่น เมื่อ GAID ไม่พร้อมใช้งาน ทีมวิศวกรรมควรเลือกใช้เครื่องมือวัดผลตามกรณีการใช้งานเฉพาะ เช่น Install Referrer สำหรับการระบุแหล่งที่มาของแคมเปญบน Play Store, พารามิเตอร์บริบทของฝ่ายแรกสำหรับสถานะการเริ่มต้นใช้งาน, หรือ App Set ID สำหรับสถานการณ์การวิเคราะห์และการป้องกันการฉ้อโกงที่เป็นของนักพัฒนา

หากต้องการสำรวจรูปแบบการใช้งานสำหรับการระบุแหล่งที่มาบน Android และไปป์ไลน์ลิงก์เชิงลึก โปรดตรวจสอบ เอกสารประกอบของ OpoInstall

เอกสารที่เกี่ยวข้อง

  • แนวคิด: วงจรชีวิตของ Advertising ID, สิทธิ์ Manifest ของ AD_ID, การดึงข้อมูลผ่านเธรดเบื้องหลัง, การจัดการรหัสที่เป็นศูนย์

  • เทคโนโลยี: Google Play Services, AdvertisingIdClient API, Google Play Install Referrer API, OpoInstall Android SDK

  • มาตรฐาน: นโยบายสำหรับนักพัฒนาของ Google Play, การเปลี่ยนแปลงพฤติกรรมของ Android 13, มาตรฐาน IETF RFC 4122 UUID

  • API และคลาส: AdvertisingIdClient, AdvertisingIdClient.Info, AppSetIdClient, OpoInstall Context API

เอกสารประกอบอย่างเป็นทางการ

Share this article

Keep Discovering

Microsoft เปิดตัว MAI-Transcribe-2 รองรับ 60 ภาษา: นักพัฒนาจะได้ประโยชน์อะไร?

Microsoft เปิดตัว MAI-Transcribe-2 รองรับ 60 ภาษา: นักพัฒนาจะได้ประโยชน์อะไร?

Microsoft เปิดตัว MAI-Transcribe-2 ด้วยค่า WER 5.2% ครอบคลุม 60 ภาษา ในราคาเพียง 10 เซนต์ต่อชั่วโมง ค้นพบข้อมูลการทดสอบประสิทธิภาพ ราคา และการผสานรวม API

Tesla เปิดตัว Cybercab ในออสติน? ทำความเข้าใจกลไกการรับส่งผู้โดยสาร

Tesla เปิดตัว Cybercab ในออสติน? ทำความเข้าใจกลไกการรับส่งผู้โดยสาร

Tesla เริ่มใช้งาน Cybercab ในออสติน ค้นพบวิธีที่โรโบแท็กซี่ไร้พวงมาลัยจัดการการเรียกใช้บริการผ่านโทรศัพท์ การเข้าถึงตัวรถ และประสบการณ์การใช้งานภายในห้องโดยสาร

วิธีที่ Referral Loop ช่วยเพิ่มการรักษาฐานผู้ใช้ (Retention) และสร้างความภักดีในระยะยาว

วิธีที่ Referral Loop ช่วยเพิ่มการรักษาฐานผู้ใช้ (Retention) และสร้างความภักดีในระยะยาว

เรียนรู้วิธีที่ Referral Loop ช่วยเพิ่มการรักษาฐานผู้ใช้มือถือ การสร้างแบบจำลองค่า K-factor แบบไวรัลร่วมกับอัตราการลดลงของกลุ่มผู้ใช้ (Cohort Decay) และการกำจัดอุปสรรคในการกรอกรหัสเชิญในวันที่ 0 ด้วยการส่งผ่านพารามิเตอร์