Інтеграція аналітики 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 вже сьогодні.







