Screen View — подія мобільної аналітики, що фіксує відкриття кожного екрана в додатку. Це аналог page_view для вебу, адаптований під навігаційну модель мобільних інтерфейсів. За даними Amplitude, 2024, Screen View — найчастіша подія в аналітиці додатків, складаючи до 40% усіх подій, що надсилаються. Правильна реалізація screen tracking — основа для аналізу користувацьких шляхів і воронок.
Головне
Screen View — подія аналітики, яка надсилається при відкритті екрана мобільного додатка. Подія містить ім'я екрана (screen_name), клас (screen_class) та часову мітку. На відміну від веб-аналітики, де page_view прив'язаний до URL, у мобільних додатках екрани ідентифікуються за назвою Activity, Fragment, ViewController або Custom View.
| Параметр | Тип | Приклад |
|---|---|---|
| screen_name | String | «Product Details» |
| screen_class | String | «ProductDetailActivity» |
| previous_screen | String | «CatalogScreen» |
| timestamp | Long | 1719876543000 |
| duration_sec | Int | 45 |
Параметр previous_screen особливо важливий: він дозволяє відновлювати послідовність переходів і будувати Screen Flow — карту шляхів користувача по додатку.
Screen View та Page View вирішують одне завдання — фіксацію перегляду — але в різних середовищах. У вебі URL однозначно ідентифікує сторінку, і Page View прив'язаний до завантаження документа. У мобільних додатках екран — це стан UI, що не обов'язково відповідає окремій адресі.
Ще одна відмінність — глибина контексту. Screen View у мобільному додатку включає параметри стану: чи авторизований користувач, які дані завантажено, чи відкрито екран у режимі редагування. Page View у вебі рідко несе такий контекст — він фіксує лише факт завантаження URL. Це робить Screen View більш інформативним для продуктової аналітики, оскільки кожну подію можна сегментувати за станом.
Перша помилка — надсилання screen_view при кожній зміні стану всередині екрана (перемикання табів, відкриття попапа). Screen View має фіксувати лише повноцінний перехід на новий екран, а не мікровзаємодії.
Друга помилка — використання технічного імені класу замість читабельної назви. «ProductDetailActivityKt» непотрібний аналітику — використовуйте «Product Details» у screen_name.
Третя помилка — надсилання screen_view без відповідних полів. Пустий screen_name створює набір сміттєвих записів, які неможливо згрупувати. Завжди передавайте хоча б screen_name та screen_class, навіть на тестових екранах.
Реалізація Screen View tracking залежить від архітектури навігації. Розглянемо автоматичний та ручний підходи на прикладі Jetpack Compose та SwiftUI.
Використовуйте LifecycleEventObserver на рівні NavigationComponent. Щоразу, коли користувач переходить на новий роут, спрацьовує подія screen_view.
class ScreenTrackingObserver(
private val analytics: AnalyticsProvider
) : LifecycleEventObserver {
override fun onStateChanged(
source: LifecycleOwner,
event: Lifecycle.Event
) {
if (event == Lifecycle.Event.ON_RESUME) {
val route = source.getRouteFromLifecycleOwner()
analytics.logScreenView(
screenName = route.screenName,
screenClass = source.getLocalClassName()
)
}
}
}
// Підключення в NavHost
fun NavBackStackEntry.trackScreenView(analytics: AnalyticsProvider) {
lifecycle.addObserver(ScreenTrackingObserver(analytics))
}
Підхід гарантує, що screen_view надсилається при кожному поверненні екрана на передній план, включаючи повернення з фону. Lifecycle.Event.ON_RESUME — правильний момент для трекінгу, не ON_START і не ON_CREATE.
На SwiftUI використовується модифікатор onAppear, вбудований у кожен View. Для автоматизації створюється ViewModifier.
struct ScreenTrackingModifier: ViewModifier {
let screenName: String
func body(content: Content) -> some View {
content.onAppear {
Analytics.shared().logScreenView(
name: screenName,
className: "\(Self.self)"
)
}
}
}
extension View {
func trackScreen(_ name: String) -> some View {
modifier(ScreenTrackingModifier(screenName: name))
}
}
// Використання:
ProductDetailView()
.trackScreen("Product Details")
Модифікатор trackScreen додається до будь-якого View одним рядком. Це чисте та масштабоване рішення для SwiftUI-проєктів.
У проєктах з модульною архітектурою кожен модуль може використовувати свій неймінг екранів, що призводить до дублювання screen_name. Централізований enum ScreenName вирішує проблему — всі екрани іменуються за єдиним стандартом в одному місці. Додавання нового екрана потребує лише нової константи в enum, а не пошуку по всьому коду.
Використовуйте sealed class для опису screen_name з групуванням по фічах: ProfileScreen.CHANGE_PASSWORD, OrdersScreen.ORDER_HISTORY, CatalogScreen.SEARCH_RESULTS. Це спрощує фільтрацію в звітах аналітики.
Screen Flow (або Path Analysis) — візуалізація послідовності екранів, яку проходить користувач. Це основний інструмент для виявлення вузьких місць у навігації.
Кожен Screen View з параметром previous_screen дає ребро графа: CatalogScreen → ProductDetails → CartScreen. Агрегуючи всі переходи, будується карта шляхів. Триступенева воронка на основі Screen Flow показує, де користувачі відвалюються.
За даними Mixpanel (2024), аналіз Screen Flow виявляє до 40% проблем з UX, які не видно при аналізі окремих подій. Наприклад, частий перехід ProductDetails → HomeScreen без покупки вказує на проблему з ціною або описом товару.
Drop-off — точка, в якій користувач покидає сценарій. Якщо після Loading екрана 60% користувачів ідуть, проблема у швидкості завантаження або анімації. Якщо після Paywall — у вартості або цінності підписки.
Firebase не надає готового Screen Flow звіту, але дані screen_view доступні в BigQuery. Побудуйте запит, який групує переходи за парою (previous_screen, screen_name) та рахує частоту. Результат — матриця переходів, яку можна візуалізувати в Looker Studio як Sankey-діаграму.
Доповніть Screen Flow сегментацією: окремо для нових користувачів (перші 7 днів) та для тих, хто повернувся. Нові користувачі частіше застрягають на онбордінг-екранах, досвідчені — швидше доходять до цільових дій. Порівняння двох потоків виявляє вузькі місця адаптації.
Вибір інструмента для Screen View залежить від бюджету, стеку та необхідної деталізації. Розглянемо три популярних рішення.
Firebase автоматично відстежує екрани через параметр screen_view у кожній події. Не потребує додаткового коду після інтеграції SDK. Обмеження: screen_name генерується з Activity/ViewController, що не завжди дає читабельні імена.
Amplitude пропонує вбудований Pathfinder — візуальний побудовник Screen Flow. Підтримує user property та сегментацію за когортами. Дозволяє перейменовувати екрани на стороні сервера без змін у коді додатка.
Mixpanel надає Flows-звіт у реальному часі. Вміє показувати не лише лінійні переходи, але й розгалуження — які екрани відвідуються після конкретного. Інтегрується з iOS, Android, Flutter та React Native SDK.
Кожна подія screen_view — це мережеве надсилання даних. Якщо додаток шле screen_view на кожному перемиканні вкладки (20+ за хвилину), це створює зайве навантаження. Оптимізація: буферизуйте screen_view та надсилайте батчем раз на 5 секунд. Firebase автоматично агрегує події, але кастомні SDK можуть надсилати кожен виклик негайно.
Вимірюйте overhead трекінгу: додайте мітку часу в кожен screen_view та рахуйте затримку від onResume до надсилання. Якщо затримка перевищує 100 мс, трекінг впливає на UX. Використовуйте фоновий потік для надсилання, щоб не блокувати UI-потік. На пристроях низького сегмента різниця помітна.
Часті запитання
Так, кожен фрагмент із власним контентом — окремий екран. TabLayout із трьома вкладками має надсилати три різних screen_view при перемиканні. Виняток: вкладки-попапи без самостійної навігації.
screen_class — технічне ім'я класу (наприклад, «MainActivity»), використовується розробниками. screen_name — читабельна назва («Головний екран»), використовується у звітах. SDK часто заповнює screen_class автоматично, screen_name потрібно задавати вручну.
При повороті пристрій перестворює Activity, що викликає повторний screen_view. Використовуйте state-перевірку: надсилайте подію лише при зміні екрана, а не при кожному ON_RESUME. Firebase та Amplitude автоматично дедуплікують screen_view.
Для середнього додатка — 10–30 screen_view на користувача на день. Новинні додатки: 15–20. Ігри: 20–40. Утиліти: 5–10. Якщо число перевищує 100, перевірте надсилання екранів на кожен tap, а не на повноцінний перехід.
Так, screen_view — один з індикаторів у A/B-тестах. Порівнюйте кількість переглядів екрана між варіантами A та B. Якщо на варіанті B екран «Checkout» отримує на 15% менше screen_view, це сигнал проблеми в картці товару.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також