Приватность и идентификаторы
Какие данные SDK собирает, как работать с App Tracking Transparency и идентификаторами устройства и какие инструменты SDK даёт для ваших процессов согласий и удаления данных (GDPR, COPPA). Выполнение требований законодательства и правил магазинов приложений остаётся зоной ответственности владельца приложения.
App Tracking Transparency
Заголовок раздела «App Tracking Transparency»Для доступа к 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() // сбросить очередь и возобновить отправку
