Настройка Privacy Sandbox Attribution для Android-приложения
Google объявил об отказе от рекламного идентификатора GAID (Google Advertising ID) в пользу Privacy Sandbox APIs — набора технологий, сохраняющих конфиденциальность пользователей при сохранении возможности атрибуции рекламы. Attribution Reporting API внутри Privacy Sandbox — Android-аналог SKAdNetwork, только работает иначе и имеет свои особенности интеграции.
Privacy Sandbox Attribution: что это и как отличается от GAID
С GAID атрибуция была детерминированной: рекламная сеть получала точный идентификатор устройства, MMP матчил его с кликом, и вы знали конкретного пользователя. Privacy Sandbox Attribution работает на уровне устройства без передачи user-level данных:
- Браузер или рекламная сеть регистрирует source (показ/клик рекламы) через Attribution Reporting API
- При установке или in-app событии регистрируется trigger
- Устройство самостоятельно матчит source и trigger
- Агрегированные отчёты отправляются через защищённый сервер без raw user data
Принципиальное отличие от GAID: данные агрегируются на устройстве, не на сервере. Рекламная сеть получает statistical noise (дифференциальную приватность), но не конкретные записи.
Текущий статус и требования
Privacy Sandbox Attribution API на Android требует:
- Android 13+ (SDK 33+) для тестирования
- Приложение должно запрашивать разрешение
android.permission.ACCESS_ADSERVICES_ATTRIBUTION - Объявление
<uses-sdk>с minSdkVersion, совместимым с Ad Services
В AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" />
<application>
<property
android:name="android.adservices.AD_SERVICES_CONFIG"
android:resource="@xml/ad_services_config" />
</application>
Файл res/xml/ad_services_config.xml:
<ad-services-config>
<attribution shouldAllowAdServicesApi="true" />
</ad-services-config>
Регистрация триггера конверсии
После установки или целевого in-app действия приложение регистрирует trigger через MeasurementManager:
import android.adservices.measurement.MeasurementManager
import android.adservices.measurement.TriggerRequest
import android.net.Uri
import androidx.annotation.RequiresApi
@RequiresApi(33)
fun reportConversion(eventType: String, revenue: Double) {
val measurementManager = MeasurementManager.get(context)
// Trigger URI должен совпадать с destination в source-регистрации рекламной сети
val triggerUri = Uri.parse("https://your-ad-network.com/trigger")
val triggerRequest = TriggerRequest.Builder(triggerUri)
.build()
measurementManager.registerTrigger(
triggerRequest,
Executors.newSingleThreadExecutor()
) { outcomeReceiver ->
// outcomeReceiver.result = true при успешной регистрации
}
}
Триггер регистрируется локально на устройстве. Система сама матчит его с ранее зарегистрированным source от рекламной сети.
Поддержка через MMP
Прямая интеграция Attribution Reporting API — трудоёмка и требует серверной инфраструктуры для обработки агрегированных отчётов. На практике правильнее идти через MMP:
AppsFlyer поддерживает Privacy Sandbox Attribution с версии SDK 6.10+. При инициализации SDK достаточно включить режим Privacy Sandbox:
AppsFlyerLib.getInstance().init(devKey, conversionListener, context)
AppsFlyerLib.getInstance().setConsentData(
AppsFlyerConsent.forGDPRUser(
hasConsentForDataUsage = true,
hasConsentForAdsPersonalization = true
)
)
AppsFlyerLib.getInstance().start(context)
SDK сам обращается к Attribution Reporting API если доступен (Android 13+), и fallback на Google Play Referrer для более старых версий.
Adjust аналогично — Adjust SDK 4.36+ поддерживает Privacy Sandbox нативно.
Агрегированные отчёты vs Summary отчёты
Privacy Sandbox предлагает два типа отчётов:
Event-level reports — содержат ограниченное количество данных о конкретных событиях (до 3 бит информации о триггере). Приходят с задержкой 2–30 дней, с добавленным шумом.
Aggregatable reports — суммарные данные по кампаниям. Обрабатываются через Aggregation Service в Google Cloud или AWS — защищённое вычислительное окружение (Trusted Execution Environment). Более полные данные, но требуют серверной инфраструктуры.
Для большинства мобильных приложений на старте достаточно event-level reports через MMP — агрегационный сервис нужен при масштабе тысячи конверсий в день.
Обратная совместимость: GAID ещё работает
Google не отключил GAID одномоментно. На Android 12 и ниже GAID работает как прежде. Privacy Sandbox — это параллельная инфраструктура для Android 13+. Код должен поддерживать оба варианта:
fun getAttributionMethod(context: Context): AttributionMethod {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
AttributionMethod.PRIVACY_SANDBOX
} else {
AttributionMethod.GAID
}
}
MMP SDK делают это автоматически, но при прямой интеграции нужно явно разграничивать.
Что входит в работу
- Добавление разрешений и конфигурации Ad Services в манифест
- Интеграция MMP SDK с поддержкой Privacy Sandbox (AppsFlyer 6.10+ / Adjust 4.36+)
- Регистрация trigger для ключевых конверсионных событий
- Тестирование на эмуляторе Android 13+ с включённым Privacy Sandbox
- Настройка постбэков в рекламных кабинетах
Сроки
3–5 дней при работе через MMP. Прямая интеграция с агрегационным сервисом — до 2 недель. Стоимость рассчитывается индивидуально.







