Obtenir un identifiant publicitaire réinitialisable par l'utilisateur Fait partie d'Android Jetpack

Pour protéger la confidentialité des utilisateurs, il est recommandé que toutes les applications Android fonctionnent avec des identifiants réinitialisables par l'utilisateur. L'un de ces identifiants est l'identifiant publicitaire, qui identifie de manière unique un utilisateur particulier pour des cas d'utilisation publicitaires, tels que la personnalisation des annonces.

Pour mettre en place une solution standardisée de suivi des annonces sur les appareils exécutant votre application, vous pouvez utiliser la bibliothèque d'identifiants publicitaires. Cette bibliothèque, disponible sur les appareils équipés d'Android 4.0 (niveau d'API 14) ou version ultérieure, définit une interface permettant d'interagir avec les fournisseurs d'annonces au niveau du système. Cette interface permet à votre application de recevoir des valeurs d'identifiant publicitaire cohérentes.

Le fournisseur d'annonces inclus dans la bibliothèque d'identifiants publicitaires définit également un intent standard pour ouvrir un écran de paramètres implémenté par le fournisseur d'annonces. Cet écran de paramètres permet à l'utilisateur de réinitialiser son identifiant publicitaire et de désactiver la personnalisation des annonces.

Ce guide explique comment utiliser le module client de la bibliothèque d'identifiants publicitaires pour obtenir un identifiant publicitaire cohérent par utilisateur et par appareil. Ce guide présente ensuite l'architecture de la bibliothèque.

Configurer votre application cliente

En interagissant avec le module client de la bibliothèque d'identifiants publicitaires, votre application peut récupérer un identifiant publicitaire cohérent qui représente l'utilisateur qui interagit avec l'application.

L'identifiant publicitaire est représenté à l'aide de la version 3 du format d'identifiant unique universel (UUID) ou d'un format 128 bits équivalent:

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

La bibliothèque d'identifiants publicitaires normalise la valeur renvoyée si nécessaire pour fournir des identifiants à l'aide de ce format.

Pour récupérer l'identifiant publicitaire réinitialisable par l'utilisateur de votre application, procédez comme suit:

  1. Pour vérifier si un fournisseur d'annonces est disponible, appelez AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Si cette méthode renvoie false, votre application doit utiliser un autre moyen pour effectuer les cas d'utilisation requis du suivi des annonces.

  2. Obtenez les détails de l'identifiant de l'annonce, y compris l'identifiant publicitaire, en appelant AdvertisingIdClient.getAdvertisingIdInfo(). La bibliothèque d'identifiants publicitaires exécute cette méthode sur un thread de nœud de calcul et utilise un délai d'expiration de la connexion de 10 secondes.

L'extrait de code suivant montre comment récupérer l'identifiant publicitaire ainsi que d'autres informations auprès du fournisseur d'annonces:

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")
}

MonAdIdClient

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

Architecture de la bibliothèque d'identifiants publicitaires

Schéma de l&#39;architecture
Figure 1. Architecture de la bibliothèque d'identifiants publicitaires

La figure 1 illustre la structure de la bibliothèque d'identifiants publicitaires. La bibliothèque se compose des modules suivants:

  • Un module client, qui est une couche fine incluse dans les applications.
  • Un module du fournisseur, mis à disposition par le fabricant de l'appareil Les implémentations de ce module doivent définir une UI de paramètres permettant aux utilisateurs de réinitialiser leur identifiant publicitaire et d'activer/de désactiver les préférences de suivi des annonces.

Le module client communique avec le module du fournisseur pour récupérer les identifiants publicitaires et les préférences des utilisateurs concernant le suivi des annonces.

Gestion de plusieurs fournisseurs dans la bibliothèque

Un appareil peut être compatible simultanément avec plusieurs fournisseurs d'annonces au niveau du système. Si la bibliothèque d'identifiants publicitaires détecte cette situation, elle garantit que votre application récupère toujours les informations auprès du même fournisseur, en supposant que celui-ci reste disponible. Ce processus garantit la cohérence de l'identifiant publicitaire.

Si l'ensemble de fournisseurs d'annonces disponibles change au fil du temps et que votre application interagit avec un autre fournisseur d'identifiants d'annonces, toutes les autres applications clientes commencent également à utiliser ce nouveau fournisseur. Votre application présente le même comportement que celui qui se produirait si l'utilisateur avait demandé la réinitialisation de son identifiant publicitaire.

La bibliothèque des fournisseurs d'identifiants publicitaires utilise l'ordre déterministe suivant pour classer les fournisseurs:

  1. Fournisseurs ayant demandé l'autorisation androidx.ads.identifier.provider.HIGH_PRIORITY
  2. Fournisseurs installés sur l'appareil depuis le plus longtemps.
  3. Fournisseurs qui apparaissent en premier dans l'ordre alphabétique.