Alterações no ID de Publicidade: Como obter o GAID do Google no Android 13+?

opoinstall
2026-08-24
5 min read

O que é o GAID e como obtê-lo programaticamente? O ID de Publicidade do Google (GAID) é um identificador de software reconfigurável pelo usuário fornecido pelos serviços do Google Play para medição de marketing, recuperado programaticamente fora da thread principal usando a API AdvertisingIdClient após garantir que o manifesto do aplicativo mesclado contenha a permissão AD_ID quando necessário.

O ID de Publicidade do Google (GAID), também conhecido como Android Advertising ID (AAID), é uma string exclusiva e reconfigurável pelo usuário fornecida pelos serviços do Google Play para atribuição de marketing, direcionamento personalizado e análise em dispositivos Android. Aplicativos voltados para o Android 13 (nível de API 33) ou superior devem garantir que o manifesto mesclado contenha a permissão com.google.android.gms.permission.AD_ID ao acessarem o ID de Publicidade dos serviços do Google Play; caso contrário, a API retornará um valor totalmente zerado.

Termo Definição
GAID ID de Publicidade do Google fornecido pelos serviços do Google Play para medição de marketing.
AdvertisingIdClient A API dos serviços do Google Play usada para consultar metadados do identificador de publicidade.
Permissão AD_ID A permissão do manifesto do Android necessária para aplicativos voltados para o nível de API 33+ ao acessar o ID de Publicidade dos serviços do Google Play.
Identificador Zerado O valor sentinela totalmente zerado (00000000-0000-0000-0000-000000000000) retornado quando o ID de Publicidade está indisponível ou oculto.

O que é o GAID e como o ID de Publicidade do Google funciona

A anatomia técnica do ID de Publicidade

O ID de Publicidade do Google (GAID) é retornado pelos serviços do Google Play como uma string identificadora opaca, comumente formatada como um UUID hexadecimal em minúsculas de 128 bits (por exemplo, 38400000-8cf0-11bd-b23e-10b96e4ef00d). Os aplicativos devem tratar a string retornada como um identificador opaco, em vez de inferir lógica de negócios de sua formatação.

Ao contrário dos identificadores de nível de hardware, o GAID foi projetado com controles explícitos de privacidade:

  • Reconfigurável pelo Usuário: Os usuários podem gerar um novo identificador aleatório a qualquer momento por meio das configurações do dispositivo.
  • Excluível pelo Usuário: A partir do Android 12, os usuários podem excluir seu ID de publicidade, instruindo os serviços do Google Play a ocultar os identificadores de publicidade de todos os aplicativos.
  • Escopo de Dispositivo por Perfil: Os IDs de publicidade estão geralmente disponíveis em todos os aplicativos para o mesmo perfil de usuário do dispositivo, mas diferentes perfis de usuário ou de convidado do Android no mesmo dispositivo físico recebem identificadores de publicidade distintos.

O papel dos serviços do Google Play no gerenciamento do estado do identificador

O GAID não faz parte da estrutura principal de código aberto do Android. Ele é um serviço de nível de aplicativo gerenciado e disponibilizado dinamicamente pela biblioteca cliente proprietária dos serviços do Google Play (com.google.android.gms:play-services-ads-identifier).

Quando um aplicativo chama os serviços do Google Play, o cliente realiza uma comunicação síncrona com os serviços do Google Play para recuperar o identificador de publicidade atual e a preferência do usuário de limitação de rastreamento de anúncios.

Por que o GAID substituiu os identificadores de hardware

Nas primeiras versões do Android, as redes de anúncios e os desenvolvedores rastreavam eventos de conversão usando identificadores de hardware não reconfiguráveis:

  • Identificador Internacional de Equipamento Móvel (IMEI): Vinculado ao hardware de celular do dispositivo.
  • Endereço de Controle de Acesso ao Meio (MAC): Vinculado ao hardware da interface de rede.
  • ANDROID_ID (SSAID): Nas versões modernas do Android 8.0+, esse identificador tem escopo por combinação de chave de assinatura do aplicativo, usuário e dispositivo, em vez de funcionar como uma chave de publicidade universal entre aplicativos.

