Ottieni un ID pubblicità reimpostabile dall'utente parte di Android Jetpack.

Per proteggere la privacy degli utenti, è consigliabile che tutte le app per Android funzionino con identificatori reimpostabili dall'utente. Uno di questi identificatori è un ID pubblicità, che identifica in modo univoco un determinato utente per i casi d'uso pubblicitari, come la personalizzazione degli annunci.

Per supportare una soluzione di monitoraggio degli annunci standardizzata su tutti i dispositivi che eseguono la tua app, puoi utilizzare la libreria di ID pubblicità. Questa libreria, disponibile sui dispositivi con Android 4.0 (livello API 14) e versioni successive, definisce un'interfaccia per interagire con i fornitori di annunci a livello di sistema. Questa interfaccia consente alla tua app di ricevere valori di ID pubblicità coerenti.

Il fornitore di annunci incluso nella libreria di ID pubblicità definisce anche un intent standard per l'apertura di una schermata delle impostazioni implementata dal fornitore di annunci. Questa schermata delle impostazioni consente all'utente di reimpostare il proprio ID pubblicità e disattivare la personalizzazione degli annunci.

Questa guida spiega come utilizzare il modulo client della libreria di ID pubblicità per ottenere un ID pubblicità coerente per utente del dispositivo. Questa guida presenta poi una panoramica dell'architettura della libreria.

Configura l'app client

Interagendo con il modulo client della libreria di ID pubblicità, l'app può recuperare un ID pubblicità coerente che rappresenta l'utente che interagisce con l'app.

L'ID pubblicità viene rappresentato utilizzando la versione 3 del formato UUID (Universally Unique Identifier) o un formato equivalente a 128 bit:

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

La libreria di ID pubblicità normalizza il valore restituito in base alle esigenze per fornire gli ID utilizzando questo formato.

Per recuperare l'ID pubblicità reimpostabile dall'utente per la tua app, segui questi passaggi:

  1. Verifica se un fornitore di annunci è disponibile chiamando il numero AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Se questo metodo restituisce false, la tua app deve utilizzare un altro mezzo per eseguire tutti i casi d'uso richiesti per il monitoraggio degli annunci.

  2. Per ottenere i dettagli dell'identificatore annuncio, incluso l'ID pubblicità, chiama AdvertisingIdClient.getAdvertisingIdInfo(). La libreria di ID pubblicità esegue questo metodo su un thread di worker e utilizza un timeout della connessione di 10 secondi.

Il seguente snippet di codice mostra come recuperare l'ID pubblicità insieme ad altre informazioni dal fornitore di annunci:

app/build.gradle

Trendy

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

MioIDCliente

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

Architettura della libreria di ID pubblicità

Diagramma dell&#39;architettura
Figura 1. Architettura della libreria di ID pubblicità

La Figura 1 mostra la struttura della libreria di ID pubblicità. La libreria è costituita dai seguenti moduli:

  • Un modulo client, ovvero un livello thin incluso nelle app.
  • Un modulo provider, che viene reso disponibile dal produttore del dispositivo. Le implementazioni di questo modulo devono definire un'UI di impostazioni per offrire agli utenti la possibilità di reimpostare l'ID pubblicità e attivare/disattivare le preferenze di monitoraggio degli annunci.

Il modulo client comunica con il modulo provider per recuperare gli ID pubblicità e le preferenze dell'utente relative al monitoraggio degli annunci.

In che modo la libreria gestisce più provider

Un dispositivo può supportare più fornitori di annunci a livello di sistema contemporaneamente. Se la libreria di ID pubblicità rileva questa situazione, garantisce che la tua app recuperi sempre le informazioni dallo stesso fornitore, supponendo che quest'ultimo rimanga disponibile. Questa procedura consente di mantenere coerente l'ID pubblicità.

Se l'insieme dei fornitori di annunci disponibili cambia nel tempo e la tua app interagisce con un fornitore di identificatori annuncio diverso, anche tutte le altre app client iniziano a utilizzare il nuovo fornitore. La tua app mostra lo stesso comportamento che si sarebbe se l'utente avesse richiesto di reimpostare il proprio ID pubblicità.

La libreria del provider di ID pubblicità utilizza il seguente ordine deterministico per classificare i fornitori:

  1. Provider che hanno richiesto l'autorizzazione androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Provider che sono stati installati sul dispositivo da più tempo.
  3. Fornitori che vengono visualizzati per primi in ordine alfabetico.