Реалізація Deferred Deep Linking у мобільному додатку
Звичайний deep link працює тільки якщо додаток встановлено. Користувач натискає на посилання, додаток не встановлено — посилання веде в стор, контекст втрачається. Deferred deep linking вирішує саме цю ситуацію: користувач встановлює додаток та при першому запуску потрапляє на той екран, на який натискав. Це критично для рекламних кампаній, реферальних програм та шаринга контенту.
Як це технічно працює
Механіка deferred deep linking будується на кількох шарах.
Шар 1: передача параметрів до встановлення. Класичний підхід — fingerprinting: при переході по посиланню сервер зберігає параметри (кампанія, контент, реферер) разом з fingerprint браузера (IP, user agent, розрішення екрана). Після встановлення додаток робить запрос до сервера зі своїм fingerprint — сервер матчить та повертає збережені параметри.
Точність fingerprinting — 70–85%. Достатньо для більшості маркетингових завдань, але не для фінансових операцій.
Шар 2: Google Play Referrer (Android). Надійніше за fingerprinting. При переході по посиланню з &referrer= параметром Google Play зберігає його та передає додатку при першому встановленні через InstallReferrerClient:
val referrerClient = InstallReferrerClient.newBuilder(context).build()
referrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
if (responseCode == InstallReferrerClient.InstallReferrerResponse.OK) {
val referrer = referrerClient.installReferrer.installReferrer
// parse UTM параметри з referrer string
}
}
override fun onInstallReferrerServiceDisconnected() {}
})
Шар 3: SKAdNetwork / StoreKit AdNetwork (iOS). Apple закрила fingerprinting на iOS 14.5+ через App Tracking Transparency. Для iOS deferred deep linking працює тільки через:
- Клипборд — копіюємо параметри в буфер обмену на лендингу, додаток читає при першому запуску (потребує
UIPasteboard.general.string, iOS 16+ показує системний prompt) - Сторонні SDK (Branch, AppsFlyer, Adjust) які використовують детерміноване сопоставлення через IDFA (з дозволу) та SKAdNetwork для атрибуції без нього
Реалізація через Branch.io
Branch — найповніший інструмент для deferred deep linking. Підтримує Android (Play Referrer + fingerprint), iOS (клипборд + SKAdNetwork + детерміноване), web fallback.
Android SDK:
// Application.onCreate()
Branch.getAutoInstance(this)
// Activity.onStart()
Branch.sessionBuilder(this)
.withCallback { referringParams, error ->
if (error == null && referringParams != null) {
val screen = referringParams.getString("screen")
val itemId = referringParams.getString("item_id")
if (referringParams.getBoolean("+clicked_branch_link", false)) {
// навігація на потрібний екран
navigateTo(screen, itemId)
}
}
}
.withData(intent?.data)
.init()
iOS SDK:
Branch.getInstance().initSession(launchOptions: launchOptions) { params, error in
guard error == nil, let params = params else { return }
if let clicked = params["+clicked_branch_link"] as? Bool, clicked {
let screen = params["screen"] as? String
self.navigateTo(screen: screen)
}
}
Universal links (iOS) та App Links (Android) налаштовуються паралельно — Branch генерує потрібні apple-app-site-association та assetlinks.json через свій dashboard.
Кастомна реалізація без сторонніх SDK
Якщо Branch/AppsFlyer надлишкові (немає бюджету на enterprise план або політика проти third-party SDK), можна реалізувати спрощену версію:
- Створити endpoint
/deferred?screen=product&id=123— зберігає параметри + fingerprint у Redis з TTL 24 години - На Android: встановити referrer через
?referrer=screen%3Dproduct%26id%3D123у посиланні на Play Store - При першому запуску: читати через
InstallReferrerClient(Android) або робити запрос з fingerprint (iOS) - Навігація на потрібний екран
Обмеження: на iOS точність ~70–75%, Android через Play Referrer — ~95%.
Тестування
Deferred deep linking крайне складно тестувати у dev-окружені: потрібна реальна встановка зі сторе або тестовий track (Firebase App Distribution / TestFlight). Для Branch — режим testMode дозволяє емулювати клики у debug-складці.
Обов'язкові тест-кейси:
- Встановлення на чистий пристрій по посиланню
- Перехід по посиланню з уже встановленим додатком (звичайний deep link)
- Перехід по посиланню, видалення та повторна встановлення (параметри не повинні застосовуватись повторно)
- Перехід без клику на Branch посилання (organic install — параметрів немає)
Що входить у роботу
Обираємо стратегію під платформи та бюджет (Branch/AppsFlyer vs кастомна реалізація), налаштовуємо Universal Links та App Links, реалізуємо SDK інтеграцію з навігацією на потрібні екрани, тестуємо всі сценарії встановлення на реальних пристроях. Документуємо схему параметрів для маркетингової команди.
Строк: 5–10 днів з урахуванням налаштування домена, тестування всіх сценаріїв встановлення та інтеграції з навігацією.