Para casos de uso de marketing no Google Play, os desenvolvedores devem usar o ID de Publicidade quando ele estiver disponível, em vez de substituir por outro identificador de dispositivo persistente.

Veja também: GAID ──> Arquitetura de Atribuição Mobile

Requisitos de permissão do Android 13: A declaração no manifesto AD_ID

O modelo de imposição do nível de API 33

A partir do Android 13 (nível de API 33), o Google introduziu a permissão com.google.android.gms.permission.AD_ID:

  • SDK de destino 33 e superior: Os aplicativos voltados para o Android 13 ou superior devem declarar a permissão AD_ID em seu manifesto. Se a permissão for omitida, os serviços do Google Play retornarão uma string de zeros (00000000-0000-0000-0000-000000000000).
  • SDK de destino 32 e inferior: A permissão AD_ID não é obrigatória no manifesto. No entanto, o ID de Publicidade ainda pode ficar indisponível ou zerado devido às configurações de privacidade do ID de publicidade do usuário, incluindo o estado de limitação de rastreamento ou exclusão.
  • Declarações de política da Play Store: Ao enviar uma atualização voltada para o nível de API 33+, os desenvolvedores devem preencher a declaração atual de ID de Publicidade no Google Play Console, informando com precisão se e como o aplicativo usa o identificador.

Fluxo de recuperação e identificador zerado do GAID no Android 13

Configurando o AndroidManifest.xml e as dependências do Gradle

Para declarar a permissão, inclua a tag <uses-permission> dentro do arquivo AndroidManifest.xml. No arquivo build.gradle do módulo do seu aplicativo, adicione a dependência oficial play-services-ads-identifier.

A configuração abaixo demonstra a sintaxe da permissão no manifesto e a configuração da dependência do Gradle:

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

    <!-- Necessário na API 33+ para acessar o GAID não zerado -->
    <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 do Aplicativo -->
    </application>
</manifest>
// Localização: app/build.gradle
// Observação: Versões de dependência de exemplo exibidas; verifique as liberações estáveis atuais nos repositórios oficiais antes do uso em produção.

dependencies {
    // Biblioteca oficial do Google Play services Ads Identifier
    implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'

    // Corrotinas Kotlin para execução assíncrona fora da thread principal
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}

Entendendo a mesclagem de manifestos: Injeção de SDK transitiva

Ao compilar um APK do Android ou um Android App Bundle (AAB), o sistema de compilação Gradle mescla os manifestos de todas as bibliotecas de terceiros importadas em um único arquivo AndroidManifest.xml final.

Se um SDK de rede de anúncios, ferramenta de análise ou biblioteca de atribuição importada declarar com.google.android.gms.permission.AD_ID em seu manifesto interno, essa permissão será mesclada automaticamente no seu build final. Os desenvolvedores podem inspecionar app/build/outputs/logs/manifest-merger-release-report.txt para auditar qual dependência introduziu a permissão.

Recuperação programática: Buscando o GAID via AdvertisingIdClient em Kotlin

A regra obrigatória de execução fora da thread principal

A chamada de AdvertisingIdClient.getAdvertisingIdInfo(context) inicia uma chamada síncrona para os serviços do Google Play. O Google proíbe explicitamente a execução desse método na thread principal (de IU).

Chamar getAdvertisingIdInfo() na thread principal lança um IllegalStateException imediato:

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

Para evitar erros de ANR (Aplicativo Não Responde) e falhas em tempo de execução, os desenvolvedores devem despachar a chamada de extração dentro de um worker em segundo plano ou de uma corrotina Kotlin usando Dispatchers.IO.

Recuperação de GAID pelo AdvertisingIdClient fora da thread principal

Implementando tarefas de worker em segundo plano usando corrotinas Kotlin

