Uzyskaj możliwy do zresetowania przez użytkownika identyfikator wyświetlania reklam będący częścią Androida Jetpack.

Aby chronić prywatność użytkownika, sprawdzoną metodą jest, aby wszystkie aplikacje na Androida korzystały z identyfikatorów możliwych do zresetowania przez użytkownika. Jednym z takich identyfikatorów jest identyfikator wyświetlania reklam, który jednoznacznie identyfikuje konkretnego użytkownika na potrzeby przypadków użycia związanych z reklamami, takich jak personalizacja reklam.

Aby obsługiwać standardowe rozwiązanie do śledzenia reklam na różnych urządzeniach, na których działa Twoja aplikacja, możesz użyć biblioteki identyfikatora wyświetlania reklam. Ta biblioteka, która jest dostępna na urządzeniach z Androidem 4.0 (poziom interfejsu API 14) lub nowszym, definiuje interfejs do interakcji z dostawcami reklam na poziomie systemu. Ten interfejs umożliwia aplikacji otrzymywanie spójnych wartości identyfikatora wyświetlania reklam.

Dostawca reklam uwzględniony w bibliotece identyfikatorów wyświetlania reklam określa też standardową intencję związaną z otwieraniem ekranu ustawień wdrażanego przez dostawcę. Na tym ekranie użytkownik może zresetować swój identyfikator wyświetlania reklam i zrezygnować z personalizacji reklam.

Z tego przewodnika dowiesz się, jak korzystać z modułu klienta w bibliotece identyfikatorów wyświetlania reklam, aby uzyskiwać ten sam identyfikator wyświetlania reklam dla poszczególnych użytkowników. Niniejszy przewodnik zawiera omówienie architektury biblioteki.

Konfigurowanie aplikacji klienckiej

Gdy wchodzisz w interakcję z modułem klienta w bibliotece identyfikatorów wyświetlania reklam, Twoja aplikacja może pobierać spójny identyfikator wyświetlania reklam reprezentujący użytkownika wchodzącego w interakcję z aplikacją.

Identyfikator wyświetlania reklam jest podawany w wersji 3 formatu UUID lub w odpowiednim formacie 128-bitowym:

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

Biblioteka identyfikatorów wyświetlania reklam normalizuje zwracaną wartość w razie potrzeby, aby można było podawać identyfikatory w tym formacie.

Aby pobrać identyfikator wyświetlania reklam możliwy do zresetowania przez użytkownika:

  1. Aby sprawdzić, czy masz dostęp do konkretnego dostawcy reklam, zadzwoń pod numer AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Jeśli ta metoda zwraca wartość false, aplikacja powinna używać innego sposobu śledzenia reklam.

  2. Aby uzyskać szczegóły identyfikatora reklamy, w tym identyfikator wyświetlania reklam, wywołaj metodę AdvertisingIdClient.getAdvertisingIdInfo(). Biblioteka identyfikatorów wyświetlania reklam wykonuje tę metodę w wątku instancji roboczej i wykorzystuje limit czasu połączenia po 10 sekundach.

Ten fragment kodu pokazuje, jak pobrać identyfikator wyświetlania reklam wraz z innymi informacjami od dostawcy reklam:

app/build.gradle,

Odlotowy

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

Mój identyfikator klienta

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

Architektura biblioteki identyfikatora wyświetlania reklam

Schemat architektury
Rysunek 1. Architektura biblioteki identyfikatora wyświetlania reklam

Rysunek 1 przedstawia strukturę biblioteki identyfikatora wyświetlania reklam. Biblioteka składa się z tych modułów:

  • Moduł klienta, czyli cienka warstwa zawarta w aplikacjach.
  • Moduł dostawcy udostępniany przez producenta urządzenia. Implementacje tego modułu muszą definiować interfejs ustawień, aby użytkownicy mogli zresetować identyfikator wyświetlania reklam i przełączać ustawienia śledzenia reklam.

Moduł klienta komunikuje się z modułem dostawcy w celu pobierania identyfikatorów wyświetlania reklam i ustawień użytkownika dotyczących śledzenia reklam.

Jak biblioteka obsługuje wielu dostawców

Urządzenie może obsługiwać wielu dostawców reklam na poziomie systemu jednocześnie. Jeśli biblioteka identyfikatorów wyświetlania reklam wykryje taką sytuację, aplikacja zawsze będzie pobierać informacje od tego samego dostawcy (o ile jest on dostępny). Dzięki temu identyfikator wyświetlania reklam jest spójny.

Jeśli zbiór dostępnych dostawców reklam zmienia się z czasem, a Twoja aplikacja wchodzi w interakcję z innym dostawcą identyfikatorów reklam, wszystkie pozostałe aplikacje klienckie również zaczynają korzystać z tego dostawcy. Aplikacja prezentuje to samo działanie, co miałoby miejsce, gdyby użytkownik poprosił o zresetowanie identyfikatora wyświetlania reklam.

Biblioteka dostawców identyfikatora wyświetlania reklam ustala ranking dostawców według tej deterministycznej kolejności:

  1. Dostawcy, którzy poprosili o uprawnienie androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Dostawcy, którzy są instalowani na urządzeniu najdłużej.
  3. Usługodawcy, którzy pojawiają się na początku w kolejności alfabetycznej.