Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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

Si quieres proteger la privacidad del usuario, una práctica recomendada es hacer 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 exclusivamente un usuario en particular en los casos prácticos 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 que se incluye en Jetpack. Esta biblioteca, que está disponible en los dispositivos que ejecutan Android 4.0 (API nivel 14) y versiones posteriores, define una interfaz para interactuar con los proveedores de anuncios en el nivel del sistema. Esta interfaz le permite a tu app recibir 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 permite al usuario restablecer su ID de publicidad y, además, inhabilitar la personalización de anuncios.

En esta guía, se explica cómo usar el módulo cliente de la Biblioteca de ID de publicidad a fin de obtener un ID de publicidad coherente para cada usuario del dispositivo. Además, 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 una biblioteca de ID de publicidad, tu app puede obtener un ID de publicidad coherente que represente al usuario que interactúa con tu app.

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

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

La biblioteca de ID de publicidad normaliza el valor de retorno como necesario para proporcionar los ID con este formato:

Si quieres obtener un ID de publicidad que el usuario puede restablecer para tu app, completa los siguientes pasos:

  1. Llama a AdvertisingIdClient.isAdvertisingIdProviderAvailable() para comprobar 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 prácticos de seguimiento de anuncios.

  2. Llama a AdvertisingIdClient.getAdvertisingIdInfo() para obtener los detalles del 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 obtener un ID de publicidad junto con otra información del proveedor de anuncios:

app/build.gradle

    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
                }

                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 ads 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 ads 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 get 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 ads 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 ads 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 el diagrama de 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 a fin de brindar a los usuarios la capacidad de restablecer su ID de publicidad y configurar las preferencias de seguimiento de anuncios.

El módulo cliente se comunica con el módulo proveedor a fin de obtener los ID de publicidad y las preferencias del usuario asociadas con el seguimiento de anuncios.

Cómo la biblioteca administra varios proveedores

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

Si el conjunto de proveedores de anuncios disponibles cambia con el tiempo de manera que tu app interactúe con un proveedor de identificadores de anuncios diferente, todas las otras apps clientes también comenzarán a usar el nuevo proveedor. Tu app se comporta de la misma manera en que lo harí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