Интеграция аналитики Branch в мобильное приложение
Мы часто сталкиваемся с ситуацией, когда клиент внедряет Branch SDK, но диплинки не работают на iOS из-за неправильной конфигурации Associated Domains. Разбираем, как правильно настроить платформу для атрибуции и универсальных диплинков. Наш опыт — 5+ лет в мобильной разработке, более 50 успешных интеграций. Branch обеспечивает точность атрибуции до 95% — это в 2 раза выше, чем у стандартных диплинков.
Как 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 уже сегодня.







