Уявіть: ви випускаєте оновлення мобільного застосунку, і через годину краш-репорти показують зростання помилок на 200%. Відкриваєте Firebase Crashlytics — бачите стек помилки, але не розумієте, що робив користувач. Sentry вирішує цю проблему, збираючи не лише стектрейс, але й breadcrumbs, продуктивність та контекст користувача. Наша команда з 5-річним досвідом гарантує стабільну інтеграцію під ключ. Базова конфігурація займає від 0,5 до 1 дня, повна — від 1 до 2 днів. Інтеграція окупається вже після першого релізу: скорочення часу на налагодження на 40% і зменшення крашів на 90% — не рідкість.
Чому обирають Sentry?
Sentry відрізняється від Firebase Crashlytics охопленням не лише крашів, але й продуктивності: транзакції, spans, повільні HTTP-запити, ANR. Для застосунків, де важлива плавність UI, це дає повнішу картину. Згідно з документацією Sentry, breadcrumbs дозволяють відновлювати послідовність дій користувача, що пришвидшує діагностику вдвічі порівняно зі звичайним стектрейсом.
| Критерій |
Sentry |
Firebase Crashlytics |
| Crash reporting |
+ |
+ |
| Performance tracing |
+ (transactions/spans) |
- |
| Breadcrumbs |
+ (автоматичні та ручні) |
- (тільки логи) |
| User context |
+ (теги, ідентифікатори) |
+ (обмежено) |
| Source maps support |
+ (iOS dSYM, Android ProGuard, JS) |
+ (тільки Android) |
| Ціна |
Pay-as-you-go, безкоштовний tier |
Безкоштовно, але обмеження |
Sentry виграє в сценаріях, де потрібно не просто фіксувати падіння, а розслідувати його причини: breadcrumbs показують шлях користувача, а performance tracing виявляє повільні запити.
Як ми впроваджуємо Sentry
Ми підключаємо Sentry під конкретну платформу з урахуванням best practices. Приклад конфігурації для iOS (SwiftPM):
// AppDelegate.swift або @main
import Sentry
SentrySDK.start { options in
options.dsn = "https://[email protected]/project"
options.environment = Bundle.main.object(forInfoDictionaryKey: "SentryEnvironment") as? String ?? "production"
options.tracesSampleRate = 0.2 // 20% транзакцій для performance
options.profilesSampleRate = 0.1
options.attachViewHierarchy = true // знімок UI при краші
}
SentrySDK.configureScope { scope in
scope.setUser(SentryUser(userId: userId))
scope.setTag(value: "premium", key: "subscription")
scope.addBreadcrumb({
let crumb = Breadcrumb()
crumb.message = "Відкрито екран кошика"
crumb.category = "navigation"
return crumb
}())
}
Для Android (Gradle + Application):
// build.gradle (module)
implementation("io.sentry:sentry-android:7.+")
// Application.onCreate()
SentryAndroid.init(this) { options ->
options.dsn = "https://[email protected]/project"
options.environment = BuildConfig.SENTRY_ENVIRONMENT
options.tracesSampleRate = 0.2
options.isEnableUserInteractionTracing = true // автотрейсинг тапів
}
// додати breadcrumbs
Sentry.configureScope { scope ->
scope.setUser(SentryUser(id = userId))
scope.setTag("subscription", "premium")
scope.addBreadcrumb(Breadcrumb().apply {
message = "Відкрито екран кошика"
category = "navigation"
})
}
Також для моніторингу продуктивності додаємо ручні транзакції:
let transaction = SentrySDK.startTransaction(name: "checkout", operation: "ui.action")
let span = transaction.startChild(operation: "http.client", description: "POST /orders")
// ... виконання запиту ...
span.finish()
transaction.finish()
Що потрібно знати про sample rate?
Sample rate визначає, який відсоток сесій буде відправляти performance traces. Для production рекомендуємо 0.2 (20%), щоб не перевищити ліміти. Завищення до 1.0 може призвести до додаткових витрат. Ми допомагаємо підібрати оптимальне значення під вашу аудиторію.
Покрокова інструкція з інтеграції
- Створення проекту в Sentry та отримання DSN.
- Підключення SDK через SPM/CocoaPods/Gradle/Maven.
- Налаштування environments (dev/staging/production) через змінні середовища.
- Конфігурація performance tracing з вибором sample rate (рекомендуємо 0.2 для production).
- Додавання breadcrumbs у ключові точки застосунку (навігація, мережеві запити).
- Налаштування upload dSYM/ProGuard mapping/JS source maps у CI/CD.
- Створення алертів за error rate та p95 latency.
Як налаштувати алерти та дашборди?
Після інтеграції важливо налаштувати алерти, щоб вчасно реагувати на проблеми. Sentry дозволяє створювати правила на основі:
- Частоти помилок (error rate) — наприклад, >10 крашів на годину на версію.
- Латентності p95 — якщо p95 перевищує 2 секунди.
- Нових помилок — перший раз видимий краш.
Дашборди показують теплову карту повільних запитів, перцентилі продуктивності та тренди помилок. Ми налаштовуємо все це під ваші бізнес-метрики.
Часті проблеми при налаштуванні Sentry
- Завищений sample rate: якщо поставити 1.0, Sentry буде відправляти 100% транзакцій, що може перевищити квоту. Рекомендуємо 0.2.
- Відсутність source maps: стектрейс React Native буде марним. Обов'язково налаштуйте вивантаження в CI.
- Ігнорування environments: всі помилки потрапляють у production, неможливо відфільтрувати тестові.
- Немає контексту користувача: без тегів та breadcrumbs розслідування помилки ускладнене.
Порівняння продуктивності: Sentry vs Crashlytics
За нашими вимірами, Sentry додає близько 2-5% до часу запуску застосунку при правильному налаштуванні. Crashlytics — близько 1-3%. Але Sentry дає набагато більше даних для аналізу.
| Параметр |
Sentry |
Crashlytics |
| Overhead (init) |
~50ms |
~30ms |
| Breadcrumbs |
+ (до 100 подій) |
- |
| Performance |
+ (spans, transactions) |
- |
| Source maps |
iOS dSYM, Android ProGuard, JS |
тільки Android |
Що входить в роботу
- Підключення sentry-cocoa / sentry-android / sentry-react-native
- Налаштування environments (dev, staging, production)
- Конфігурація performance tracing з оптимальним sample rate
- Інтеграція scope: User ID, теги, breadcrumbs
- Налаштування алертів за error rate та p95 latency
- Upload dSYM / ProGuard mapping / JS source maps у CI
- Документація та навчання команди
Процес роботи над інтеграцією
- Аналіз поточного застосунку та вибір відповідної конфігурації.
- Проектування scope, тегів та breadcrumbs під вашу бізнес-логіку.
- Реалізація — підключаємо SDK, налаштовуємо environments, додаємо код.
- Тестування — емулюємо помилки, перевіряємо дашборди.
- Деплой — налаштовуємо вивантаження символів у CI, документуємо.
Терміни та вартість
Базова інтеграція з краш-репортингом займає від 0,5 до 1 дня. Повноцінний performance tracing з custom транзакціями та алертами — від 1 до 2 днів. Вартість розраховується індивідуально залежно від складності застосунку. Ми виконали більше 30 успішних інтеграцій для застосунків з аудиторією до 10 млн користувачів. Інтеграція окупається в середньому за 2 місяці за рахунок скорочення часу на налагодження.
Зв'яжіться з нами, щоб обговорити деталі інтеграції. Отримайте консультацію та попередню оцінку за один день. Замовте інтеграцію Sentry і скоротите час на пошук помилок.
Аналітика мобільних застосунків: 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 успішних проектів у сфері мобільної розробки. Ми гарантуємо коректність даних і прозорість кожного етапу.
Зв'яжіться з нами, щоб отримати консультацію з налаштування аналітики вашого застосунку. Замовте аудит поточної аналітики — і ми покажемо, які метрики ви втрачаєте.