¿Qué es el GAID y cómo obtenerlo mediante programación? El ID de publicidad de Google (GAID) es un identificador de software restablecible por el usuario proporcionado por los servicios de Google Play para la medición publicitaria. Se recupera mediante programación fuera del hilo principal utilizando la API AdvertisingIdClient, tras verificar que el manifiesto combinado de la aplicación incluya el permiso AD_ID cuando sea necesario.
El ID de publicidad de Google (GAID), también conocido como Android Advertising ID (AAID), es una cadena única y restablecible por el usuario proporcionada por los servicios de Google Play para la atribución publicitaria, la segmentación de anuncios personalizados y las estadísticas en dispositivos Android. Las aplicaciones destinadas a Android 13 (nivel de API 33) o superior deben garantizar que el manifiesto combinado contenga el permiso
com.google.android.gms.permission.AD_IDal acceder al ID de publicidad de los servicios de Google Play; de lo contrario, la API devolverá un valor compuesto únicamente por ceros.
| Término | Definición |
|---|---|
| GAID | ID de publicidad de Google proporcionado por los servicios de Google Play para la medición publicitaria. |
| AdvertisingIdClient | La API de los servicios de Google Play utilizada para consultar los metadatos del identificador de publicidad. |
| Permiso AD_ID | El permiso del manifiesto de Android requerido para aplicaciones orientadas al nivel de API 33+ al acceder al ID de publicidad de los servicios de Google Play. |
| Identificador en ceros | El valor centinela compuesto solo por ceros (00000000-0000-0000-0000-000000000000) que se devuelve cuando el ID de publicidad no está disponible o ha sido retenido. |
Qué es el GAID y cómo funciona el ID de publicidad de Google
La anatomía técnica del ID de publicidad
Los servicios de Google Play devuelven el ID de publicidad de Google (GAID) como una cadena de identificador opaca, habitualmente formateada como un UUID hexadecimal en minúsculas de 128 bits (p. ej., 38400000-8cf0-11bd-b23e-10b96e4ef00d). Las aplicaciones deben tratar la cadena devuelta como un identificador opaco en lugar de inferir lógica de negocio a partir de su formato.
A diferencia de los identificadores a nivel de hardware, el GAID está diseñado con controles de privacidad explícitos:
- Restablecible por el usuario: Los usuarios pueden generar un nuevo identificador aleatorio en cualquier momento a través de la configuración del dispositivo.
- Eliminable por el usuario: A partir de Android 12, los usuarios pueden eliminar su ID de publicidad, indicando a los servicios de Google Play que retengan los identificadores publicitarios de todas las aplicaciones.
- Ámbito por perfil de dispositivo: Los identificadores de publicidad suelen estar disponibles en todas las aplicaciones para un mismo perfil de usuario del dispositivo, pero los diferentes perfiles de usuario o de invitado de Android en el mismo dispositivo físico reciben identificadores de publicidad distintos.
El papel de los servicios de Google Play en la gestión del estado del identificador
El GAID no forma parte del núcleo del marco de Android de código abierto. Es un servicio a nivel de aplicación gestionado y ofrecido de forma dinámica por la biblioteca cliente propietaria de los servicios de Google Play (com.google.android.gms:play-services-ads-identifier).
Cuando una aplicación invoca los servicios de Google Play, el cliente realiza una comunicación bloqueante con dichos servicios para recuperar el identificador de publicidad actual y la preferencia del usuario sobre la limitación del rastreo de anuncios.
Por qué el GAID sustituyó a los identificadores de hardware
En las primeras versiones de Android, las redes de anuncios y los desarrolladores realizaban el seguimiento de los eventos de conversión utilizando identificadores de hardware que no se podían restablecer:
- Identificador internacional de equipo móvil (IMEI): Vinculado al hardware celular del dispositivo.
- Dirección de control de acceso al medio (MAC): Vinculada al hardware de la interfaz de red.
- ANDROID_ID (SSAID): En las versiones modernas de Android 8.0+, este identificador se circunscribe a cada combinación de clave de firma de aplicación, usuario y dispositivo, en lugar de funcionar como una clave publicitaria universal entre aplicaciones.
Para casos de uso publicitario en Google Play, los desarrolladores deben utilizar el ID de publicidad cuando esté disponible en lugar de sustituirlo por otro identificador de dispositivo persistente.
Véase también: GAID ──> Arquitectura de atribución móvil
Requisitos de permisos en Android 13: La declaración en el manifiesto de AD_ID
El modelo de cumplimiento del nivel de API 33
A partir de Android 13 (nivel de API 33), Google introdujo el permiso com.google.android.gms.permission.AD_ID:
- SDK de destino 33 y superior: Las aplicaciones orientadas a Android 13 o superior deben declarar el permiso
AD_IDen su manifiesto. Si se omite el permiso, los servicios de Google Play devuelven una cadena de ceros (00000000-0000-0000-0000-000000000000). - SDK de destino 32 e inferior: No se requiere el permiso
AD_IDen el manifiesto. Sin embargo, el ID de publicidad puede seguir no estar disponible o aparecer en ceros debido a la configuración de privacidad del ID de publicidad del usuario, incluidos los estados de limitación del rastreo de anuncios o de eliminación. - Declaraciones de políticas de Play Store: Al enviar una actualización dirigida al nivel de API 33+, los desarrolladores deben completar la declaración actual del ID de publicidad en Google Play Console, informando con precisión si la aplicación utiliza el identificador y de qué manera.