A implementação em Kotlin abaixo demonstra um AdvertisingIdManager seguro para threads que executa a extração fora da thread principal, trata exceções de disponibilidade dos serviços do Google Play e valida a integridade do 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 programaticamente o ID de Publicidade do Google fora da thread de execução principal.
     * Trata automaticamente exceções, estados zerados e recusas de usuários.
     */
    suspend fun fetchGaid(context: Context): GaidResult = withContext(Dispatchers.IO) {
        try {
            // Chama a IPC bloqueante dos serviços do Google Play no despachante de corrotina 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, "O ID de Publicidade está indisponível ou zerado.")
                GaidResult(
                    gaid = null,
                    isLimitAdTrackingEnabled = isLAT,
                    isZeroed = true,
                    isAvailable = false
                )
            } else {
                Log.d(TAG, "ID de Publicidade recuperado com sucesso. LAT habilitado: $isLAT")
                GaidResult(
                    gaid = rawId,
                    isLimitAdTrackingEnabled = isLAT,
                    isZeroed = false,
                    isAvailable = true
                )
            }
        } catch (e: GooglePlayServicesNotAvailableException) {
            Log.e(TAG, "Os serviços do Google Play não estão instalados ou estão indisponíveis neste dispositivo.", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: GooglePlayServicesRepairableException) {
            Log.w(TAG, "Os serviços do Google Play exigem uma atualização ou recuperação do usuário.", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: IOException) {
            Log.e(TAG, "Erro de comunicação ao se conectar aos serviços do Google Play.", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: IllegalStateException) {
            Log.e(TAG, "Estado inválido ao recuperar o ID de Publicidade.", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        } catch (e: Exception) {
            Log.e(TAG, "Erro inesperado ao recuperar o ID de Publicidade do Google.", e)
            GaidResult(gaid = null, isLimitAdTrackingEnabled = true, isZeroed = false, isAvailable = false)
        }
    }
}

Analisando AdvertisingIdClient.Info e tratando a Limitação de Rastreamento de Anúncios

O método AdvertisingIdClient.getAdvertisingIdInfo() retorna um objeto AdvertisingIdClient.Info contendo duas propriedades principais:

  • getId() (String): A string alfanumérica que representa o identificador de publicidade.
  • isLimitAdTrackingEnabled() (Boolean): Quando a limitação de rastreamento de anúncios está habilitada, a política do Google Play proíbe o uso de dados do ID de Publicidade para criar perfis de marketing ou direcionar anúncios personalizados. A política ainda permite atividades como marketing contextual, limitação de frequência, rastreamento de conversões, relatórios e detecção de segurança/fraude; no entanto, nos serviços atuais do Google Play, o próprio ID de Publicidade é zerado quando essa configuração está ativada, portanto, os aplicativos não devem presumir que um GAID utilizável permaneça disponível.

Lidando com identificadores zerados e estados de exclusão iniciados pelo usuário

A string 00000000-0000-0000-0000-000000000000: Quando e por que ela aparece

Em ambientes de produção, AdvertisingIdClient.Info.getId() retorna 00000000-0000-0000-0000-000000000000 quando:

  1. Usuário excluiu o ID de Publicidade: O usuário navegou até as configurações do dispositivo e excluiu seu ID de publicidade.
  2. Limitação de rastreamento de anúncios ativada: O usuário ativou a limitação de rastreamento de anúncios nas versões do sistema operacional compatíveis.
  3. Permissão de manifesto ausente: O aplicativo tem como alvo o Android 13+ (nível de API 33+) e falha ao declarar com.google.android.gms.permission.AD_ID em seu manifesto mesclado.

Tratamento de identificador zerado e estado de privacidade do GAID

Fluxo de trabalho de configurações do usuário: Excluindo o ID de Publicidade

Os usuários nas versões atuais do Android podem remover seu identificador navegando até:

Configurações > Privacidade > Anúncios > Excluir ID de publicidade (os rótulos exatos podem variar de acordo com o fabricante do dispositivo).

Quando excluído, os serviços do Google Play limpam o valor subjacente. Chamadas subsequentes à API em todos os aplicativos instalados retornam a string zerada.

Requisitos da política do Google Play para estados de redefinição e exclusão

De acordo com as Políticas do Desenvolvedor do Google Play sobre o ID de Publicidade, os desenvolvedores devem tratar as ações de privacidade do usuário de acordo com regras explícitas:

  • Requisitos de redefinição: Quando um usuário redefine seu ID de Publicidade, os desenvolvedores não devem unir ou conectar o novo ID de Publicidade a um ID de Publicidade anterior ou a dados derivados dele sem o consentimento explícito do usuário.
  • Requisitos de exclusão: Quando um usuário exclui seu ID de Publicidade, os desenvolvedores não devem conectar esse dispositivo a dados vinculados ou derivados de seu ID de Publicidade anterior.

Sanitizando entradas de identificador em pipelines de ingestão de downstream

Os motores de atribuição de backend devem implementar filtros de validação para evitar que strings zeradas poluam os bancos de dados de atribuição:

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

Se um identificador zerado for detectado, os sistemas de downstream não devem tratá-lo como um GAID utilizável ou uma chave de correspondência de identificador; qualquer processamento de atribuição ou análise deve contar apenas com outros sinais permitidos de forma independente.

Política de Famílias do Google Play e restrições de categoria de aplicativo

Práticas de dados em aplicativos do programa Famílias

O Google Play impõe regras rígidas de proteção de dados para aplicativos que participam do programa Famílias ou que são direcionados a crianças:

  • Proibição de transmissão do AAID: Aplicativos voltados exclusivamente para crianças não devem transmitir o ID de Publicidade (AAID). Para aplicativos voltados para o nível de API 33 ou superior, o Google recomenda omitir ou desativar a permissão AD_ID como um mecanismo de conformidade simples.
  • Tratamento de público misto: Aplicativos voltados para crianças e públicos mais velhos não devem transmitir o AAID de crianças ou usuários de idade desconhecida. Por padrão, os aplicativos e SDKs devem evitar a transmissão do AAID até que a verificação de idade confirme que o usuário não é uma criança.

Usando tools:node=“remove” no Manifesto

Se o seu aplicativo for voltado para crianças, mas um SDK de terceiros importado injetar automaticamente a permissão AD_ID por meio da mesclagem de manifestos, adicione o atributo tools:node="remove" no seu arquivo AndroidManifest.xml principal:

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

    <!-- Remove explicitamente o AD_ID injetado por dependências transitivas -->
    <uses-permission 
        android:name="com.google.android.gms.permission.AD_ID" 
        tools:node="remove"/>

</manifest>

Alternativas de medição específicas para casos de uso quando o GAID está indisponível

Quando o GAID é zerado, excluído ou restrito por política, as equipes de engenharia implantam alternativas específicas para casos de uso com base em seu objetivo funcional:

  • Atribuição de campanhas: Use a API Google Play Install Referrer para recuperar parâmetros de campanha mediados pela loja passados pela URL da Play Store (referrer=...). Opera independentemente da exclusão do GAID.
  • Integração (Onboarding) e intenção do usuário: Use o roteamento de parâmetros contextuais primários para restaurar tokens de indicação, códigos promocionais e destinos de deep links passados de páginas de destino web.
  • Análises e prevenção de fraudes com escopo de desenvolvedor: Use o App Set ID (AppSetIdClient) para gerar um identificador compartilhado entre aplicativos publicados sob a mesma conta de desenvolvedor, sem rastreamento de publicidade entre aplicativos.
                    GAID Indisponível ou Zerado
                                 │
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
   Campanha Paga             Onboarding &          Propriedade do Desenvolvedor
    Atribuição             Intenção de Indicação    Análise & Fraude
         │                       │                       │
         ▼                       ▼                       ▼
    Google Play             First-Party             App Set ID
  Install Referrer          Contextual              (Com Escopo de
     (URL da Loja)           Roteamento             Desenvolvedor ou App)

Alternativas de GAID para onboarding de atribuição e análises

Matriz Comparativa: GAID versus Install Referrer versus App Set ID

Dimensão ID de Publicidade do Google (GAID) Google Play Install Referrer App Set ID (AppSet)
Tipo de Identificador UUID de Publicidade entre Aplicativos Reconfigurável String de Parâmetro de Campanha Mediada pela Loja Identificador com escopo de desenvolvedor ou aplicativo, dependendo da instalação e do contexto dos serviços do Play
Permissão do Manifesto com.google.android.gms.permission.AD_ID Nenhuma Nenhuma
Impacto da Exclusão do Usuário Retorna String de Zeros Independente da exclusão do GAID Pode ser redefinido após 13 meses sem acesso à API, quando o último aplicativo do conjunto for desinstalado ou após redefinição de fábrica
Caso de Uso Principal Atribuição de anúncios entre aplicativos & retargeting Rastreamento de desempenho de campanhas na Play Store Detecção de fraudes & análises pertencentes ao desenvolvedor
Compatibilidade com a Política de Famílias Não deve ser transmitido a partir de crianças Não está sujeito à proibição de transmissão específica do AAID; o uso ainda deve cumprir as políticas aplicáveis para famílias Incentivado pelo Google para análises em aplicativos do programa Famílias

Perguntas Frequentes (FAQ)

Por que a chamada ao AdvertisingIdClient falha com um IllegalStateException?
O método AdvertisingIdClient.getAdvertisingIdInfo(context) executa uma comunicação bloqueante com os serviços do Google Play. O Google proíbe explicitamente chamar esse método na thread de execução principal. Os desenvolvedores devem invocá-lo dentro de uma thread em segundo plano ou de uma corrotina Kotlin usando `Dispatchers.IO`.
O que acontece se um aplicativo for voltado para o Android 13 e não declarar a permissão AD_ID?
Se um aplicativo for voltado para o nível de API 33 ou superior e não declarar a permissão `com.google.android.gms.permission.AD_ID` em seu manifesto mesclado, a API dos serviços do Google Play retornará automaticamente `00000000-0000-0000-0000-000000000000` em vez do identificador de publicidade real.
Como faço para remover a permissão AD_ID injetada por dependências de SDK de terceiros?
Se uma biblioteca de terceiros injetar automaticamente a permissão `AD_ID` por meio da mesclagem de manifestos e seu aplicativo precisar cumprir as políticas do Google Play Famílias, adicione `<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>` ao seu arquivo `AndroidManifest.xml` principal.

Resumo e Estrutura de Decisão

O ID de Publicidade do Google continua sendo um importante identificador reconfigurável para casos de uso de marketing e análises de usuários no Android, mas operar no Android 13+ exige adesão às políticas de permissão de manifesto, padrões de execução em segundo plano e tratamento adequado de estados de identificadores zerados. Quando o GAID estiver indisponível, as equipes de engenharia devem escolher uma primitiva de medição com base no caso de uso específico — por exemplo, Install Referrer para atribuição de campanhas na Play Store, parâmetros contextuais primários para o estado de onboarding ou App Set ID para cenários de análises e prevenção de fraudes pertencentes ao desenvolvedor.

Para explorar padrões de implementação para atribuição no Android e pipelines de deep linking, consulte a documentação do OpoInstall.

Materiais Relacionados

  • Conceitos: Ciclo de Vida do ID de Publicidade, Permissão de Manifesto AD_ID, Extração em Thread em Segundo Plano, Tratamento de Identificador Zerado

  • Tecnologias: Serviços do Google Play, API AdvertisingIdClient, API Google Play Install Referrer, SDK Android do OpoInstall

  • Padrões: Políticas do Desenvolvedor do Google Play, Alterações de Comportamento do Android 13, Padrão UUID IETF RFC 4122

  • APIs & Classes: AdvertisingIdClient, AdvertisingIdClient.Info, AppSetIdClient, API de Contexto do OpoInstall

Documentação Oficial

Share this article