Android Jetpack'in bir parçası olan, kullanıcı tarafından sıfırlanabilir reklam kimliği edinin.

Kullanıcı gizliliğini korumak amacıyla, tüm Android uygulamalarının kullanıcı tarafından sıfırlanabilir tanımlayıcılarla çalışması en iyi uygulamadır. Bu tür bir tanımlayıcı, reklam kişiselleştirme gibi reklamcılık kullanım alanları için belirli bir kullanıcıyı benzersiz bir şekilde tanımlayan reklam kimliğidir.

Uygulamanızı çalıştıran cihazlarda standart bir reklam izleme çözümünü desteklemek için Reklam Kimliği kitaplığını kullanabilirsiniz. Android 4.0 (API düzeyi 14) ve sonraki sürümleri çalıştıran cihazlarda kullanılabilen bu kitaplık, sistem düzeyinde reklam sağlayıcılarla etkileşim kurmak için bir arayüz tanımlar. Bu arayüz, uygulamanızın tutarlı reklam kimliği değerleri almasını sağlar.

Reklam Kimliği kitaplığına dahil olan reklam sağlayıcı, reklam sağlayıcının uyguladığı bir ayar ekranını açmak için standart bir amaç da tanımlar. Bu ayarlar ekranı, kullanıcının reklam kimliğini sıfırlamasına ve reklam kişiselleştirmeyi devre dışı bırakmasına olanak tanır.

Bu kılavuzda, cihaz bazında tutarlı bir reklam kimliği elde etmek için reklam kimliği kitaplığının istemci modülünün nasıl kullanılacağı açıklanmaktadır. Bu kılavuz, daha sonra kütüphanenin mimarisine genel bir bakış sunar.

İstemci uygulamanızı yapılandırın

Uygulamanız, reklam kimliği kitaplığının istemci modülüyle etkileşim kurarak uygulamayla etkileşim kuran kullanıcıyı temsil eden tutarlı bir reklam kimliği alabilir.

Reklam kimliği, evrensel olarak benzersiz tanımlayıcı (UUID) biçiminin 3. sürümü veya eşdeğer 128 bit biçimi kullanılarak temsil edilir:

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

Reklam Kimliği kitaplığı, bu biçimi kullanan kimlikleri sağlamak için döndürülen değeri gerektiği şekilde normalleştirir.

Uygulamanızın kullanıcı tarafından sıfırlanabilir reklam kimliğini almak için aşağıdaki adımları tamamlayın:

  1. AdvertisingIdClient.isAdvertisingIdProviderAvailable() numaralı telefonu arayarak bir reklam sağlayıcısının mevcut olup olmadığını kontrol edin. Bu yöntem false değerini döndürürse uygulamanız gerekli reklam izleme kullanım alanlarını gerçekleştirmek için başka bir yöntem kullanmalıdır.

  2. Reklam kimliği de dahil olmak üzere reklam tanımlayıcısı ayrıntılarını öğrenmek için AdvertisingIdClient.getAdvertisingIdInfo() numaralı telefonu arayın. Reklam Kimliği kitaplığı, bu yöntemi bir çalışan iş parçacığında yürütür ve 10 saniyelik bir bağlantı zaman aşımı kullanır.

Aşağıdaki kod snippet'inde, reklam sağlayıcısından diğer bilgilerle birlikte reklam kimliğinin nasıl alınacağı gösterilmektedir:

app/build.gradle

Modern

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

ReklamKimliğim

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

Reklam kimliği kitaplık mimarisi

Mimari şeması
Şekil 1. Reklam kimliği kitaplığı mimarisi

Şekil 1'de, Reklam Kimliği kitaplığının yapısı gösterilmektedir. Kitaplık aşağıdaki modüllerden oluşur:

  • Uygulamalarda bulunan ince bir katman olan istemci modülü.
  • Cihaz üreticisinin sunduğu bir sağlayıcı modülü. Bu modülün uygulamaları, kullanıcılara reklam kimliklerini sıfırlama ve reklam izleme tercihlerini açma/kapatma imkanı sağlamak için bir ayarlar kullanıcı arayüzü tanımlamalıdır.

İstemci modülü, reklam kimliklerini ve reklam izlemeyle ilgili kullanıcı tercihlerini almak için sağlayıcı modülüyle iletişim kurar.

Kitaplık birden fazla sağlayıcıyı nasıl ele alır?

Bir cihaz, aynı anda birden çok sistem düzeyinde reklam sağlayıcıyı destekleyebilir. Reklam Kimliği kitaplığı bu durumu tespit ederse sağlayıcının kullanılabilir durumda kaldığını varsayarak uygulamanızın her zaman aynı sağlayıcıdan bilgi almasını sağlar. Bu işlem, reklam kimliğinin tutarlı kalmasını sağlar.

Mevcut reklam sağlayıcı grubu zamanla değişirse ve uygulamanız farklı bir reklam tanımlayıcısıyla etkileşime girerse diğer tüm istemci uygulamaları da bu yeni sağlayıcıyı kullanmaya başlar. Kullanıcı, reklam kimliğini sıfırlamak isteseydi gerçekleşecek olan davranış, uygulamanızda duracaktır.

Reklam kimliği sağlayıcı kitaplığı, sağlayıcıları sıralamak için aşağıdaki belirleyici sırayı kullanır:

  1. androidx.ads.identifier.provider.HIGH_PRIORITY iznini isteyen sağlayıcılar.
  2. Cihaza en uzun süredir yüklü olan sağlayıcılar.
  3. Alfabetik sırayla ilk sırada gösterilen sağlayıcılar.