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

Диплинки и атрибуция

Диплинк ведёт пользователя на конкретный экран приложения; атрибуция отвечает, из какой рекламной сети и кампании пришла установка. На этой странице — как передать диплинки в 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: установка и инициализация.