Настройка атрибуції встановлень мобільного додатку
Рекламний бюджет розподілений по п'яти каналам: Google UAC, Meta Ads, TikTok, Telegram, ASA. Додаток встановлюють, користувачі купують — але маркетинг не знає, який канал приніс платежеспроможних користувачів, а який тягне гроші впустую. Без коректно налаштованої атрибуції встановлень це стандартна ситуація.
Як працює атрибуція: MMP в середині ланцюга
Mobile Measurement Partner (MMP) — це незалежна третя сторона між рекламними мережами й вашим додатком. Принцип: коли користувач кліне на рекламу, MMP фіксує клік з параметрами кампанії. При встановленні додатку запускається SDK — MMP сопоставляє пристрій з раніше зафіксованим кліком й повертає атрибуцію джерелу.
Ключові гравці: AppsFlyer, Adjust, Branch, Kochava. Для українського ринку AppsFlyer та Adjust — найбільш поширені.
Механіка матчингу після iOS 14.5 розділилася:
- Deterministic (точна): через SKAdNetwork-постбеки — коли користувач дав дозвіл на ATT
- Probabilistic (вірогідна): за fingerprint (IP + User-Agent + час клику) — без дозволу ATT, з обмеженою точністю
На Android ситуація простіша: Google Play Referrer API дає точний атрибуційний токен без дозволів користувача.
Інтеграція AppsFlyer на практиці
iOS (Swift)
// AppDelegate.swift
import AppsFlyerLib
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AppsFlyerLib.shared().appsFlyerDevKey = "YOUR_DEV_KEY"
AppsFlyerLib.shared().appleAppID = "123456789"
AppsFlyerLib.shared().delegate = self
// Включити debug тільки в dev-збірці
AppsFlyerLib.shared().isDebug = false
// Запускати start() після ATT-запиту, не раніше
return true
}
// У SceneDelegate або після відповіді ATT:
func applicationDidBecomeActive(_ application: UIApplication) {
AppsFlyerLib.shared().start()
}
Критичний момент: start() не можна викликати до того, як користувач відповів на ATT-запит. Якщо викликати раніше — SDK відправить подію без флага consent, і Apple може заблокувати постбек. Правильна послідовність: показати ATT → дочекатися відповіді → викликати start().
Android (Kotlin)
// У Application.onCreate()
AppsFlyerLib.getInstance().init("YOUR_DEV_KEY", object : AppsFlyerConversionListener {
override fun onConversionDataSuccess(data: Map<String, Any>) {
val campaign = data["campaign"] as? String
val mediaSource = data["media_source"] as? String
// media_source = "googleadwords_int" для Google UAC
Log.d("AF", "Attributed to: $mediaSource / $campaign")
}
override fun onConversionDataFail(error: String) {}
override fun onAppOpenAttribution(data: Map<String, Any>) {}
override fun onAttributionFailure(error: String) {}
}, this)
AppsFlyerLib.getInstance().start(this)
На Android важливо додати Google Play Referrer API як залежність — без нього атрибуція через Google UAC буде probabilistic:
// build.gradle
implementation("com.android.installreferrer:installreferrer:2.2")
Deeplink-атрибуція: де найчастіше ломається
OneLink / Universal Links / App Links дозволяють атрибутувати не тільки встановлення, але й конкретний deeplink. Користувач кліне по посиланню в Telegram, встановлює додаток — й потрапляє прямо на потрібний екран з коректною атрибуцією.
Типова помилка: Universal Links перестають працювати після оновлення додатку, якщо не оновили apple-app-site-association файл на сервері або змінили Bundle ID без регенерації associated domains. У цьому випадку iOS fallback на HTTP-редирект, атрибуція теряється.
Ще одна проблема — відсутність onAppOpenAttribution обробника при сценарії «додаток вже встановлений». onConversionDataSuccess срабатує тільки при першій встановці. Повторні deep link переходи вимагають окремого обробника.
Постбеки і верифікація
Після настройки MMP необхідно налаштувати постбеки в рекламні мережі — інакше Google UAC та Meta не отримують сигнал про конверсію й не можуть оптимізувати кампанії під цільову дію (in-app event замість просто встановлення).
Перевірка коректності атрибуції:
- Використовуємо тестовий пристрій, додаємо IDFA/GAID в MMP dashboard як тестовий пристрій
- Кліємо по тестовій посиланню кампанії
- Встановлюємо додаток
- Дивимось в MMP dashboard: атрибуція повинна з'явитися за 1–2 хвилини
Що входить у роботу
- Вибір MMP під бюджет і рекламні канали
- Інтеграція SDK на iOS та Android (або Flutter)
- Настройка ATT-flow для iOS
- Конфігурація постбеків в Google, Meta, TikTok
- Настройка OneLink / Branch Links для deeplink-атрибуції
- Тестування через тестові пристрої й верифікація постбеків
Терміни
Базова інтеграція одного MMP на обидві платформи: 3–5 днів. З настройкою deeplink та всіх рекламних постбеків — до 7 днів. Вартість розраховується індивідуально.







