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

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

Какие данные SDK собирает, как работать с App Tracking Transparency и идентификаторами устройства и какие инструменты SDK даёт для ваших процессов согласий и удаления данных (GDPR, COPPA). Выполнение требований законодательства и правил магазинов приложений остаётся зоной ответственности владельца приложения.

Для доступа к IDFA нужно разрешение пользователя через ATT. Сначала добавьте NSUserTrackingUsageDescription в Info.plist (см. страницу iOS SDK: установка и инициализация), затем запросите разрешение в подходящий момент — как правило, на экране онбординга:

let status = await Tracehub.requestTrackingAuthorization()
print("ATT статус: \(status)")

Текущий статус без запроса:

let status = Tracehub.appTrackingAuthorizationStatus()
Значение Статус
0 notDetermined — пользователь ещё не видел запрос
1 restricted — отслеживание ограничено настройками устройства
2 denied — пользователь отказал
3 authorized — пользователь разрешил

Чтобы первая сессия ушла уже с учётом решения пользователя, можно задержать отправку очереди на время показа ATT-диалога:

config.attConsentWaitingInterval = 30 // секунды
// SDK задержит отправку очереди до получения ATT-ответа или истечения интервала

Более строгий вариант: не отправлять первую сессию вовсе, пока пользователь не пройдёт экран согласия (ATT, GDPR и т. п.):

// 1. Включить задержку в конфигурации
let config = TracehubConfig(appToken: "ВАШ_APP_TOKEN", environment: .production)
config.enableFirstSessionDelay()
Tracehub.initSdk(config: config)
// 2. Запросить ATT или показать экран согласия
let attStatus = await Tracehub.requestTrackingAuthorization()
// 3. Запустить первую сессию после получения согласия
Tracehub.endFirstSessionDelay()

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

let idfa = Tracehub.getIdfa() // nil, если ATT не авторизован
let idfv = Tracehub.getIdfv() // всегда доступен на реальном устройстве
let thid = Tracehub.getThid() // синхронно; nil до первого ответа сервера
let thid = await Tracehub.getThidAsync(timeout: 5.0) // с ожиданием
Идентификатор Что это Когда доступен
IDFA Рекламный идентификатор Apple Только при ATT-статусе authorized и включённом isIdfaEnabled
IDFV Идентификатор вендора Всегда на реальном устройстве (если не отключён isIdfvEnabled)
THID Идентификатор устройства в Tracehub После первого ответа сервера

Собственные идентификаторы — externalDeviceId (устройство) и customerUserId (пользователь) — задаются в конфигурации, см. страницу iOS SDK: справочник конфигурации.

С каждым запросом SDK отправляет:

Группа Данные
Приложение токен приложения, среда (production/sandbox), bundle ID, версия приложения
Устройство тип и модель устройства, аппаратная платформа, название и версия ОС, язык, страна
Идентификаторы IDFV (если включён), IDFA (только при ATT-статусе authorized и включённом isIdfaEnabled), THID, push-токен (если передан), externalDeviceId и customerUserId (если заданы вами)
Активность счётчики сессий и событий, время в приложении, длительность сессии, интервал с последней активности
Атрибуция статус ATT
Служебные временные метки создания и отправки, версия SDK, случайный идентификатор установки для дедупликации

Данные событий (токен, доход, ваши callback- и partner-параметры) добавляются к этому набору при отправке события.

gdprForgetMe() отправляет запрос на удаление данных устройства и навсегда останавливает отслеживание:

Tracehub.gdprForgetMe()
Tracehub.trackMeasurementConsent(enabled: true) // пользователь дал согласие
Tracehub.trackMeasurementConsent(enabled: false) // пользователь отозвал согласие
// Отключить передачу всем третьим сторонам
Tracehub.trackThirdPartySharing(TracehubThirdPartySharing(isEnabled: false))
// Включить с детальными настройками
let sharing = TracehubThirdPartySharing(isEnabled: true)
sharing.addGranularOption(partnerName: "facebook", key: "data_usage", value: "enabled")
Tracehub.trackThirdPartySharing(sharing)

Для приложений, ориентированных на детей до 13 лет, включите режим COPPA при инициализации:

config.isCoppaEnabled = true

Или динамически в рантайме:

Tracehub.enableCoppaCompliance()
Tracehub.disableCoppaCompliance()

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

Полное отключение и обратное включение (например, по настройке в приложении):

Tracehub.disable() // остановить отслеживание: новые события не отправляются
Tracehub.enable() // возобновить отслеживание
let active = Tracehub.isEnabled()

Режим офлайн — пакеты накапливаются локально и не отправляются; при возврате в онлайн очередь сбрасывается в порядке поступления:

Tracehub.switchToOfflineMode() // накапливать, остановить отправку
Tracehub.switchBackToOnlineMode() // сбросить очередь и возобновить отправку