GAID和AAID — 是什么、如何工作以及在Android中请求

作者: IT Sectr 发布日期: 2026-05-22 阅读时间: 8 分钟

GAID(Google Advertising ID)和AAID(Android Advertising ID)——是Android设备的唯一广告标识符,用于安装归因和广告个性化。GAID是带有Google Play Services设备的官方名称,AAID是所有Android设备的通用术语,包括没有Google服务的版本。根据Google Developer Documentation, 2025,获取GAID需要连接Google Play服务。AdvertisingIdClient——在Android上获取广告标识符的主要API。

要点

  • GAID — Google Advertising ID,带有Google Play Services设备的广告标识符。
  • AAID — Android Advertising ID,所有Android设备广告标识符的通用名称。
  • AdvertisingIdClient — 用于在Android上获取GAID的Google Play Services主要类。
  • opt-out — 禁止基于标识符进行广告个性化的用户设置。
  • Android 14+ — 已经收紧了应用程序访问广告标识符规则的OS版本。

什么是GAID和AAID?

GAID(Google Advertising ID)——是分配给每个安装了Google Play Services的Android设备的唯一标识符。它用于广告目的:安装归因、活动效果衡量和个性化广告展示。AAID(Android Advertising ID)——更广泛的术语,涵盖所有Android设备上的广告标识符,包括带有HMS的华为设备、Amazon Fire和没有Google服务的AOSP版本。

GAID与iOS上IDFA的主要区别——GAID无需明确的权限请求即可使用,但从Android 14开始,应用程序必须在其manifest中声明使用广告标识符,并根据Google Play隐私政策获取用户同意。Google不需要系统对话框(如iOS上的ATT),但开发人员必须遵守用户同意规则。

根据Google Play Console Statistics (2025),超过95%的活跃Android设备通过Google Play Services支持GAID。在没有Google服务的设备上(中国市场、华为AppGallery),使用来自相应应用商店的AAID或替代标识符,如为中国制造商提供的OAID(Open Anonymous ID)。

GAID相对于IDFA的关键优势——无需系统对话框即可获取标识符。然而,Google不断提高要求:从Android 14开始,targeting API 34及以上的应用程序必须在manifest中明确指定AD_ID权限。

Android广告标识符如何工作

在Android上,广告标识符的获取通过Google Play Services和AdvertisingIdClient类实现。与iOS不同,IDFA需要明确的ATT对话框,GAID默认情况下对应用程序可用,除非用户在设备设置中关闭了广告个性化。

AdvertisingIdClient API

来自com.google.android.gms.ads.identifier包的AdvertisingIdClient类提供两个主要方法:getAdvertisingIdInfo(上下文)和start(上下文)。该方法返回一个AdvertisingIdInfo对象,包含标识符(UUID字符串)和isLimitAdTrackingEnabled标志,该标志指示用户是否已关闭广告个性化。

AdvertisingIdClient调用必须在后台线程中执行,因为该方法访问远程的Google Play服务。建议使用协程或AsyncTask来异步获取标识符。如果设备上Google Play Services不可用,该方法抛出GooglePlayServicesNotAvailableException异常——在这种情况下,开发人员必须使用替代识别方法。

重置和限制

用户可以随时通过设置 — Google — 广告 — 重置广告标识符来重置GAID。重置后,应用程序将获得新的标识符,与之前数据的关联将丢失。用户还可以启用"关闭广告个性化"选项,该选项将isLimitAdTrackingEnabled标志更改为true。

开发人员必须尊重isLimitAdTrackingEnabled标志:如果为true,应用程序不得使用GAID进行广告个性化,但可以将其用于有限目的,如转化衡量、反欺诈和展示频率限制。违反此规则将导致应用程序在Google Play中被封锁。

Android 14+对广告标识符的限制

从Android 14(API 34)开始,Google对广告标识符的访问实施了新的限制。现在必须在应用程序manifest中明确指定AD_ID权限才能获取GAID。如果应用程序未指定权限且targeting API 34+,AdvertisingIdClient调用将返回零标识符。

Google Play Privacy Policy

Google Play政策要求使用GAID的应用程序遵守几个规则:标识符只能用于广告和分析目的;未经用户明确同意,应用程序不得将GAID与个人数据关联;未经隐私政策说明,不得将GAID传递给第三方。自2025年起,Google Play开始使用Play Integrity API自动扫描应用程序是否符合这些规则。

特别关注针对儿童的应用程序:根据Google Play家庭政策,面向儿童的应用程序在任何情况下都不得使用GAID进行广告个性化。开发人员必须使用经过认证的适合儿童受众的广告网络。

选择退出个性化

isLimitAdTrackingEnabled标志向应用程序传达用户的选择。如果标志为true,应用程序只能将GAID用于基本操作:安装归因、分析、反欺诈、频率限制。在这种情况下,基于GAID的广告个性化、用户资料创建和再营销是被禁止的。

