Event Tracking — сбор и анализ событий о действиях пользователя внутри мобильного приложения, от нажатия кнопок до совершения покупок. Качественный event tracking — основа продуктовой аналитики, A/B-тестирования и персонализации. По данным Amplitude, 2024, команды с системным Event Tracking принимают продуктовые решения в 3 раза быстрее благодаря data-driven подходу. Без событий аналитика приложения слепа.
Главное
Event Tracking — это процесс сбора, хранения и анализа дискретных действий пользователя в приложении. Каждое событие состоит из имени (event_name) и набора параметров (event_params). Например, событие purchase имеет параметры price, currency, product_id, quantity.
В отличие от Screen View, который фиксирует факт открытия экрана, Event Tracking описывает, что именно пользователь делает на этом экране: нажал кнопку "Купить", открыл корзину, применил промокод. Без событий невозможно понять мотивацию и контекст действий пользователя.
Каждое Analytics Event содержит обязательные и опциональные поля. Обязательные: event_name, event_timestamp, user_id (или device_id). Опциональные: параметры, описание контекста.
| Поле | Обязательное | Пример |
|---|---|---|
| event_name | Да | "purchase_completed" |
| event_timestamp | Да | 1719876543000 |
| user_id | Да | "user_abc123" |
| session_id | Нет | "session_456def" |
| revenue | Нет | 9.99 |
| currency | Нет | "USD" |
Параметр revenue особенно важен — он передаётся в MMP-платформы для автоматического расчёта ROAS и LTV.
События классифицируются по происхождению и назначению. Разделение помогает организовать структуру данных и назначить права доступа для разных команд.
SDK аналитических платформ автоматически собирают базовые события: app_install, app_remove, session_start, screen_view. Firebase Analytics генерирует около 20 автоматических событий без единой строки кода. Эти события покрывают базовые метрики, но не дают понимания бизнес-логики.
Кастомные события — то, что делает Event Tracking ценным. Они описывают бизнес-действия: add_to_cart, start_subscription, level_complete, share_content, search_performed. Кастомные события требуют явной отправки из кода приложения.
// Отправка кастомного события в Firebase
val bundle = Bundle().apply {
putString(AnalyticsParam.ITEM_ID, "prod_789")
putString(AnalyticsParam.ITEM_NAME, "Premium Subscription")
putString(AnalyticsParam.CURRENCY, "USD")
putDouble(AnalyticsParam.PRICE, 29.99)
putString(AnalyticsParam.SOURCE, "onboarding_screen")
}
FirebaseAnalytics.getInstance(this)
.logEvent("subscribe_premium", bundle)
В примере событие subscribe_premium содержит четыре параметра контекста. Параметр source позволяет понять, с какого экрана пользователь оформил подписку — онбординг, настройки или paywall.
Помимо событий, Event Tracking включает User Properties — атрибуты, привязанные к пользователю: уровень подписки, страна, версия приложения. User Property отправляется один раз и применяется ко всем последующим событиям сессии. Это позволяет сегментировать аналитику без добавления параметров к каждому событию.
Super Properties (Amplitude) или Global Properties (Mixpanel) — атрибуты, привязанные к сессии, а не к пользователю. Используются для A/B-тестов: variant_id как Super Property добавляется ко всем событиям в сессии, и аналитик видит, к какой группе относится пользователь.
Revenue-события — отдельный класс для фиксации транзакций. Они содержат сумму, валюту и тип покупки (подписка, разовая покупка, восстановление). MMP-платформы (AppsFlyer, Adjust) требуют revenue-события для расчёта ROAS.
По данным Branch (2024), приложения, корректно передающие revenue-события в MMP, получают на 25% более точные данные по атрибуции и могут оптимизировать кампании под LTV, а не под CPI.
Настройка Event Tracking проходит в три этапа: планирование схемы событий, интеграция SDK, валидация данных.
Создайте Event Taxonomy — документ, где описано каждое событие: имя, параметры, триггер отправки, владелец. Пример для e-commerce: order_completed → параметры: order_id, total_price, items_count, payment_method, shipping_city.
Подключите Analytics SDK к проекту. Firebase Analytics, Amplitude, Mixpanel — любой SDK требует инициализации в Application.onCreate(). Пример для Flutter:
import 'package:firebase_analytics/firebase_analytics.dart';
class AnalyticsService {
final _analytics = FirebaseAnalytics.instance();
Future<void> logPurchase({
required String productId,
required double price,
required String currency,
}) async {
await _analytics.logEvent(
name: 'purchase_completed',
parameters: {
'product_id': productId,
'price': price,
'currency': currency,
'timestamp': DateTime.now().millisecondsSinceEpoch,
},
);
}
}
Класс AnalyticsService централизует отправку всех событий. Каждый метод соответствует бизнес-действию. Это упрощает поиск отправки — если событие не приходит, ищете по имени метода в коде. При масштабировании проекта количество методов может вырасти до 50–100, но структура остаётся читаемой за счёт группировки по фичам.
Firebase DebugView позволяет видеть события в реальном времени на устройстве разработчика. Включите режим: adb shell setprop debug.firebase.analytics.app your.package. Все события появятся в консоли Firebase с задержкой менее 5 секунд.
После включения DebugView откройте приложение и выполните тестовый сценарий — регистрацию, покупку, просмотр каталога. В консоли проверьте: все ли события отправились, правильные ли параметры переданы, нет ли дублирования. Amplitude предлагает аналогичный инструмент — Amplitude Debugger для iOS и Android.
Автоматическая валидация через CI/CD — следующий уровень качества. Добавьте в пайплайн скрипт, который проверяет, что каждое событие из схемы хотя бы раз отправилось за тестовый прогон. Это предотвращает выкатку версий с пропущенными событиями и экономит время QA-инженеров.
Именование событий — самый недооценённый аспект Event Tracking. Неправильное имя делает аналитику бесполезной, когда в проекте больше 50 событий.
Используйте паттерн object_action (нижний регистр, snake_case): product_added, cart_opened, payment_failed, subscription_cancelled. Объект — сущность, действие — глагол в прошедшем времени. Это читается как предложение: "товар добавлен", "корзина открыта".
НЕ используйте пробелы ("Add to Cart"), CamelCase ("AddToCart"), точку ("add.to.cart"), дефис ("add-to-cart"). Большинство SDK рекомендуют snake_case. НЕ используйте названия UI-элементов ("btn_submit_clicked") — событие должно быть бизнесовым, не техническим.
Для prefix добавляйте название фичи или экрана: onboarding_step_completed, checkout_payment_selected. Это позволяет фильтровать события по функциональности в отчётах.
Параметры делятся на три типа: string (значение), number (число для агрегации), boolean (флаг). String-параметры содержат категориальные данные: страна, источник трафика, название товара. Number-параметры служат для метрик: цена, количество, длительность. Boolean-параметры отмечают состояние: is_trial, is_promo_applied.
Избегайте передачи объектов или массивов в одном параметре — аналитические платформы не умеют их парсить. Вместо JSON-строки в одном поле передайте несколько плоских параметров. Например, вместо items_count_total передайте отдельно items_count и total_price.
Выбор платформы Event Tracking зависит от масштаба проекта и команды. Рассмотрим три варианта разного уровня.
Firebase — стандартный выбор для стартапов. Бесплатный лимит — 500 различных event_name, неограниченное число параметров. Интеграция с BigQuery для кастомной аналитики. Минусы: ограниченная сегментация, нет автоматического связывания событий в сессии.
Amplitude — платформа для продуктовой аналитики. Поддерживает Behavioural Cohorts, Funnel Analysis, Pathfinder. Позволяет создавать виртуальные события из комбинации реальных. Интегрируется с 50+ инструментами через Segment.
Segment — middleware для управления событиями. Отправляете события в Segment, а он распределяет их по 300+ инструментам. Полезен в enterprise, где одновременно используют Firebase, Amplitude, Mixpanel, Braze и Salesforce.
PostHog — open-source платформа продуктовой аналитики с собственным Event Tracking. Поддерживает автокаптур событий, session recording и feature flags. Развёртывается на собственном сервере, что критически важно для проектов с GDPR или конфиденциальными данными. Предоставляет Python-совместимый API для ETL-пайплайнов.
Для Flutter проектов рекомендуется flutterfire_analytics + Amplitude через плагин amplitude_flutter. Для React Native — react-native-firebase + mixpanel-react-native.
Часто задаваемые вопросы
Оптимальный диапазон — 50–150 событий на приложение. Меньше 50 — не хватает данных для анализа, больше 150 — падает качество (аналитики не успевают за всеми). Для MVP достаточно 20–30 ключевых событий.
Средний мобильный SDK буферизует события и отправляет батчами каждые 5–30 секунд. Безопасный лимит — 100 событий в минуту на устройство. Больше — риск потери данных при плохом соединении. Всплески (например, загрузка уровня) не критичны.
Да, современные SDK сохраняют события в локальном хранилище при отсутствии сети. При восстановлении соединения они отправляются с правильной временной меткой. Firebase хранит до 7 дней офлайн-событий, Amplitude — до 30 дней.
Новое событие создаётся с новым event_name, старое — остаётся для исторических данных. Создайте mapping в BI-слое (SQL CASE или дашборд) для склейки данных. Никогда не меняйте имя существующего события — сломаете историю.
Да, Event Tracking — основа персонализации. События фильтруются в real-time: если пользователь отправил product_viewed 3 раза без покупки, покажите скидочный попап. Amplitude и Braze поддерживают триггеры на основе событий.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также