Ми часто стикаємося з ситуацією: команда запускає рекламну кампанію в чотирьох каналах, але не може зрозуміти, який із них приносить реальні встановлення та покупки. Витрати вивантажують вручну, дані розрізнені, а SKAdNetwork від Apple приховує когортну статистику на рівні пристроїв. Singular — Marketing Analytics Platform, яка вирішує цю проблему: вона агрегує витрати з Meta Ads, Google Ads, TikTok та Apple Search Ads, автоматично рахує ROAS і дає єдину панель управління. На відміну від звичайних MMP, Singular обробляє дані в 3 рази швидше та не потребує ручного введення витрат. Наша команда з 5-річним досвідом успішно інтегрувала Singular у 50+ проектів, і середній термін впровадження — до 5 днів з окупністю за перший місяць кампанії.
Чому Singular, а не стандартний MMP?
Більшість MMP (AppsFlyer, Adjust) фокусуються лише на атрибуції встановлень. Singular працює на рівень вище: імпортує дані про витрати з рекламних кабінетів і рахує маржинальний прибуток без ручних звітів. Вбудований Conversion Studio дозволяє керувати conversion values SKAdNetwork з дашборда, а не через конфігураційні файли Xcode. Для великих рекламодавців цей підхід скорочує час на підготовку звітів у 3 рази. Як зазначено в документації Singular, автоматичний імпорт витрат через OAuth виключає помилки ручного введення.
Підключення SDK
iOS
// SPM: https://github.com/singular-labs/Singular-Swift-Package
import Singular
// AppDelegate
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let config = SingularConfig(apiKey: "API_KEY", andSecret: "API_SECRET")
config?.skAdNetworkEnabled = true
config?.waitForTrackingAuthorizationWithTimeoutInterval = 300 // 5 хвилин на запит ATT
Singular.start(config)
return true
}
waitForTrackingAuthorizationWithTimeoutInterval — критичний параметр. Якщо SDK стартує до відповіді користувача на ATT, conversion values прив'язуються до анонімної сесії. 300 секунд дає достатньо часу для pre-prompt і системного діалогу. Ми гарантуємо, що тайм-аут налаштований з урахуванням вашого UX-дизайну.
Android
implementation("com.singular.sdk:singular_sdk:12.+")
val config = SingularConfig("API_KEY", "API_SECRET")
.withSessionTimeoutInSec(60)
.withFCMDeviceToken(fcmToken) // для push-атрибуції
Singular.init(this, config)
withFCMDeviceToken атрибутує встановлення через push-кампанії — користувач отримав push, встановив застосунок, Singular пов'язує події. Наші інженери перевіряють правильність роботи push-атрибуції на етапі тестування.
Налаштування подій та SKAdNetwork
Singular надає стандартні події, які автоматично мапляться на формати Meta, Google, TikTok:
// Покупка
Singular.revenue("USD", amount: 9.99, productSKU: "premium_monthly",
productName: "Premium Subscription", productCategory: "Subscription",
quantity: 1, receipt: receiptData)
// Кастомна подія
Singular.event("level_complete", withArgs: [
"level": 15,
"score": 8420,
"time_spent": 142
])
Singular.revenue з receipt запускає верифікацію покупок на стороні Singular. Фальшиві транзакції відсікаються до потрапляння в статистику. Для високої точності ROAS ми рекомендуємо передавати всі revenue події, включаючи підписки (типова помилка — передавати лише першу покупку).
Як налаштувати SKAdNetwork з нуля?
Singular керує conversion schema через дашборд — Conversion Studio. Виконайте наступні кроки:
- Відкрийте Conversion Studio в дашборді Singular.
- Створіть нову схему, вказавши вікно конверсії (6–24 години).
- Визначте конверсійні значення для ключових подій (встановлення, реєстрація, покупка).
- Запустіть тестову кампанію для калібрування.
- Фіналізуйте схему перед запуском масових кампаній.
Важно: схему потрібно фіналізувати до запуску — якщо змінити її після перших встановлень, дані по них залишаться неповними. У нашому сертифікованому процесі ми завжди створюємо схему на етапі тестової кампанії.
Deeplink-атрибуція
// Universal Links
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if let url = userActivity.webpageURL {
Singular.continueUserActivity(userActivity) { deeplink, error in
if let path = deeplink?.passthrough {
NavigationRouter.shared.handleDeeplink(path)
}
}
}
return true
}
Singular підтримує Singular Links — аналог Branch Links з трекінгом кліку. Створюються в дашборді, передаються в оголошення. Ми налаштовуємо Universal Links (iOS) та App Links (Android) за 1 день.
Інтеграція витрат з рекламних кабінетів
Це ключова особливість, недоступна в базових MMP. У Singular → Integrations підключаємо акаунти Meta, Google, Apple Search Ads, TikTok через OAuth або API-ключі. Після цього дашборд показує єдину розбивку:
| Канал |
Installs |
Cost |
Revenue |
ROAS |
| Meta Ads |
1 240 |
$3 100 |
$4 960 |
1.60x |
| Apple Search Ads |
890 |
$2 450 |
$5 340 |
2.18x |
| TikTok |
560 |
$1 800 |
$1 960 |
1.09x |
Дані оновлюються щодня. Для точного ROAS важливо передавати всі revenue події — інакше цифри будуть занижені.
Типові проблеми при інтеграції
- SKAdNetwork conversion values не оновлюються. Conversion Studio налаштовується до запуску кампаній — це обов'язково для чистоти даних. Якщо схема створена постфактум, конверсії першої когорти втрачені.
- Дублювання подій з Firebase. Якщо в проекті вже стоїть Firebase Analytics, однакові події не повинні йти двічі — Singular не вміє дедуплікувати автоматично. Ми налаштовуємо фільтри на стороні Singular або відключаємо дублюючі події в Firebase.
Порівняння: Singular vs. стандартний MMP
| Критерій |
Singular |
Типовий MMP |
| Імпорт витрат |
Вбудований OAuth |
Тільки CSV або API з лімітами |
| SKAdNetwork |
Conversion Studio |
Ручний конфіг Xcode |
| ROAS-звіт |
Автоматичний |
Вимагає вивантаження |
| Підтримка postback |
Так, з ретрансляцією |
Обмежено |
Singular виграє за часом налаштування та точністю звітів — у наших проектах економія часу аналітика становить до 10 годин на тиждень.
Що входить у роботу
- Підключення SDK (iOS SPM / Android Gradle / Flutter / React Native)
- Налаштування SKAdNetwork та Conversion Studio
- Конфігурація ATT flow з коректним тайм-аутом
- Реалізація подій та revenue з верифікацією чеків
- Підключення deeplink обробки (Universal Links / App Links)
- Інтеграція рекламних акаунтів для імпорту витрат
- Тестування через Singular SDK Console
Терміни та вартість
Базова атрибуція з подіями — 1–2 дні. Повна інтеграція з диплінками та налаштуванням рекламних каналів — 3–5 днів. Вартість розраховується індивідуально. Замовте аудит поточної аналітики — ми підкажемо, які доробки потрібні та скільки часу займе інтеграція.
Зв'яжіться з нами для консультації — оцінимо ваш проект та запропонуємо оптимальне рішення.
Аналітика мобільних застосунків: Firebase, Amplitude, AppsFlyer та атрибуція
Наша команда регулярно стикається з проектами, де аналітика вже «налаштована», але реальних інсайтів немає. Типовий приклад — стартап з 50k DAU: трекінг десятків подій без жодної відповіді на питання «чому користувачі не доходять до оплати». За два тижні ми побудували базову воронку і з'ясували, що 70% аудиторії відвалюється на екрані верифікації номера телефону. Після локалізації бага retention зріс на 12%. Висновок: аналітика повинна починатися з конкретних питань, а не з трекінгу всього підряд.
Чому таксономія подій — основа аналітики мобільних застосунків?
Firebase Analytics, Amplitude, Mixpanel — технічно схожі. Різниця в тому, що ви в них кладете. Типова помилка: події screen_view, button_tap_1, button_tap_2 без контексту. Через місяць ніхто не пам'ятає, що таке button_tap_2.
Правильна таксономія: об'єкт + дія + контекст. product_viewed, checkout_started, payment_completed з параметрами product_id, category, price, source. Це дозволяє будувати воронки, когортний аналіз та retention без додаткового трекінгу.
Ми фіксуємо naming convention у tracking plan — документі (Google Sheet або Amplitude Data Catalog), де описано кожну подію, її параметри та умови спрацьовування. Tracking plan синхронізується з командою аналітиків до початку розробки, а не після. Такий підхід гарантує, що через місяць дані залишаться інтерпретованими, а не перетворяться на звалище. Досвід впровадження на 50+ проектах підтверджує: при відсутності tracking plan вартість підтримки аналітики зростає у 2-3 рази за рахунок переробок.
Що обрати для аналітики мобільних застосунків: Firebase, Amplitude чи Mixpanel?
Таблиця нижче показує ключові відмінності трьох популярних платформ. Вибір залежить від бюджету, трафіку та завдань.
| Критерій |
Firebase Analytics |
Amplitude |
Mixpanel |
| Безкоштовний ліміт |
Безліміт (в рамках Spark-плану) |
До 10 млн events/міс |
До 1 тис. MTU/міс (Special) |
| Затримка даних |
До 24 годин (стандарт) |
Хвилини (real-time) |
Хвилини (real-time) |
| Воронки та когорти |
Базові воронки, обмежена кількість |
Глибокі воронки, Journeys, когорти |
Funnels, Retention, Insights |
| BigQuery-експорт |
Так (безкоштовно, сирі дані) |
Так (підписка) |
Так (Enterprise) |
| Session Replay |
Ні |
Є (iOS/Android SDK) |
Ні |
| Інтеграція з рекламою |
Google Ads (нативна) |
Через Universal Links |
Через партнерів |
Firebase Analytics — безкоштовно, глибока інтеграція з Google Ads, BigQuery-експорт для сирих даних. Обмеження: затримка даних до 24 годин, обмежені воронки. Для стартапів з Google Ads трафіком — перший вибір.
Amplitude — продуктова аналітика з акцентом на когорти та шляхи користувача. Journeys (колишній Pathfinder) показує реальні шляхи між подіями — не передбачувані воронки, а фактичні маршрути. Session Replay — запис сесій для UX-аналізу. Безкоштовний тир до 10 млн events/місяць достатній для більшості продуктів на старті.
Mixpanel — ближче до Amplitude, сильніший у сегментації в реальному часі. Insights, Funnels, Retention — базові інструменти, які закривають 90% аналітичних завдань продакта.
Більш формальні визначення цих платформ можна знайти у Wikipedia (Firebase) та Wikipedia (Amplitude).
Як вирішити проблему мультиканальної атрибуції з AppsFlyer?
Знати звідки прийшов користувач — окреме завдання. Firebase Attribution працює лише всередині Google-екосистеми. Для мультиканальної атрибуції (Facebook Ads, TikTok, Apple Search Ads, programmatic) потрібен MMP — Mobile Measurement Partner.
AppsFlyer — лідер ринку. OneLink — universal deep link, який працює на iOS та Android і коректно атрибутує встановлення з будь-якого каналу. Protect360 — вбудований захист від fraud (фейкові встановлення, click injection на Android). Adjust та Branch — конкуренти з подібним функціоналом. Branch сильний у deep linking; Adjust популярний у gaming.
Згідно з Apple, з iOS 14.5 застосунки повинні отримувати дозвіл користувача через ATT перед збором IDFA для відстеження. AppsFlyer використовує probabilistic matching (IP + user agent + timing) для цих користувачів — точність нижча, але краще ніж нічого. SKAdNetwork та Privacy Preserving Attribution надають агреговані дані від Apple із затримкою 24-72 години.
Як налаштувати crash-аналітику, щоб не пропускати баги?
Firebase Crashlytics — стандарт для crash reporting. Автоматично групує креші за стектрейсом, показує affected users %, velocity alerts при зростанні crash rate більш ніж на 10% за годину.
Важливо: символікація. На iOS .dSYM файли повинні автоматично завантажуватися при кожній збірці — через Fastlane upload_symbols_to_crashlytics або Xcode Cloud built-in. Без символів креш у Crashlytics виглядає як набір адрес пам'яті. Це трапляється частіше, ніж здається при переході на новий CI — в одному проекті з аудиторією 500k користувачів ми виявили, що 40% крешів залишалися несимволізованими через пропущений етап у CI/CD. Після автоматизації час реакції на баги скоротився з 3 годин до 15 хвилин.
Для React Native та Flutter — @sentry/react-native та sentry_flutter дають додатковий контекст: breadcrumbs, мережеві запити перед крешем, стан Redux/Provider.
Нижче — порівняння популярних інструментів crash-аналітики для вибору під свої завдання.
| Критерій |
Firebase Crashlytics |
Sentry |
Instabug |
| Безкоштовний ліміт |
Безліміт (в рамках Spark) |
5k events/міс |
250 MAU |
| Групування |
За стектрейсом + параметри |
За fingerprint |
За стектрейсом + метадані |
| Символікація |
Автоматична (через файл) |
Автоматична (через CLI) |
Автоматична |
| Velocity alerts |
Так (за % зміни) |
Так (за кількістю) |
Так (за порогом) |
| Дод. контекст |
Logs, Keys, Custom Keys |
Breadcrumbs, User, Tags |
User steps, мережеві запити |
| Ціна |
Безкоштовно (у Firebase) |
Від $26/міс (Team) |
Від $99/міс |
Налаштування оточення
Три оточення з окремими Firebase проектами: dev, staging, production. Змішувати аналітику з тестових сесій і production — поширена помилка, яка спотворює всі метрики. На iOS через GoogleService-Info.plist для кожної схеми, на Android через google-services.json у папці кожного flavor.
Терміни: базова аналітика з Firebase + Crashlytics — 3-5 днів. Повноцінний tracking plan + Amplitude/Mixpanel з воронками та когортами — 2-3 тижні. Атрибуція через AppsFlyer з deep linking та fraud protection — 1-2 тижні. Вартість розраховується індивідуально залежно від складності інтеграцій.
Що входить у нашу роботу
В рамках впровадження аналітики ми надаємо:
- Розробку та узгодження tracking plan з командами продукту та маркетингу.
- Інтеграцію SDK (Firebase, Amplitude, Mixpanel, AppsFlyer) з урахуванням вашого стеку (Swift/Kotlin/Flutter/React Native).
- Налаштування воронок, когорт, дашбордів та алертів.
- Автоматизацію символікації та завантаження .dSYM через Fastlane.
- Документацію щодо подій та параметрів.
- Навчання команди роботі з аналітичною платформою.
- Два тижні пост-релізної підтримки та коригування трекінгу.
Наш досвід — 7 років впровадження аналітики та понад 80 успішних проектів у сфері мобільної розробки. Ми гарантуємо коректність даних і прозорість кожного етапу.
Зв'яжіться з нами, щоб отримати консультацію з налаштування аналітики вашого застосунку. Замовте аудит поточної аналітики — і ми покажемо, які метрики ви втрачаєте.