Cómo obtener un ID de publicidad que el usuario puede restablecer Parte de Android Jetpack

Para proteger la privacidad del usuario, una práctica recomendada es que todas las apps para Android trabajen con identificadores que el usuario puede restablecer. Un ejemplo de estos es un ID de publicidad, que identifica de forma única a un usuario específico para casos de uso de publicidad, como la personalización de anuncios.

Para admitir una solución de seguimiento de anuncios estandarizada en todos los dispositivos que ejecutan tu app, puedes usar la biblioteca de ID de publicidad. Esta biblioteca, que está disponible en dispositivos que ejecutan Android 4.0 (nivel de API 14) y versiones posteriores, define una interfaz para interactuar con los proveedores de anuncios a nivel del sistema. Esta interfaz permite que tu app reciba valores de ID de publicidad coherentes.

El proveedor de anuncios que se incluye con la biblioteca de ID de publicidad también define un intent estándar para abrir una pantalla de configuración que implementa el proveedor de anuncios. Esta pantalla de configuración permite al usuario restablecer su ID de publicidad y, luego, inhabilitar la personalización de anuncios.

En esta guía, se explica cómo utilizar el módulo cliente de la Biblioteca de ID de publicidad para obtener un ID de publicidad coherente por usuario del dispositivo. En esta guía, se presenta una descripción general de la arquitectura de la biblioteca.

Cómo configurar la app cliente

Al interactuar con el módulo cliente de la biblioteca de ID de publicidad, tu app puede recuperar un ID de publicidad coherente que represente al usuario que interactúa con la app.

El ID de publicidad se representa con la versión 3 del formato de identificador único universal (UUID) o un formato equivalente de 128 bits:

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

La biblioteca de ID de publicidad normaliza el valor que se muestra según sea necesario para proporcionar los ID con este formato.

Para recuperar el ID de publicidad de tu app que el usuario puede restablecer, completa los siguientes pasos:

  1. Llama a AdvertisingIdClient.isAdvertisingIdProviderAvailable() para verificar si hay un proveedor de anuncios disponible. Si este método muestra false, tu app debería usar otro medio para realizar cualquiera de los casos de uso de seguimiento de anuncios requeridos.

  2. Llama a AdvertisingIdClient.getAdvertisingIdInfo() para obtener los detalles del identificador de anuncios, incluido el ID de publicidad. La biblioteca de ID de publicidad ejecuta este método en un subproceso de trabajo y usa un tiempo de espera de conexión de 10 segundos.

En el siguiente fragmento de código, se muestra cómo recuperar el ID de publicidad junto con otra información del proveedor de anuncios:

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

Arquitectura de la biblioteca de ID de publicidad

Diagrama de la arquitectura
Figura 1. Arquitectura de la biblioteca de ID de publicidad

En la figura 1, se muestra la estructura de la biblioteca de ID de publicidad. La biblioteca consta de los siguientes módulos:

  • Incluye un módulo cliente, que es una capa liviana incluida en las apps.
  • Incluye un módulo proveedor, que el fabricante del dispositivo pone a disposición del usuario. Las implementaciones de este módulo deben definir una IU de configuración para brindar a los usuarios la capacidad de restablecer su ID de publicidad y activar o desactivar las preferencias de seguimiento de anuncios.

El módulo cliente se comunica con el módulo proveedor para recuperar los ID de publicidad y las preferencias del usuario relacionadas con el seguimiento de anuncios.

Cómo la biblioteca administra varios proveedores

Es posible que un dispositivo admita varios proveedores de anuncios a nivel del sistema a la vez. Si la biblioteca de ID de publicidad detecta esta situación, garantiza que tu app siempre recupere información del mismo proveedor, suponiendo que este siga disponible. Este proceso asegura la coherencia de los ID de publicidad.

Si el conjunto de proveedores de anuncios disponibles cambia con el tiempo y tu app interactúa con un proveedor de identificadores de anuncios diferente, todas las demás apps cliente también comenzarán a usar ese proveedor nuevo. Tu app muestra el mismo comportamiento que ocurriría si el usuario hubiera solicitado el restablecimiento de su ID de publicidad.

La biblioteca de proveedores de ID de publicidad usa el siguiente orden para clasificar los proveedores:

  1. Proveedores que solicitaron el permiso androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Proveedores que estuvieron instalados en el dispositivo por más tiempo
  3. Proveedores que aparecen primeros en orden alfabético