Інтеграція аналітики Branch у мобільний додаток
Branch — це не просто MMP (Mobile Measurement Partner). Основна цінність платформи — інфраструктура deep linking: Universal Links на iOS та App Links на Android працюють коректно навіть в edge-кейсах, де стандартні механізми ломаються. Атрибуція установок — вторинна функція, яка йде в комплекті.
Типова ситуація: користувач кликає на баннер в Instagram Stories на iOS, переходить в App Store, встановлює додаток. Стандартна атрибуція через Universal Links втрачає UTM-параметри на етапі редиректу через App Store. Branch розв'язує це через відложений диплінк (deferred deep link) — при першому відкритті додатка SDK «дізнається» звідки прийшов користувач та відкриває потрібний екран.
Підключення 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.+")
Додайте метадані Branch Key в AndroidManifest.xml та 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 відстежує весь шлях: клік → установка → першопочне відкриття → конверсійна подія. Передача конверсій:
let event = BranchEvent.standardEvent(.purchase)
event.transactionID = orderId
event.revenue = orderTotal
event.currency = BNCCurrency.RUB
event.logEvent()
Стандартні события (BranchEvent.standardEvent) автоматично мэпляються на рекламні платформи (Meta, Google Ads) без додаткового налаштування.
Проблеми, з якими стикаємося
Associated Domains не налаштовані — Universal Links не працюють, додаток не перехоплює посилання. Потрібно додати applinks:yourdomain.app.link в Entitlements та переконатися, що Apple Developer Portal містить Associated Domains Capability.
Клієнтський SDK ініціалізується після навігації — параметри диплінка втрачаються, тому що UI вже відобразився до того, як initSession повернув результат. Рішення: відкласти першопочну навігацію до completion block.
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 дні. Вартість розраховується індивідуально.







