Screen View — zdarzenie analityki mobilnej rejestrujące otwarcie każdego ekranu w aplikacji. To odpowiednik page_view dla webu, dostosowany do modelu nawigacyjnego interfejsów mobilnych. Według danych Amplitude, 2024, Screen View to najczęstsze zdarzenie w analityce aplikacji, stanowiące do 40% wszystkich wysyłanych zdarzeń. Prawidłowa implementacja screen tracking to podstawa analizy ścieżek użytkownika i lejków.
Najważniejsze
Screen View — zdarzenie analityki wysyłane przy otwarciu ekranu aplikacji mobilnej. Zdarzenie zawiera nazwę ekranu (screen_name), klasę (screen_class) i znacznik czasu. W przeciwieństwie do analityki webowej, gdzie page_view jest powiązany z URL, w aplikacjach mobilnych ekrany identyfikowane są po nazwie Activity, Fragment, ViewController lub Custom View.
| Parametr | Typ | Przykład |
|---|---|---|
| screen_name | String | „Product Details” |
| screen_class | String | „ProductDetailActivity” |
| previous_screen | String | „CatalogScreen” |
| timestamp | Long | 1719876543000 |
| duration_sec | Int | 45 |
Parametr previous_screen jest szczególnie ważny: umożliwia odtwarzanie sekwencji przejść i budowanie Screen Flow — mapy ścieżek użytkownika w aplikacji.
Screen View i Page View rozwiązują to samo zadanie — rejestrację wyświetlenia — ale w różnych środowiskach. W webie URL jednoznacznie identyfikuje stronę, a Page View jest powiązany z załadowaniem dokumentu. W aplikacjach mobilnych ekran to stan UI, niekoniecznie odpowiadający osobnemu adresowi.
Kolejną różnicą jest głębokość kontekstu. Screen View w aplikacji mobilnej zawiera parametry stanu: czy użytkownik jest zalogowany, jakie dane są załadowane, czy ekran jest otwarty w trybie edycji. Page View w webie rzadko niesie taki kontekst — rejestruje tylko fakt załadowania URL. To czyni Screen View bardziej informacyjnym dla analityki produktowej, ponieważ każde zdarzenie można segmentować według stanu.
Pierwszy błąd — wysyłanie screen_view przy każdej zmianie stanu wewnątrz ekranu (przełączanie zakładek, otwieranie popupa). Screen View powinien rejestrować tylko pełne przejście na nowy ekran, a nie mikrointerakcje.
Drugi błąd — używanie technicznej nazwy klasy zamiast czytelnej nazwy. „ProductDetailActivityKt” jest bezużyteczne dla analityka — używaj „Product Details” w screen_name.
Trzeci błąd — wysyłanie screen_view bez odpowiednich pól. Pusty screen_name tworzy zbiór śmieciowych wpisów, których nie można pogrupować. Zawsze przekazuj przynajmniej screen_name i screen_class, nawet na ekranach testowych.
Implementacja Screen View tracking zależy od architektury nawigacji. Rozważmy automatyczne i ręczne podejścia na przykładzie Jetpack Compose i SwiftUI.
Użyj LifecycleEventObserver na poziomie NavigationComponent. Za każdym razem, gdy użytkownik przechodzi do nowego routa, uruchamiane jest zdarzenie 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()
)
}
}
}
// Podłączenie w NavHost
fun NavBackStackEntry.trackScreenView(analytics: AnalyticsProvider) {
lifecycle.addObserver(ScreenTrackingObserver(analytics))
}
To podejście gwarantuje, że screen_view jest wysyłany przy każdym powrocie ekranu na pierwszy plan, w tym po powrocie z tła. Lifecycle.Event.ON_RESUME to odpowiedni moment do śledzenia, nie ON_START ani ON_CREATE.
W SwiftUI używa się modyfikatora onAppear wbudowanego w każdy View. Do automatyzacji tworzony jest 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))
}
}
// Użycie:
ProductDetailView()
.trackScreen("Product Details")
Modyfikator trackScreen dodaje się do dowolnego View jedną linią. To czyste i skalowalne rozwiązanie dla projektów SwiftUI.
W projektach z architekturą modułową każdy moduł może używać własnego nazewnictwa ekranów, co prowadzi do duplikacji screen_name. Scentralizowany enum ScreenName rozwiązuje problem — wszystkie ekrany są nazywane według jednolitego standardu w jednym miejscu. Dodanie nowego ekranu wymaga tylko nowej stałej w enum, a nie przeszukiwania całego kodu.
Używaj sealed class do opisu screen_name z grupowaniem według funkcji: ProfileScreen.CHANGE_PASSWORD, OrdersScreen.ORDER_HISTORY, CatalogScreen.SEARCH_RESULTS. Upraszcza to filtrowanie w raportach analityki.
Screen Flow (lub Path Analysis) — wizualizacja sekwencji ekranów, przez które przechodzi użytkownik. To podstawowe narzędzie do identyfikacji wąskich gardeł w nawigacji.
Każdy Screen View z parametrem previous_screen tworzy krawędź grafu: CatalogScreen → ProductDetails → CartScreen. Agregując wszystkie przejścia, buduje się mapa ścieżek. Lejek trzech kroków oparty na Screen Flow pokazuje, gdzie użytkownicy odpadają.
Według danych Mixpanel (2024), analiza Screen Flow ujawnia do 40% problemów z UX, które nie są widoczne przy analizie pojedynczych zdarzeń. Na przykład częste przejście ProductDetails → HomeScreen bez zakupu wskazuje na problem z ceną lub opisem produktu.
Drop-off — punkt, w którym użytkownik opuszcza scenariusz. Jeśli po ekranie Ładowania 60% użytkowników odchodzi, problem leży w szybkości ładowania lub animacji. Jeśli po Paywall — w cenie lub wartości subskrypcji.
Firebase nie udostępnia gotowego raportu Screen Flow, ale dane screen_view są dostępne w BigQuery. Zbuduj zapytanie grupujące przejścia według pary (previous_screen, screen_name) i obliczające częstotliwość. Wynik — macierz przejść, którą można zwizualizować w Looker Studio jako diagram Sankeya.
Uzupełnij Screen Flow segmentacją: osobno dla nowych użytkowników (pierwsze 7 dni) i dla powracających. Nowi użytkownicy częściej utykają na ekranach onboardingu, doświadczeni — szybciej docierają do docelowych działań. Porównanie dwóch strumieni ujawnia wąskie gardła adaptacji.
Wybór narzędzia do Screen View zależy od budżetu, stosu technologicznego i wymaganej szczegółowości. Rozważmy trzy popularne rozwiązania.
Firebase automatycznie śledzi ekrany przez parametr screen_view w każdym zdarzeniu. Nie wymaga dodatkowego kodu po integracji SDK. Ograniczenie: screen_name jest generowany z Activity/ViewController, co nie zawsze daje czytelne nazwy.
Amplitude oferuje wbudowany Pathfinder — wizualny kreator Screen Flow. Obsługuje user property i segmentację według kohort. Pozwala zmieniać nazwy ekranów po stronie serwera bez zmian w kodzie aplikacji.
Mixpanel udostępnia raport Flows w czasie rzeczywistym. Potrafi pokazywać nie tylko przejścia liniowe, ale także rozgałęzienia — które ekrany są odwiedzane po konkretnym. Integruje się z iOS, Android, Flutter i React Native SDK.
Każde zdarzenie screen_view to sieciowe wysyłanie danych. Jeśli aplikacja wysyła screen_view przy każdym przełączeniu zakładki (20+ na minutę), tworzy to dodatkowe obciążenie. Optymalizacja: buforuj screen_view i wysyłaj batch co 5 sekund. Firebase automatycznie agreguje zdarzenia, ale niestandardowe SDK mogą wysyłać każde wywołanie natychmiastowo.
Mierz overhead śledzenia: dodaj znacznik czasu w każdym screen_view i obliczaj opóźnienie od onResume do wysłania. Jeśli opóźnienie przekracza 100 ms, śledzenie wpływa na UX. Używaj wątku tła do wysyłania, aby nie blokować wątku UI. Na urządzeniach niskiego segmentu różnica jest zauważalna.
Często zadawane pytania
Tak, każdy fragment z własną treścią to osobny ekran. TabLayout z trzema zakładkami powinien wysyłać trzy różne screen_view przy przełączaniu. Wyjątek: zakładki-popupy bez samodzielnej nawigacji.
screen_class — techniczna nazwa klasy (np. „MainActivity”), używana przez programistów. screen_name — czytelna nazwa („Ekran główny”), używana w raportach. SDK często wypełnia screen_class automatycznie, screen_name należy ustawić ręcznie.
Przy obrocie urządzenie odtwarza Activity, co powoduje ponowny screen_view. Użyj sprawdzania stanu: wysyłaj zdarzenie tylko przy zmianie ekranu, a nie przy każdym ON_RESUME. Firebase i Amplitude automatycznie deduplikują screen_view.
Dla przeciętnej aplikacji — 10–30 screen_view na użytkownika dziennie. Aplikacje informacyjne: 15–20. Gry: 20–40. Narzędzia: 5–10. Jeśli liczba przekracza 100, sprawdź wysyłanie ekranów przy każdym tapnięciu, a nie przy pełnym przejściu.
Tak, screen_view to jeden ze wskaźników w testach A/B. Porównuj liczbę wyświetleń ekranu między wariantami A i B. Jeśli w wariancie B ekran „Checkout” otrzymuje o 15% mniej screen_view, to sygnał problemu w karcie produktu.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również