Configuración de AndroidManifest.xml y dependencias de Gradle
Para declarar el permiso, incluye la etiqueta <uses-permission> dentro de AndroidManifest.xml. En el archivo build.gradle del módulo de tu aplicación, añade la dependencia oficial play-services-ads-identifier.
La siguiente configuración muestra la sintaxis del permiso en el manifiesto y la configuración de las dependencias de Gradle:
```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- Requerido en la API 33+ para acceder a un GAID distinto de cero -->
<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">
<!-- Componentes de la aplicación -->
</application>
</manifest>
// Ubicación: app/build.gradle
// Nota: Se muestran versiones de ejemplo de las dependencias; verifica las versiones estables actuales en los repositorios oficiales antes de su uso en producción.
dependencies {
// Biblioteca oficial de identificadores de publicidad de Google Play services
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
// Corrutinas de Kotlin para la ejecución asíncrona fuera del hilo principal
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}
Comprender la combinación de manifiestos: Inyección transitiva de SDK
Al compilar un APK de Android o un Android App Bundle (AAB), el sistema de compilación de Gradle combina los manifiestos de todas las bibliotecas de terceros importadas en un único archivo AndroidManifest.xml final.
Si un SDK de red publicitaria importado, una herramienta de análisis o una biblioteca de atribución declara com.google.android.gms.permission.AD_ID en su manifiesto interno, dicho permiso se combinará automáticamente en tu compilación final. Los desarrolladores pueden inspeccionar app/build/outputs/logs/manifest-merger-release-report.txt para auditar qué dependencia introdujo el permiso.
Recuperación mediante programación: Obtención del GAID a través de AdvertisingIdClient en Kotlin
### La regla obligatoria de ejecución fuera del hilo principalInvocar AdvertisingIdClient.getAdvertisingIdInfo(context) inicia una llamada sincrónica a los servicios de Google Play. Google prohíbe explícitamente ejecutar este método en el hilo principal (de interfaz de usuario).
Llamar a getAdvertisingIdInfo() en el hilo principal genera inmediatamente una excepción IllegalStateException:
java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock
Para evitar errores de la aplicación del tipo ANR (Aplicación no responde) y bloqueos en tiempo de ejecución, los desarrolladores deben enviar la llamada de extracción dentro de un proceso en segundo plano o una corrutina de Kotlin utilizando Dispatchers.IO.

Implementación de tareas de procesos en segundo plano mediante corrutinas de Kotlin
La siguiente implementación en Kotlin muestra un AdvertisingIdManager seguro para subprocesos que ejecuta la extracción fuera del hilo principal, gestiona las excepciones de disponibilidad de los servicios de Google Play y valida la integridad del identificador:
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"
/**
* Recupera mediante programación el ID de publicidad de Google fuera del hilo de ejecución principal.
* Gestiona automáticamente excepciones, estados en ceros y exclusiones voluntarias del usuario.
*/
suspend fun fetchGaid(context: Context): GaidResult = withContext(Dispatchers.IO) {
try {
// Invoca la comunicación IPC bloqueante de los servicios de Google Play en el despachador de corrutinas IO
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, "El ID de publicidad no está disponible o está en ceros.")
GaidResult(
gaid = null,
isLimitAdTrackingEnabled = isLAT,
isZeroed = true,
isAvailable = false
)
} else {
Log.d(TAG, "ID de publicidad recuperado con éxito. LAT habilitado: $isLAT")
GaidResult(
gaid = rawId,
isLimitAdTrackingEnabled = isLAT,
isZeroed = false,
isAvailable = true
)
}
} catch (e: GooglePlayServicesNotAvailableException) {
Log.e(TAG, "Los servicios de Google Play no están instalados o no están disponibles en este dispositivo.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: GooglePlayServicesRepairableException) {
Log.w(TAG, "Los servicios de Google Play requieren una actualización o recuperación por parte del usuario.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: IOException) {
Log.e(TAG, "Error de comunicación al conectar con los servicios de Google Play.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: IllegalStateException) {
Log.e(TAG, "Estado ilegal al recuperar el ID de publicidad.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
} catch (e: Exception) {
Log.e(TAG, "Error inesperado al recuperar el ID de publicidad de Google.", e)
GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
}
}
}
Análisis de AdvertisingIdClient.Info y gestión de la limitación del rastreo de anuncios
El método AdvertisingIdClient.getAdvertisingIdInfo() devuelve un objeto AdvertisingIdClient.Info que contiene dos propiedades clave:
getId()(String): La cadena alfanumérica que representa el identificador de publicidad.isLimitAdTrackingEnabled()(Boolean): Cuando la limitación del rastreo de anuncios está habilitada, la política de Google Play prohíbe utilizar los datos del ID de publicidad para crear perfiles publicitarios o segmentar anuncios personalizados. La política sigue permitiendo actividades como la publicidad contextual, la limitación de frecuencia, el seguimiento de conversiones, la elaboración de informes y la detección de seguridad/fraude; sin embargo, en los servicios actuales de Google Play, el propio ID de publicidad se pone a cero cuando esta opción está habilitada, por lo que las aplicaciones no deben asumir que un GAID utilizable sigue estando disponible.
Gestión de identificadores en ceros y estados de eliminación iniciados por el usuario
La cadena 00000000-0000-0000-0000-000000000000: Cuándo y por qué aparece
En entornos de producción, AdvertisingIdClient.Info.getId() devuelve 00000000-0000-0000-0000-000000000000 cuando:
- El usuario eliminó el ID de publicidad: El usuario navegó hasta la configuración del dispositivo y eliminó su ID de publicidad.
- Limitación del rastreo de anuncios habilitada: El usuario habilitó la limitación del rastreo de anuncios en las versiones del SO compatibles.
- Falta el permiso en el manifiesto: La aplicación está orientada a Android 13+ (nivel de API 33+) y no declara
com.google.android.gms.permission.AD_IDen su manifiesto combinado.

Flujo de trabajo de la configuración del usuario: Eliminación del ID de publicidad
Los usuarios en versiones actuales de Android pueden eliminar su identificador navegando a:
Ajustes > Privacidad > Anuncios > Eliminar ID de publicidad (las etiquetas exactas pueden variar según el fabricante del dispositivo OEM).
Cuando se elimina, los servicios de Google Play purgan el valor subyacente. Las llamadas posteriores a la API desde todas las aplicaciones instaladas devuelven la cadena en ceros.
Requisitos de la política de Google Play para los estados de restablecimiento y eliminación
De acuerdo con las Políticas para desarrolladores de Google Play sobre el ID de publicidad, los desarrolladores deben gestionar las acciones de privacidad del usuario conforme a reglas explícitas:
- Requisitos de restablecimiento: Cuando un usuario restablece su ID de publicidad, los desarrolladores no deben vincular ni conectar el nuevo ID de publicidad con un ID de publicidad anterior o con datos derivados de este sin el consentimiento explícito del usuario.
- Requisitos de eliminación: Cuando un usuario elimina su ID de publicidad, los desarrolladores no deben conectar ese dispositivo con datos vinculados o derivados de su ID de publicidad anterior.
Saneamiento de las entradas de identificadores en canalidades de ingesta posteriores
Los motores de atribución del backend deben implementar filtros de validación para evitar que las cadenas en ceros contaminen las bases de datos de atribución:
fun isGaidValid(gaid: String?): Boolean {
if (gaid.isNullOrBlank()) return false
val zeroedGaid = "00000000-0000-0000-0000-000000000000"
return !gaid.equals(zeroedGaid, ignoreCase = true)
}
Si se detecta un identificador en ceros, los sistemas posteriores no deben tratarlo como un GAID utilizable o una clave de coincidencia de identificadores; cualquier procesamiento de atribución o análisis debe basarse únicamente en otras señales permitidas de forma independiente.
Política de familias de Google Play y restricciones por categoría de aplicación
Prácticas de datos en aplicaciones para familias
Google Play aplica normas estrictas de protección de datos para las aplicaciones que participan en el programa Familias o que están dirigidas a niños:
- Prohibición de transmitir el AAID: Las aplicaciones dirigidas exclusivamente a niños no deben transmitir el ID de publicidad (AAID). Para las aplicaciones orientadas al nivel de API 33 o superior, Google recomienda omitir o deshabilitar el permiso
AD_IDcomo un mecanismo de cumplimiento directo. - Gestión de audiencias mixtas: Las aplicaciones dirigidas tanto a niños como a audiencias de mayor edad no deben transmitir el AAID de niños o de usuarios cuya edad se desconoce. Por defecto, las aplicaciones y los SDK deben evitar la transmisión del AAID hasta que la verificación de la edad confirme que el usuario no es un niño.
Uso de tools:node=“remove” en el manifiesto
Si tu aplicación está dirigida a niños, pero un SDK de terceros importado inyecta automáticamente el permiso AD_ID mediante la combinación de manifiestos, añade el atributo tools:node="remove" en tu archivo AndroidManifest.xml principal:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.familyapp">
<!-- Eliminar explícitamente el permiso AD_ID inyectado por dependencias transitivas -->
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove"/>
</manifest>
Alternativas de medición específicas para cada caso de uso cuando el GAID no está disponible
Cuando el GAID se pone a cero, se elimina o se restringe por política, los equipos de ingeniería despliegan alternativas específicas para cada caso de uso en función de su objetivo funcional:
- Atribución de campañas: Utiliza la API Google Play Install Referrer para recuperar los parámetros de campaña mediados por la tienda y transmitidos a través de la URL de Play Store (
referrer=...). Funciona de forma independiente de la eliminación del GAID. - Incorporación (onboarding) y la intención del usuario: Utiliza el enrutamiento de parámetros contextuales propios para restaurar los tokens de recomendación, los códigos promocionales y los destinos de enlaces profundos (deep links) pasados desde las páginas de aterrizaje web.
- Analítica y prevención de fraudes con ámbito de desarrollador: Utiliza el ID de conjunto de aplicaciones (
AppSetIdClient) para generar un identificador compartido entre aplicaciones publicadas bajo la misma cuenta de desarrollador, sin seguimiento de publicidad entre aplicaciones.
GAID no disponible o en ceros
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
Campaña de pago Incorporación e Analítica y fraude
de atribución intención de referidos propios del desarrollador
│ │ │
▼ ▼ ▼
Google Play Parámetros App Set ID
Install Referrer contextuales (Con ámbito de
(URL de la tienda) propios desarrollador o app)

Matriz comparativa: GAID frente a Install Referrer frente a App Set ID
| Dimensión | ID de publicidad de Google (GAID) | Google Play Install Referrer | App Set ID (AppSet) |
|---|---|---|---|
| Tipo de identificador | UUID de publicidad restablecible entre aplicaciones | Cadena de parámetros de campaña intermediada por la tienda | Identificador con ámbito de desarrollador o de aplicación, según la instalación y el contexto de los servicios de Play |
| Permiso de manifiesto | com.google.android.gms.permission.AD_ID |
Ninguno | Ninguno |
| Impacto de la eliminación del usuario | Devuelve una cadena de ceros | Independiente de la eliminación del GAID | Puede restablecerse tras 13 meses sin acceso a la API, cuando se desinstala la última aplicación del conjunto, o tras un restablecimiento de fábrica |
| Caso de uso principal | Atribución de anuncios y retargeting entre aplicaciones | Seguimiento del rendimiento de campañas en Play Store | Detección de fraudes y análisis propios del desarrollador |
| Ajuste a la política de familias | No debe transmitirse en el caso de los niños | No está sujeto a la prohibición de transmisión específica del AAID; su uso debe cumplir igualmente con las políticas de familias aplicables | Google lo fomenta para la analítica en aplicaciones para familias |
Preguntas frecuentes (FAQ)
¿Por qué la llamada a AdvertisingIdClient provoca un fallo con una IllegalStateException?
¿Qué ocurre si una aplicación está orientada a Android 13 y no declara el permiso AD_ID?
¿Cómo puedo eliminar el permiso AD_ID inyectado por dependencias de SDK de terceros?
Resumen y marco de decisión
El ID de publicidad de Google sigue siendo un identificador restablecible importante para casos de uso de publicidad y análisis de usuarios en Android, pero operar en Android 13+ requiere cumplir con las políticas de permisos del manifiesto, las normas de ejecución en segundo plano y la gestión adecuada de los estados de identificadores en ceros. Cuando el GAID no esté disponible, los equipos de ingeniería deben elegir una primitiva de medición basada en el caso de uso específico (por ejemplo, Install Referrer para la atribución de campañas en Play Store, parámetros contextuales propios para el estado de incorporación o App Set ID para escenarios de analítica propia y prevención de fraude).
Para explorar los patrones de implementación de la atribución en Android y las canalidades de enlaces profundos (deep links), revisa la documentación de OpoInstall.
Materiales relacionados
-
Conceptos: Ciclo de vida del ID de publicidad, permiso de manifiesto AD_ID, extracción en hilos en segundo plano, gestión de identificadores en ceros
-
Tecnologías: Servicios de Google Play, API AdvertisingIdClient, API Google Play Install Referrer, SDK de Android de OpoInstall
-
Estándares: Políticas para desarrolladores de Google Play, cambios de comportamiento en Android 13, estándar UUID IETF RFC 4122
-
API y clases:
AdvertisingIdClient,AdvertisingIdClient.Info,AppSetIdClient, API de contexto de OpoInstall
Documentación oficial
Share this article



