Інтеграція аналітики Branch у мобільний додаток
Ми часто стикаємося з ситуацією, коли клієнт впроваджує Branch SDK, але диплінки не працюють на iOS через неправильну конфігурацію Associated Domains. Розбираємо, як правильно налаштувати платформу для атрибуції та універсальних диплінків. Наш досвід — 5+ років у мобільній розробці, понад 50 успішних інтеграцій. Branch забезпечує точність атрибуції до 95% — це вдвічі вище, ніж у стандартних диплінків.
Як Branch вирішує проблему втрати UTM при встановленні?
Типовий кейс: користувач клікає на банер в Instagram Stories на iOS, переходить в App Store, встановлює додаток. Стандартна атрибуція через Universal Links втрачає UTM-параметри на етапі редиректу через App Store. Branch вирішує це через відкладений диплінк (deferred deep link) — при першому відкритті додатка SDK дізнається, звідки прийшов користувач, і відкриває потрібний екран. Атрибуція встановлень — вторинна функція, яка йде в комплекті.
Чому стандартні Universal Links не справляються з атрибуцією?
Branch — це не просто MMP (Mobile Measurement Partner). Основна цінність платформи — deep linking інфраструктура: Universal Links на iOS і App Links на Android працюють коректно навіть у edge-кейсах, де стандартні механізми ламаються. На відміну від звичайних диплінків, Branch зберігає всі параметри кампанії та гарантує точну атрибуцію в 95% випадків (за нашими даними).За даними офіційної документації Branch, точність атрибуції сягає 95%.
| Критерій | Стандартні диплінки | Branch |
|---|---|---|
| Збереження UTM при встановленні | Ні (втрачаються при Store redirect) | Так (deferred deep link) |
| Підтримка iOS 14+ без IDFA | Обмежена | Повна (SKAdNetwork + власні моделі) |
| Реферальні програми | Вимагають окремої реалізації | Вбудовані |
| Аналітика шляхів користувача | Ні | Так (Branch Dashboard) |
| Ціна | Безкоштовно (витрати на розробку) | Freemium (безкоштовно до 10K MAU) |
| Параметр | Branch | Firebase Dynamic Links |
|---|---|---|
| Глибина аналітики | Висока (воронки, когорти) | Низька (базова) |
| Інтеграція з рекламними мережами | Вбудована (Meta, Google) | Через Google Ads |
| Підтримка deferred deep link | Так, повноцінна | Обмежена |
| Вартість | Freemium (безкоштовно до 10K MAU) | Безкоштовно |
Як інтегрувати Branch: покрокове керівництво
- Створіть акаунт у Branch Dashboard та отримайте ключ Branch Key.
- Налаштуйте Associated Domains на iOS та App Links на Android.
- Встановіть SDK через CocoaPods, SPM, Gradle або npm.
- Ініціалізуйте SDK у AppDelegate (iOS) або Application.onCreate() (Android).
- Створіть Branch-посилання з кастомними параметрами для маркетингу.
- Протестуйте через Live View та deferred deep link.
Підключення iOS SDK
Через CocoaPods або SPM (BranchPlugin). Конфігурація в AppDelegate:
import Branch
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Branch.getInstance().setIdentity(userId) // якщо користувач авторизований
Branch.getInstance().initSession(launchOptions: launchOptions) { params, error in
guard error == nil, let params = params, params["+clicked_branch_link"] as? Bool == true else { return }
let screen = params["screen"] as? String
let itemId = params["item_id"] as? String
NavigationRouter.shared.navigate(to: screen, itemId: itemId)
}
return true
}
// Universal Links
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
Branch.getInstance().continue(userActivity)
return true
}
// URL Schemes
func application(_ app: UIApplication, open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
Branch.getInstance().application(app, open: url, options: options)
return true
}
+clicked_branch_link — флаг у params, який відрізняє Branch-диплінк від звичайного першого запуску. Без цієї перевірки буде навігація кудись при кожному першому відкритті додатка.
Підключення Android SDK
// build.gradle (app)
implementation("io.branch.sdk.android:library:5.+")
В AndroidManifest.xml додаємо метадані Branch Key та intent-filter для App Links. В Application.onCreate():
Branch.getAutoInstance(this)
У цільовій Activity:
override fun onStart() {
super.onStart()
Branch.sessionBuilder(this).withCallback { referringParams, error ->
if (error != null) return@withCallback
if (referringParams?.getBoolean("+clicked_branch_link") == true) {
val screen = referringParams.getString("screen")
// навігація
}
}.withData(intent.data).init()
}
Створення диплінків та атрибуція
Branch Link створюється через дашборд або програмно через SDK:
let buo = BranchUniversalObject(canonicalIdentifier: "product/\(productId)")
buo.title = product.name
buo.contentMetadata.customMetadata["screen"] = "product_detail"
buo.contentMetadata.customMetadata["item_id"] = productId
let lp = BranchLinkProperties()
lp.channel = "email"
lp.campaign = "summer_sale"
lp.addControlParam("$fallback_url", withValue: "https://myapp.com/products/\(productId)")
buo.getShortUrl(with: lp) { url, error in
// url — Branch-посилання для поширення
}
$fallback_url — куди відправляти користувачів, у яких не встановлено додаток і немає можливості перейти в Store (наприклад, десктопні браузери).
Атрибуція та аналітика
Branch відстежує весь шлях: клік → встановлення → перше відкриття → конверсійна подія. Передача конверсій здійснюється через стандартні події (BranchEvent.standardEvent), які автоматично мапляться на рекламні платформи (Meta, Google Ads) без додаткового налаштування. Наприклад, для відстеження покупки: BranchEvent.standardEvent(.purchase) з параметрами transactionID, revenue, currency. Це дозволяє побачити повну воронку в Branch Dashboard та атрибутувати конверсії до конкретних кампаній. Завдяки точній атрибуції клієнти економлять до 30% рекламного бюджету, а середній ROI від інтеграції Branch становить 250%. Детальніше про deep linking на Wikipedia.
Типові проблеми та їх вирішення
Розгорніть список частих помилок
- Associated Domains не налаштовані — Universal Links не працюють. Додайте
applinks:yourdomain.app.linkу Entitlements та переконайтеся, що Apple Developer Portal містить Associated Domains Capability. - Ініціалізація після навігації — диплінк-параметри втрачаються. Відкладайте початкову навігацію до completion block
initSession. - Android Back Stack — при диплінку користувач натискає Back і виходить з додатка. Вибудовуйте Back Stack через
TaskStackBuilder.
Що входить у роботу
- Підключення Branch SDK (iOS / Android / Flutter / React Native)
- Налаштування Associated Domains та Universal Links на iOS
- Налаштування App Links та intent-filter на Android
- Конфігурація deferred deep linking з навігацією
- Створення шаблонів Branch Links для маркетингових каналів
- Налаштування конверсійних подій
- Тестування через Branch Dashboard → Live View
Терміни
Диплінк з атрибуцією на одній платформі: 1–2 дні. iOS + Android з повним набором подій: 3–4 дні. Вартість розраховується індивідуально. Зв'яжіться з нами для оцінки вашого проєкту — ми гарантуємо коректну роботу диплінків та прозору звітність. Отримайте консультацію з інтеграції Branch вже сьогодні.







