Uzyskaj identyfikator wyświetlania reklam, który użytkownik może zresetować. Część Android Jetpack.

Aby chronić prywatność użytkowników, zalecamy, aby wszystkie aplikacje na Androida działały z identyfikatorami, które użytkownik może zresetować. Jednym z takich identyfikatorów jest identyfikator wyświetlania reklam, jednoznacznie identyfikuje konkretnego użytkownika na potrzeby przypadków użycia reklam, takich jak reklama, i personalizacji reklam.

Aby obsługiwać ustandaryzowane rozwiązanie do śledzenia reklam na urządzeniach, na których działa Twoja aplikacja, możesz użyć biblioteki identyfikatora wyświetlania reklam. Ta biblioteka jest dostępna na urządzeniach z Androidem 4.0 (poziom interfejsu API 14) lub nowszym i określa interfejs do interakcji z dostawcami reklam na poziomie systemu. Dzięki temu aplikacja będzie otrzymywać spójne wartości identyfikatora wyświetlania reklam.

Dostawca reklam, który jest uwzględniony w bibliotece Advertising ID, definiuje też standardowy zamiar otwarcia ekranu ustawień, który implementuje. Ten ekran ustawień umożliwia użytkownikowi zresetowanie identyfikatora wyświetlania reklam i rezygnację z personalizacji reklam.

Z tego przewodnika dowiesz się, jak korzystać z modułu klienta w bibliotece identyfikatorów wyświetlania reklam by uzyskać spójny identyfikator wyświetlania reklam dla poszczególnych użytkowników urządzeń. Ten przewodnik a następnie prezentuje przegląd architektury biblioteki.

Konfigurowanie aplikacji klienta

Dzięki interakcji z modułem klienta biblioteki identyfikatora wyświetlania reklam aplikacja może pobrać spójny identyfikator wyświetlania reklam, który reprezentuje użytkownika korzystającego z aplikacji.

Identyfikator wyświetlania reklam jest podawany w wersji 3 uniwersalnego unikalnego identyfikatora identyfikator (UUID) format lub odpowiednik 128-bitowy:

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

Biblioteka identyfikatorów wyświetlania reklam normalizuje zwracaną wartość w taki sposób, aby identyfikatory były w tym formacie.

Aby pobrać identyfikator wyświetlania reklam aplikacji, który użytkownik może zresetować, wypełnij pole następujące kroki:

  1. Aby sprawdzić, czy dostawca reklam jest dostępny, zadzwoń pod numer AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Jeśli ta metoda zwraca false, aplikacja powinna w inny sposób wykonać wymagane śledzenie reklam i przypadków użycia.

  2. Aby uzyskać szczegółowe informacje o identyfikatorze wyświetlania reklam, w tym o identyfikatorze wyświetlania reklam, wykonaj połączenie telefoniczne AdvertisingIdClient.getAdvertisingIdInfo() Biblioteka identyfikatora wyświetlania reklam wykonuje tę metodę na wątku roboczym i używa 10-sekundowego limitu czasu połączenia.

Fragment kodu poniżej pokazuje, jak pobrać identyfikator wyświetlania reklam wraz z innymi informacjami od dostawcy reklam:

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

Architektura biblioteki identyfikatora wyświetlania reklam

Schemat architektury
Rysunek 1. Architektura biblioteki identyfikatorów wyświetlania reklam

Rysunek 1 przedstawia strukturę biblioteki identyfikatorów wyświetlania reklam. Biblioteka składa się z następujących modułów:

  • Moduł klienta, czyli cienka warstwa zawarta w aplikacjach.
  • Moduł dostawcy udostępniany przez producenta urządzenia. Implementacje tego modułu muszą zdefiniować interfejs ustawień, aby umożliwić użytkownikom zresetowanie identyfikatora wyświetlania reklam i przełączanie ustawień śledzenia reklam.

Moduł klienta komunikuje się z modułem dostawcy, aby pobrać identyfikatory reklamowe i preferencje użytkownika dotyczące śledzenia reklam.

Obsługa wielu dostawców przez bibliotekę

Urządzenie może obsługiwać jednocześnie wielu dostawców reklam na poziomie systemu. Gdy biblioteka identyfikatorów wyświetlania reklam wykryje taką sytuację, aplikacja zawsze pobiera informacje od tego samego dostawcy, przy założeniu, że dostawcy usług jest nadal dostępny. Dzięki temu identyfikator wyświetlania reklam jest spójny.

Jeśli zestaw dostępnych dostawców reklam zmienia się z czasem, a Twoja aplikacja wejdzie w interakcję z innym dostawcą identyfikatora reklamy, wszystkie inne aplikacje klienckie z tym nowym dostawcą. Twoja aplikacja działa tak samo, jak gdyby użytkownik poprosił o zresetowanie identyfikatora wyświetlania reklam.

Biblioteka dostawcy identyfikatora wyświetlania reklam używa tego porządku deterministycznego do uszereguj dostawców w rankingu:

  1. Dostawcy, którzy poprosili o uprawnienie androidx.ads.identifier.provider.HIGH_PRIORITY.
  2. Dostawcy, którzy byli instalowani na urządzeniu najdłużej.
  3. dostawcy, którzy pojawiają się jako pierwsi w kolejności alfabetycznej;