Receber um ID de publicidade que pode ser redefinido pelo usuário Parte do Android Jetpack.

Para proteger a privacidade do usuário, é uma prática recomendada que todos os apps Android trabalhem com ele identificadores redefiníveis pelo usuário. Um desses identificadores é o ID de publicidade, que que identifica exclusivamente um usuário específico para casos de uso de publicidade, como personalização.

Para oferecer uma solução padronizada de rastreamento de anúncios em todos os dispositivos que executam seu app, use a biblioteca Advertising ID. Essa biblioteca, disponível em dispositivos com o Android 4.0 (API nível 14) e versões mais recentes, define uma interface para interagir com provedores de anúncios no nível do sistema. Essa interface permite que o app receba valores consistentes de ID de publicidade.

O provedor de anúncios incluído na biblioteca Advertising ID também define uma intent padrão para abrir uma tela de configurações implementada por ele. Essa tela de configurações permite que o usuário redefina o ID de publicidade e desative da personalização de anúncios.

Este guia explica como usar o módulo do cliente da biblioteca Advertising ID para conseguir um ID de publicidade consistente por usuário de dispositivo. Este guia em seguida, apresenta uma visão geral da arquitetura da biblioteca.

Configurar o app de cliente

Ao interagir com o módulo de cliente da biblioteca Advertising ID, seu aplicativo pode recuperar um ID de publicidade consistente que representa o usuário que está interagir com o aplicativo.

O ID de publicidade é representado pela versão 3 da tag universalmente exclusiva, identificador (UUID) formato ou um formato equivalente de 128 bits:

38400000-8cf0-11bd-b23e-10b96e40000d

A biblioteca Advertising ID normaliza o valor de retorno conforme necessário para fornecer IDs que usam esse formato.

Para recuperar o ID de publicidade redefinível pelo usuário para seu app, siga estas etapas:

  1. Verifique se um provedor de anúncios está disponível chamando AdvertisingIdClient.isAdvertisingIdProviderAvailable() Se esse método retornar false, seu app deverá usar outros meios para realizar qualquer caso de uso de rastreamento de anúncios necessário.

  2. Para conseguir os detalhes do identificador do anúncio, incluindo o ID de publicidade, chame AdvertisingIdClient.getAdvertisingIdInfo() Biblioteca Advertising ID executa esse método em uma linha de execução de worker e usa um tempo limite de conexão de 10 segundos.

O snippet de código a seguir demonstra como recuperar o ID de publicidade. além de outras informações do provedor de anúncios:

app/build.gradle

Groovy

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.
    }
}

Arquitetura da biblioteca Advertising ID

Diagrama da arquitetura
Figura 1. Arquitetura da biblioteca Advertising ID

A Figura 1 mostra a estrutura da biblioteca Advertising ID. A biblioteca consiste nos seguintes módulos:

  • Um módulo de cliente, que é uma camada fina incluída nos apps.
  • Um módulo de provedor, que o fabricante do dispositivo disponibiliza. As implementações deste módulo precisam definir uma interface de configurações para dar aos usuários as redefinir o ID de publicidade e alternar as preferências de acompanhamento de anúncios.

O módulo de cliente se comunica com o módulo de provedor para recuperar IDs de publicidade e preferências do usuário em relação ao rastreamento de anúncios.

Como a biblioteca lida com vários provedores

É possível que um dispositivo seja compatível com vários provedores de anúncios no nível do sistema no ao mesmo tempo. Se a biblioteca Advertising ID detectar essa situação, ela vai garantir que seu app sempre extraia informações do mesmo provedor, desde que ele continue disponível. Esse processo mantém o código de publicidade consistente.

Se o conjunto de provedores de anúncios disponíveis mudar ao longo do tempo e seu app interagir com um provedor de identificador de anúncio diferente, todos os outros apps de cliente também vão começar a usar esse novo provedor. Seu app demonstra o mesmo comportamento que ocorreria se o usuário solicitasse a redefinição do ID de publicidade.

A biblioteca de provedor do Advertising ID usa a seguinte ordem determinística para classificar os provedores:

  1. Os provedores que solicitaram a androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Provedores instalados no dispositivo há mais tempo.
  3. Provedores que aparecem primeiro em ordem alfabética.