Интеграция аналитики Firebase Analytics в мобильное приложение
Firebase Analytics — не просто «добавить SDK и смотреть DAU». Если события называются button_click без параметров, или одно и то же действие логируется под разными именами на iOS и Android — дашборд превращается в мусор, который никто не читает. Правильная интеграция начинается с плана событий, а не с pod install.
Архитектура событий
Firebase автоматически собирает стандартные события: first_open, session_start, screen_view (при включённом автоматическом отслеживании экранов), in_app_purchase. Для кастомного поведения нужны именованные события с параметрами.
Хорошая практика — завести перечисление событий вместо строковых констант в коде:
// iOS, Swift
enum AnalyticsEvent {
case productViewed(productId: String, category: String)
case checkoutStarted(cartValue: Double, itemCount: Int)
case purchaseCompleted(orderId: String, revenue: Double, currency: String)
var name: String {
switch self {
case .productViewed: return "product_viewed"
case .checkoutStarted: return "checkout_started"
case .purchaseCompleted: return "purchase_completed"
}
}
var parameters: [String: Any] {
switch self {
case .productViewed(let id, let cat):
return ["product_id": id, "category": cat]
case .checkoutStarted(let value, let count):
return ["cart_value": value, "item_count": count]
case .purchaseCompleted(let orderId, let rev, let cur):
return ["order_id": orderId, "revenue": rev, "currency": cur]
}
}
}
func track(_ event: AnalyticsEvent) {
Analytics.logEvent(event.name, parameters: event.parameters)
}
На Android аналогичный подход через sealed class или object с константами.
User Properties и аудитории
User Properties — атрибуты пользователя, которые остаются между сессиями и используются для сегментации в аудиториях, Remote Config и A/B тестах:
Analytics.setUserProperty("premium", forName: "subscription_status")
Analytics.setUserProperty("ru", forName: "preferred_language")
Firebase.analytics.setUserProperty("subscription_status", "premium")
Важно: Firebase ограничивает 25 кастомными user properties на проект. Используйте их для стабильных атрибутов (план подписки, тип аккаунта), а не для сессионных данных.
Автоматический screen_view и ручной контроль
По умолчанию Firebase на iOS логирует screen_view при каждом появлении UIViewController через swizzling. Это работает плохо в TabBar-приложениях: при переключении вкладок события дублируются. Рекомендую отключить автоматику и логировать вручную в viewDidAppear:
// Info.plist: FirebaseAutomaticScreenReportingEnabled = NO
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
Analytics.logEvent(AnalyticsEventScreenView, parameters: [
AnalyticsParameterScreenName: "ProductDetail",
AnalyticsParameterScreenClass: "ProductDetailViewController"
])
}
Debug-режим и DebugView
Для проверки событий в реальном времени — Firebase DebugView в консоли. Активируется через launch argument:
-FIRDebugEnabled
В DebugView видно каждое событие с параметрами с задержкой ~1 секунда. В продакшне события попадают в консоль с задержкой до 24 часов — это нормально, но для отладки DebugView незаменим.
Ограничения, о которых забывают
- Максимум 500 уникальных имён событий на проект (не сессию)
- Имя события до 40 символов, значение строкового параметра до 100 символов
- Числовые параметры до 25 кастомных на событие
- Данные в BigQuery доступны при подключении платного тарифа Blaze
Что входит в работу
- Добавление SDK и инициализация
- Разработка плана событий совместно с командой продукта
- Реализация типизированного трекер-слоя
- Настройка User Properties
- Конфигурация screen_view (автоматика или ручная)
- Проверка через DebugView до релиза
Сроки
Базовая интеграция с 10–15 событиями: 1–2 дня. Полный трекинг с аудиториями и BigQuery: 3 дня. Стоимость рассчитывается индивидуально после анализа требований.







