Получите сбрасываемый пользователем рекламный идентификатор . Часть Android Jetpack .
Для защиты конфиденциальности пользователей рекомендуется использовать в Android-приложениях идентификаторы, которые пользователь может сбросить. Одним из таких идентификаторов является рекламный идентификатор , который однозначно идентифицирует конкретного пользователя в рекламных целях, например, для персонализации рекламы.
Для обеспечения стандартизированного решения по отслеживанию рекламы на всех устройствах, на которых работает ваше приложение, вы можете использовать библиотеку Advertising ID . Эта библиотека, доступная на устройствах под управлением Android 4.0 (уровень API 14) и выше, определяет интерфейс для взаимодействия с системными поставщиками рекламы. Этот интерфейс позволяет вашему приложению получать согласованные значения рекламных идентификаторов.
Поставщик рекламы, входящий в библиотеку рекламных идентификаторов, также определяет стандартное намерение для открытия экрана настроек, который он реализует. Этот экран настроек позволяет пользователю сбросить свой рекламный идентификатор и отказаться от персонализации рекламы.
В этом руководстве объясняется, как использовать клиентский модуль библиотеки рекламных идентификаторов для получения согласованного рекламного идентификатора для каждого устройства и пользователя. Далее в руководстве представлен обзор архитектуры библиотеки.
Настройте клиентское приложение
Взаимодействуя с клиентским модулем библиотеки рекламных идентификаторов, ваше приложение может получать согласованный рекламный идентификатор, представляющий пользователя, взаимодействующего с приложением.
Идентификатор рекламного объявления представлен с использованием версии 3 универсального уникального идентификатора (UUID) или эквивалентного 128-битного формата:
38400000-8cf0-11bd-b23e-10b96e40000d
Библиотека идентификаторов рекламы нормализует возвращаемое значение по мере необходимости, чтобы предоставлять идентификаторы, использующие этот формат.
Чтобы получить рекламный идентификатор для вашего приложения, который может быть сброшен пользователем, выполните следующие шаги:
Проверьте доступность поставщика рекламы, вызвав метод
AdvertisingIdClient.isAdvertisingIdProviderAvailable(). Если этот метод возвращаетfalse, вашему приложению необходимо использовать другой способ для выполнения необходимых сценариев отслеживания рекламы.Чтобы получить подробную информацию об идентификаторе объявления, включая сам рекламный идентификатор, вызовите метод
AdvertisingIdClient.getAdvertisingIdInfo(). Библиотека Advertising ID выполняет этот метод в рабочем потоке и использует 10-секундный таймаут соединения.
Приведенный ниже фрагмент кода демонстрирует, как получить рекламный идентификатор вместе с другой информацией от поставщика рекламы:
app/build.gradle
Классный
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' }
Котлин
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
Котлин
// 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.
}
}
Архитектура библиотеки рекламных идентификаторов
На рисунке 1 показана структура библиотеки рекламных идентификаторов. Библиотека состоит из следующих модулей:
- Клиентский модуль , представляющий собой тонкий слой, встраиваемый в приложения.
- Модуль поставщика , предоставляемый производителем устройства. Реализации этого модуля должны определять пользовательский интерфейс настроек, позволяющий пользователям сбрасывать свой рекламный идентификатор и переключать параметры отслеживания рекламы.
Клиентский модуль взаимодействует с модулем поставщика для получения идентификаторов рекламных объявлений и пользовательских настроек в отношении отслеживания рекламы.
Как библиотека взаимодействует с несколькими поставщиками услуг
Устройство может одновременно поддерживать несколько поставщиков рекламы на системном уровне. Если библиотека идентификаторов рекламы обнаруживает такую ситуацию, она проверяет, что ваше приложение всегда получает информацию от одного и того же поставщика, при условии, что этот поставщик остается доступным. Этот процесс обеспечивает согласованность идентификатора рекламы.
Если набор доступных поставщиков рекламы со временем меняется, и ваше приложение взаимодействует с другим поставщиком идентификаторов рекламы, все остальные клиентские приложения также начинают использовать этого нового поставщика. Ваше приложение демонстрирует такое же поведение, как если бы пользователь запросил сброс своего рекламного идентификатора.
Библиотека поставщиков рекламных идентификаторов использует следующий детерминированный порядок для ранжирования поставщиков:
- Поставщики, запросившие разрешение
androidx.ads.identifier.provider.HIGH_PRIORITY. - Поставщики услуг, которые установлены на устройстве дольше всего.
- Поставщики услуг, указанные первыми в алфавитном порядке.