Диплинки и атрибуция
Диплинк ведёт пользователя на конкретный экран приложения; атрибуция отвечает, из какой рекламной сети и кампании пришла установка. На этой странице — как передать диплинки в SDK и как прочитать данные атрибуции из кода.
Сами трекинг-ссылки и их макросы настраиваются в кабинете Tracehub — см. страницу Трекинг-ссылки и макросы. Окна атрибуции тоже настраиваются в кабинете, а не в SDK.
Прямые диплинки
Заголовок раздела «Прямые диплинки»Когда приложение открыто по диплинку, передайте URI в SDK. Вызывайте в Activity.onCreate() и onNewIntent():
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) intent?.data?.let { uri -> Tracehub.processDeeplink(TracehubDeeplink(uri)) }}
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.data?.let { uri -> Tracehub.processDeeplink(TracehubDeeplink(uri)) }}Вызов отправляет открытие на сервер. Если ссылка была короткой ссылкой
Tracehub (https://links.tracehub.ru/ol/…), переход засчитывается ей —
в разделе «Диплинки» кабинета и в реатрибуции. Это важно именно для
проверенных App Links: они открывают приложение напрямую, минуя браузер,
поэтому иначе о переходе никто бы не узнал.
Открытие по собственной схеме приложения (myapp://…) тоже передаётся
в SDK — оно сохраняется как последний диплинк и участвует в атрибуции, — но
кликом по ссылке не считается: такой URI не связан ни с одной ссылкой
Tracehub.
Сокращённые ссылки
Заголовок раздела «Сокращённые ссылки»Если диплинк пришёл в сокращённом виде, разрешите его и обработайте одним вызовом — итоговый URL придёт в обратный вызов:
Tracehub.processAndResolveDeeplink(TracehubDeeplink(uri)) { resolvedUrl -> navigateTo(resolvedUrl)}Этот метод нужен для чужих сокращателей ссылок: он сам запрашивает ссылку,
чтобы узнать итоговый адрес. Для коротких ссылок Tracehub используйте
processDeeplink — иначе переход посчитается дважды: один раз от запроса
резолвера, второй от самого открытия.
Разрешить короткую ссылку без отправки в атрибуцию можно отдельным методом:
TracehubLinkResolution.resolveLink( url = "https://short.example.com/abc123", resolveUrlSuffixes = arrayOf("example.com"),) { resolvedUrl -> Log.d("Tracehub", "Ссылка разрешена: $resolvedUrl")}Отложенный диплинк
Заголовок раздела «Отложенный диплинк»Отложенный диплинк срабатывает, когда пользователь кликнул по рекламе, но приложение ещё не было установлено: после установки и первого запуска SDK получает ссылку и может открыть нужный экран. Зарегистрируйте слушатель в конфигурации:
TracehubConfig.Builder(...) .setOnDeferredDeeplinkResponseListener { deeplink -> Log.d("Tracehub", "Отложенный диплинк: $deeplink") true // true — SDK откроет ссылку сам; false — обработаете самостоятельно }Ссылка приходит не мгновенно: отложенный диплинк передаётся вместе с данными атрибуции при первом запуске приложения — рассчитывайте на секунды, а не на момент старта. Если у установки атрибуции нет (например, органика), отложенный диплинк не придёт вовсе.
Последний диплинк
Заголовок раздела «Последний диплинк»URI последнего обработанного диплинка доступен асинхронным геттером:
Tracehub.getLastDeeplink { uri -> Log.d("Tracehub", "Последний диплинк: $uri")}Чтение атрибуции
Заголовок раздела «Чтение атрибуции»Текущая атрибуция устройства читается асинхронно. Пока данные не получены от сервера, в обратный вызов приходит null:
Tracehub.getAttribution { attr -> attr?.let { Log.d("Tracehub", "Сеть: ${it.network}, кампания: ${it.campaign}") }}Если результат нужен к определённому моменту (например, для экрана персонализации), используйте вариант с таймаутом — обратный вызов сработает с данными, как только они появятся, или с null по истечении времени:
Tracehub.getAttributionWithTimeout(timeoutMs = 5_000L) { attr -> if (attr != null) { Log.d("Tracehub", "Атрибуция получена: ${attr.trackerToken}") }}Слушатель изменений атрибуции
Заголовок раздела «Слушатель изменений атрибуции»Чтобы реагировать на получение или изменение атрибуции (например, пробрасывать кампанию в свою аналитику), зарегистрируйте слушатель в конфигурации:
TracehubConfig.Builder(...) .setOnAttributionChangedListener { attr -> analytics.setUserProperty("campaign", attr.campaign) analytics.setUserProperty("network", attr.network) }Поля атрибуции
Заголовок раздела «Поля атрибуции»| Поле | Тип | Описание |
|---|---|---|
trackerToken |
String? |
Токен трекера |
trackerName |
String? |
Название трекера |
network |
String? |
Рекламная сеть |
campaign |
String? |
Кампания из трекинг-ссылки (как правило, ID кампании в рекламной сети) |
adgroup |
String? |
Группа объявлений |
creative |
String? |
Идентификатор креатива |
clickLabel |
String? |
Метка клика |
Ручной реферер установки
Заголовок раздела «Ручной реферер установки»Если вы получаете строку реферера из собственного источника, передайте её в SDK напрямую:
Tracehub.setReferrer("utm_source=google&utm_campaign=весенняя_акция", context)Стандартные источники реферера — Google Play и плагины магазинов — описаны на странице Android SDK: установка и инициализация.

