Перейти к содержимому

Приватность и идентификаторы

Какие идентификаторы SDK читает, как ими управлять и как передавать решения пользователя о согласии — GDPR, COPPA и требования Google Play в одном месте.

Основной рекламный идентификатор на Android — Google Advertising ID (GAID). На Android 13+ для его чтения приложению нужно разрешение AD_ID — подробности и резервное использование android_id описаны на странице Android SDK: установка и инициализация. На китайских устройствах без Google-сервисов используется OAID через плагин sdk-plugin-oaid (там же).

Управление чтением идентификаторов — в конфигурации:

Метод Что делает
disableAppSetIdReading() Отключает чтение Android App Set ID
enableDeviceIdsReadingOnce() Читать Google Advertising ID только один раз за жизненный цикл SDK

Прочитать текущие значения можно асинхронными геттерами Tracehub.getGoogleAdId { } (требует Play Services) и Tracehub.getAmazonAdId { } (требует Amazon Ads SDK); при отсутствии соответствующего SDK в обратный вызов приходит null.

Идентификаторы пользователя и устройства

Заголовок раздела «Идентификаторы пользователя и устройства»

SDK принимает два ваших собственных идентификатора — они решают разные задачи:

Метод Что описывает Зачем
setCustomerUserId("userId") Пользователя в вашей системе Передаётся со всеми последующими запросами SDK
setExternalDeviceId("deviceId") Устройство Привязка собственного ID устройства ко всем запросам

setExternalDeviceId задаётся в конфигурации. setCustomerUserId есть и в конфигурации, и как runtime-метод — потому что приложение обычно узнаёт идентификатор пользователя только после входа, то есть позже инициализации SDK:

// после успешного логина
Tracehub.setCustomerUserId("user-uuid")
// при выходе из учётной записи
Tracehub.clearCustomerUserId()

clearCustomerUserId() снимает и значение, заданное в конфигурации: разлогиненное устройство не должно сообщать прежнего пользователя.

Передавайте решение пользователя о согласии на измерение (например, в рамках GDPR или CCPA):

Tracehub.trackMeasurementConsent(true) // пользователь дал согласие
Tracehub.trackMeasurementConsent(false) // пользователь отозвал согласие

Управляйте передачей данных партнёрам — целиком или детально по каждому:

// Отключить передачу всем третьим сторонам
Tracehub.trackThirdPartySharing(TracehubThirdPartySharing(isEnabled = false))
// Включить с детальными настройками
val sharing = TracehubThirdPartySharing(isEnabled = true).apply {
addGranularOption("facebook", "data_usage", "enabled")
addPartnerSharingSetting("applovin", "limit_data_use", false)
}
Tracehub.trackThirdPartySharing(sharing)

По требованию пользователя отправьте запрос на удаление данных устройства:

Tracehub.gdprForgetMe(context)
Метод конфигурации Когда обязателен
enableCoppaCompliance() Приложение предназначено детям до 13 лет (COPPA)
enablePlayStoreKidsCompliance() Приложение размещено в разделе «Для семьи» Google Play

Оба метода отключают сбор GAID; разрешение AD_ID в манифесте приложения при этом объявлять не нужно — см. страницу Android SDK: установка и инициализация.

Состав данных, которые допустимо собирать в детских приложениях, и выполнение требований COPPA и правил Google Play остаются зоной ответственности владельца приложения — актуальный перечень собираемых полей уточняйте в поддержке Tracehub.

Если пользователь сначала должен пройти экран согласия, первую сессию можно придержать — SDK ничего не отправляет до вызова endFirstSessionDelay() или истечения таймаута задержки (по умолчанию 5 минут, настраивается аргументом enableFirstSessionDelay(timeoutMs)):

// 1. Включить задержку в конфигурации
val config = TracehubConfig.Builder(...)
.enableFirstSessionDelay()
.build()
Tracehub.initSdk(config)
// 2. При необходимости скорректировать настройки до отправки первой сессии
Tracehub.enableCoppaComplianceInDelay() // отключить сбор GAID
Tracehub.setExternalDeviceIdInDelay("device-id") // задать свой идентификатор устройства
// 3. Запустить первую сессию после получения согласия
onConsentGranted {
Tracehub.endFirstSessionDelay()
}

События и другие вызовы, сделанные до endFirstSessionDelay(), накапливаются в очереди и отправляются сразу после первой сессии с сохранением порядка.