Google建议不要试图通过替代标识符(IMEI、MAC地址、Android ID)绕过isLimitAdTrackingEnabled标志。使用永久性硬件标识符被Google Play政策明确禁止,并会导致应用程序立即被封锁,无上诉可能。

获取GAID的代码示例

在Android上获取GAID需要异步调用AdvertisingIdClient并处理可能的异常。下面是一个使用协程的Kotlin完整示例。

在Kotlin中获取GAID

该示例演示了使用协程和try-catch获取广告标识符并检查isLimitAdTrackingEnabled标志以处理Google Play Services错误。

kotlin
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

data class AdvertisingInfo(
    val gaid: String,
    val isLimitAdTrackingEnabled: Boolean
)

suspend fun getAdvertisingInfo(context: Context): AdvertisingInfo? {
    return withContext(Dispatchers.IO) {
        try {
            val adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context)
            AdvertisingInfo(
                gaid = adInfo.id,
                isLimitAdTrackingEnabled = adInfo.isLimitAdTrackingEnabled(true)
            )
        } catch (e: GooglePlayServicesNotAvailableException) {
            // Google Play服务不可用——使用替代ID
            null
        } catch (e: IOException) {
            // 访问服务时出现网络错误
            null
        }
    }
}

// 在Activity或ViewModel中使用
fun onGaidRequested() {
    lifecycleScope.launch {
        val info = getAdvertisingInfo(this@MainActivity)
        setupAdNetwork(
            gaid = info?.gaid,
            limitTracking = info?.isLimitAdTrackingEnabled ?: true
        )
    }
}

GAID、AAID和IDFA的比较

了解不同平台上广告标识符之间的差异对于在两个操作系统上进行广告归因的开发人员至关重要。以下是GAIDAAIDIDFA关键方面的比较。

与iOS IDFA的区别

GAID和IDFA之间的主要区别——获取机制。IDFA需要通过ATT获得明确同意,否则返回零标识符。GAID在没有系统对话框的情况下可用,但从Android 14+开始需要在manifest中声明AD_ID权限。GAID还具有更灵活的标志系统:isLimitAdTrackingEnabled不会阻止获取标识符,只是通知应用程序需要限制使用。

根据Adjust (2025),GAID在Android上的可用性为活跃设备的98%,而IDFA在iOS上的可用性为20-35%。这使得Android成为广告归因更可预测的平台,但Google政策的收紧正在逐渐缩小这一差距。

与GAID不同,AAID不依赖于Google Play Services,可用于华为(HMS)、Amazon Fire OS和中国制造商的设备。在华为设备上,AAID通过华为移动服务(HMS)实现,使用来自com.huawei.hms.ads.identifier包的AdvertisingIdClient类。在中国市场,OAID(Open Anonymous ID)也很普遍——由中国制造商联盟开发的标准,用于在没有Google服务的设备上替代GAID。选择合适的API来获取标识符直接影响不同市场上广告归因的可用性。

常见问题

GAID和AAID有什么区别?

GAID(Google Advertising ID)——带有Google Play Services设备的广告标识符。AAID(Android Advertising ID)——Android广告标识符的通用术语,包括没有Google服务的设备(华为、Amazon Fire)。GAID通过Google Play获取,AAID通过相应应用商店的SDK获取。

在Android 14中获取GAID是否需要权限?

是的,从Android 14(API 34)开始需要在manifest中指定AD_ID权限。如果应用程序的targetSdkVersion为34+且未指定AD_ID,AdvertisingIdClient将返回零标识符。权限通过标签指定。

可以在设备上重置GAID吗?

是的,用户可以随时通过设置 — Google — 广告 — 重置广告标识符来重置GAID。重置后,所有应用程序将获得新的标识符,与广告交互历史的关联将丢失。

什么是OAID,它与GAID有什么区别?

OAID(Open Anonymous ID)——由中国智能手机制造商联盟(小米、OPPO、vivo、华为)开发的广告标识符标准。用于没有Google Play Services的设备,面向中国市场。与GAID不同,OAID不需要Google Play,通过设备制造商的SDK工作。

isLimitAdTrackingEnabled标志如何影响GAID的使用?

如果isLimitAdTrackingEnabled为true,应用程序不能使用GAID进行广告个性化、用户资料创建和再营销。但是,该标识符可以用于有限目的:安装归因、分析、反欺诈和展示频率限制。

总结

  • GAID — 适用于带有Google Play Services设备的Google Advertising ID,Android的主要广告标识符。
  • AAID — 所有Android设备上广告标识符的通用术语,包括华为和Amazon Fire。
  • AdvertisingIdClient — 在Android上获取GAID的Google Play Services主要API。
  • AD_ID permission — 在Android 14+上targetSdkVersion 34+的应用程序的强制性权限。
  • isLimitAdTrackingEnabled — 指示用户禁止广告个性化的标志。
  • OAID — 在没有Google服务的设备上为中国市场提供的替代广告标识符。
  • 与IDFA的区别 — GAID不需要系统同意对话框,但Google Play政策要求在isLimitAdTrackingEnabled = true时遵守限制。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读