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 зависи от архитектурата на навигация. Нека разгледаме автоматичния и ръчния подход на примера на 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 — точката, в която потребителят напуска сценария. Ако след екрана за зареждане 60% от потребителите напуснат, проблемът е в скоростта на зареждане или анимацията. Ако след Paywall — в цената или стойността на абонамента.
Firebase не предоставя готов Screen Flow отчет, но данните screen_view са достъпни в BigQuery. Създайте заявка, която групира преходите по двойка (previous_screen, screen_name) и изчислява честотата. Резултатът — матрица на преходите, която може да бъде визуализирана в Looker Studio като Sankey диаграма.
Допълнете Screen Flow със сегментация: отделно за нови потребители (първите 7 дни) и за завърнали се. Новите потребители по-често засядат на onboarding екрани, опитните стигат по-бързо до целевите действия. Сравнението на двата потока разкрива тесни места в адаптацията.
Изборът на инструмент за 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 ms, проследяването влияе на UX. Използвайте фонова нишка за изпращане, за да не блокирате UI нишката. На устройства от нисък клас разликата е забележима.
Често задавани въпроси
Да, всеки фрагмент със собствено съдържание е отделен екран. TabLayout с три раздела трябва да изпраща три различни screen_view при превключване. Изключение: изскачащи раздели без самостоятелна навигация.
screen_class — техническото име на класа (напр. „MainActivity”), използвано от разработчици. screen_name — четливото име („Главен екран”), използвано в отчети. SDK често попълва screen_class автоматично, screen_name трябва да се зададе ръчно.
При завъртане устройството пресъздава Activity, което води до повторен screen_view. Използвайте проверка на състоянието: изпращайте събитието само при промяна на екрана, не при всяко ON_RESUME. Firebase и Amplitude автоматично дедуплицират screen_view.
За средно приложение — 10–30 screen_view на потребител на ден. Новинарски приложения: 15–20. Игри: 20–40. Помощни програми: 5–10. Ако броят надвишава 100, проверете дали екраните се изпращат при всяко докосване, а не при пълен преход.
Да, screen_view е един от индикаторите в A/B тестове. Сравнете броя на прегледите на екрана между варианти A и B. Ако вариант B на екрана „Checkout” получава 15% по-малко screen_view, това е сигнал за проблем в картата на продукта.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също