Справочник конфигурации
Все параметры TracehubConfig.Builder и runtime-методы управления SDK на одной странице: состояние, чтение значений, push-токен, собственные домены, HMAC-подпись и TLS-пиннинг.
Параметры Builder
Заголовок раздела «Параметры Builder»Все параметры задаются до вызова .build().
Обязательные
Заголовок раздела «Обязательные»| Метод | Описание |
|---|---|
Builder(context, appToken, environment) |
Контекст приложения, токен приложения и окружение: Environment.PRODUCTION или Environment.SANDBOX |
Логирование
Заголовок раздела «Логирование»| Метод | По умолчанию | Значения |
|---|---|---|
setLogLevel(LogLevel) |
INFO |
VERBOSE, DEBUG, INFO, WARN, ERROR, SUPPRESS |
Слушатели
Заголовок раздела «Слушатели»| Метод | Когда вызывается |
|---|---|
setOnAttributionChangedListener { attr -> } |
При получении или изменении данных атрибуции |
setOnSessionTrackingSucceededListener { s -> } |
После успешной отправки сессии |
setOnSessionTrackingFailedListener { f -> } |
При ошибке отправки сессии |
setOnEventTrackingSucceededListener { e -> } |
После успешной отправки события |
setOnEventTrackingFailedListener { f -> } |
При ошибке отправки события |
setOnDeferredDeeplinkResponseListener { url -> true } |
При получении отложенного диплинка; верните true, чтобы SDK открыл ссылку |
Идентификаторы
Заголовок раздела «Идентификаторы»| Метод | Описание |
|---|---|
setExternalDeviceId("deviceId") |
Привязать собственный идентификатор устройства ко всем запросам |
setCustomerUserId("userId") |
Привязать идентификатор пользователя в вашей системе — ключ связывания устройств одного человека |
setDefaultTracker("XYZ123") |
Предустановить токен трекера для органических установок |
disableAppSetIdReading() |
Отключить чтение Android App Set ID |
enableDeviceIdsReadingOnce() |
Читать GAID только один раз за жизненный цикл SDK |
customerUserId
Заголовок раздела «customerUserId»Приложение обычно узнаёт идентификатор пользователя только после входа, то есть позже initSdk. Поэтому кроме конфигурации есть методы времени выполнения:
// после успешного входаTracehub.setCustomerUserId("user-uuid")
// при выходе из учётной записиTracehub.clearCustomerUserId()Значение уходит со всеми последующими запросами SDK и не сохраняется между запусками приложения — задавайте его заново при каждом старте, как только идентификатор известен. clearCustomerUserId() снимает и значение, заданное в TracehubConfig: разлогиненное устройство не должно сообщать прежнего пользователя.
Соответствие требованиям
Заголовок раздела «Соответствие требованиям»| Метод | Описание |
|---|---|
enableCoppaCompliance() |
Отключить сбор GAID — для приложений, предназначенных детям до 13 лет |
enablePlayStoreKidsCompliance() |
Отключить сбор GAID — для приложений в разделе «Для семьи» Google Play |
enableFirstSessionDelay() |
Не отправлять первую сессию до вызова Tracehub.endFirstSessionDelay() или истечения таймаута (по умолчанию 5 минут) |
Сеть и безопасность
Заголовок раздела «Сеть и безопасность»| Метод | Описание |
|---|---|
setUrlStrategyDomains(domains, useSubdomains, isDataResidency) |
Переопределить домены эндпоинтов SDK |
setSendingInBackground(true) |
Продолжать отправку очереди в фоне |
setHmacSecretKey("secret") |
Подписывать каждый запрос HMAC-SHA256 — см. раздел «HMAC-подпись запросов» ниже |
setTlsConfig(TracehubTlsConfig) |
TLS-пиннинг публичного ключа и/или дополнительные корневые сертификаты |
disableTlsPinning() |
Отключить пиннинг (собственные trust-anchors остаются активными) |
Данные атрибуции и дистрибуция
Заголовок раздела «Данные атрибуции и дистрибуция»| Метод | Описание |
|---|---|
setStoreInfo(TracehubStoreInfo) |
Название и ID магазина для дистрибуции не через Google Play |
setSdkPrefix("unity4.38.0") |
Префикс SDK в запросах (для SDK-обёрток) |
Управление состоянием
Заголовок раздела «Управление состоянием»Tracehub.disable() // остановить отслеживаниеTracehub.enable() // возобновить отслеживаниеВ режиме офлайн SDK накапливает пакеты локально и не отправляет их; при возврате в онлайн очередь отправляется в порядке поступления:
Tracehub.setOfflineMode(true) // накапливать, не отправлятьTracehub.setOfflineMode(false) // отправить очередь и продолжить как обычноПсевдонимы: switchToOfflineMode() / switchBackToOnlineMode().
Чтение значений SDK
Заголовок раздела «Чтение значений SDK»Все геттеры асинхронные, обратные вызовы выполняются в фоновом потоке:
Tracehub.isEnabled { enabled -> } // включено ли отслеживаниеTracehub.getSdkVersion { version -> } // версия SDK, например "android1.0.0"Tracehub.getThid { thid -> } // идентификатор устройства Tracehub (null, если ещё не получен)Tracehub.getThidWithTimeout(timeoutMs = 5_000L) { thid -> }Tracehub.getAttribution { attr -> } // см. страницу [Android SDK: диплинки и атрибуция](/sdk/android/deeplinks/)Tracehub.getGoogleAdId { gaid -> } // GAID (требует Play Services)Tracehub.getAmazonAdId { amzid -> } // Amazon Advertising IDTracehub.getLastDeeplink { uri -> } // последний обработанный диплинкДетали реферера Google Play читаются через Tracehub.getGooglePlayInstallReferrer(context, listener).
Push-токен
Заголовок раздела «Push-токен»SDK принимает push-токен устройства — передавайте его при каждом обновлении от Firebase:
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) { Tracehub.setPushToken(token) }}Собственные домены
Заголовок раздела «Собственные домены»Весь трафик SDK можно направить через свой домен — например, через прокси в вашем контуре:
TracehubConfig.Builder(...) .setUrlStrategyDomains( domains = listOf("analytics.eu.mycompany.com"), useSubdomains = false, isDataResidency = true, )При isDataResidency = true SDK шлёт трафик только на указанные домены — резервного переключения на стандартные домены Tracehub нет. При isDataResidency = false указанные домены используются первыми, а стандартный домен Tracehub остаётся резервным на случай их недоступности.
HMAC-подпись запросов
Заголовок раздела «HMAC-подпись запросов»При включении каждый исходящий запрос SDK несёт заголовок X-Tracehub-Signature, подписанный HMAC-SHA256. Секрет никогда не передаётся по сети — только дайджест.
Секрет — в кабинете Tracehub: раздел «Приложения» → карточка приложения → вкладка «SDK». Секрет выдаётся на приложение и является приватным: не встраивайте его в веб-страницы и не делите между приложениями.
| Кто | Что может |
|---|---|
| Владелец, администратор организации | Выпустить секрет и перевыпустить его |
| Остальные участники, в том числе внешние (агентства) | Только увидеть значение секрета, если есть доступ к приложению |
TracehubConfig.Builder(context, "ВАШ_APP_TOKEN", Environment.PRODUCTION) .setHmacSecretKey("ваш-секрет") .build()Формат заголовка:
X-Tracehub-Signature: v1:{appToken}:{unixTimestampSecs}:{hexSignature}Ротация: новый ключ начинает действовать сразу после перевыпуска в кабинете, старый работает ещё 48 часов — выпустите обновление приложения с новым ключом в это окно, и трафик не потеряется. Обращаться в поддержку для выпуска или смены секрета не нужно. SDK читает ключ один раз при инициализации, поэтому ротация вступает в силу при следующем запуске приложения с обновлённой сборкой.
Что учесть при внедрении:
- Запрос с невалидной подписью отклоняется с кодом 401 и повторно не отправляется. Проверьте секрет на тестовом устройстве до релиза: с неверным или устаревшим ключом события в кабинет не попадут.
- Если системные часы устройства расходятся с серверными больше допуска (по умолчанию 5 минут), запросы будут отклоняться до восстановления времени.
- В гибридных (WebView) интеграциях подпись задаётся в нативной конфигурации SDK вызовом
setHmacSecretKey; из JavaScript через WebBridge этот параметр не передаётся.
TLS-пиннинг публичного ключа
Заголовок раздела «TLS-пиннинг публичного ключа»Пиннинг привязывает HTTPS-соединения SDK к конкретному набору SHA-256-отпечатков публичных ключей (SPKI) — скомпрометированный корневой сертификат в хранилище устройства не поможет злоумышленнику перехватить трафик SDK. Пиннинг выключен по умолчанию: без setTlsConfig(...) SDK доверяет системному хранилищу сертификатов Android.
TracehubTlsConfig даёт два независимых механизма:
| Механизм | Метод | Роль |
|---|---|---|
| Trust-anchors | addTrustAnchorFromPem(pem) / addTrustAnchorFromDer(der) |
Добавить CA-сертификаты, которых нет в Android, — прежде всего корень Минцифры (Russian Trusted Root CA) |
| Пины ключей | addHostPin(host, primary, backup) |
Требовать в цепочке сервера один из двух указанных SPKI-отпечатков |
val tls = TracehubTlsConfig.Builder() .addHostPin( "*.tracehub.ru", primarySpki = "sha256/ОСНОВНОЙ_ОТПЕЧАТОК=", backupSpki = "sha256/РЕЗЕРВНЫЙ_ОТПЕЧАТОК=", ) .build()
TracehubConfig.Builder(context, "ВАШ_APP_TOKEN", Environment.PRODUCTION) .setTlsConfig(tls) .build()Маска *.tracehub.ru покрывает ровно одну метку поддомена — рабочие эндпоинты SDK.
В примере выше стоят условные значения: отпечатки вычисляются на вашей стороне. Снимите отпечаток с нужного хоста этой командой:
openssl s_client -servername app.tracehub.ru -connect app.tracehub.ru:443 \ < /dev/null 2>/dev/null \ | openssl x509 -pubkey -noout \ | openssl pkey -pubin -outform der \ | openssl dgst -sha256 -binary \ | base64Для окружений, несовместимых с пиннингом (корпоративные прокси с инспекцией трафика, отладочные прокси под MDM), используйте .disableTlsPinning() — он выключает проверку пинов, но сохраняет добавленные trust-anchors, поэтому хосты с сертификатами Минцифры продолжают работать. При отключённом пиннинге с настроенными пинами SDK пишет WARN при инициализации.

