Screen View è un evento di analisi mobile che registra l'apertura di ogni schermo in un'applicazione. È l'equivalente di page_view per il web, adattato al modello di navigazione delle interfacce mobili. Secondo Amplitude, 2024, Screen View è l'evento più frequente nell'analisi delle app, costituendo fino al 40% di tutti gli eventi inviati. Una corretta implementazione del tracciamento degli schermi è la base per analizzare i percorsi degli utenti e i funnel.
Punti chiave
Screen View è un evento di analisi che viene inviato quando viene aperto uno schermo di un'applicazione mobile. L'evento contiene il nome dello schermo (screen_name), la classe (screen_class) e un timestamp. A differenza dell'analisi web, dove page_view è legato a un URL, nelle applicazioni mobili gli schermi sono identificati dal nome di Activity, Fragment, ViewController o Custom View.
| Parametro | Tipo | Esempio |
|---|---|---|
| screen_name | String | “Product Details” |
| screen_class | String | “ProductDetailActivity” |
| previous_screen | String | “CatalogScreen” |
| timestamp | Long | 1719876543000 |
| duration_sec | Int | 45 |
Il parametro previous_screen è particolarmente importante: permette di ripristinare la sequenza delle transizioni e costruire un Screen Flow — una mappa dei percorsi degli utenti attraverso l'applicazione.
Screen View e Page View risolvono lo stesso compito — registrare una visualizzazione — ma in ambienti diversi. Sul web, un URL identifica in modo univoco una pagina e Page View è legato al caricamento del documento. Nelle applicazioni mobili, uno schermo è uno stato dell'interfaccia che non corrisponde necessariamente a un indirizzo separato.
Un'altra differenza è la profondità del contesto. Screen View in un'applicazione mobile include parametri di stato: se l'utente è autenticato, quali dati sono caricati, se lo schermo è aperto in modalità di modifica. Page View sul web raramente porta questo contesto — registra solo il fatto del caricamento dell'URL. Questo rende Screen View più informativo per l'analisi di prodotto, poiché ogni evento può essere segmentato per stato.
Il primo errore è inviare screen_view a ogni cambiamento di stato all'interno di uno schermo (cambio di scheda, apertura di un popup). Screen View dovrebbe registrare solo una transizione completa verso un nuovo schermo, non micro-interazioni.
Il secondo errore è usare il nome tecnico della classe invece di un nome leggibile. “ProductDetailActivityKt” è inutile per un analista — usa “Product Details” in screen_name.
Il terzo errore è inviare screen_view senza i campi corrispondenti. Un screen_name vuoto crea un insieme di record spazzatura che non possono essere raggruppati. Passa sempre almeno screen_name e screen_class, anche sugli schermi di test.
L'implementazione del tracciamento di Screen View dipende dall'architettura di navigazione. Esaminiamo gli approcci automatico e manuale usando Jetpack Compose e SwiftUI come esempio.
Usa LifecycleEventObserver a livello di NavigationComponent. Ogni volta che un utente naviga verso una nuova route, l'evento screen_view viene attivato.
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()
)
}
}
}
// Connessione in NavHost
fun NavBackStackEntry.trackScreenView(analytics: AnalyticsProvider) {
lifecycle.addObserver(ScreenTrackingObserver(analytics))
}
Questo approccio garantisce che screen_view venga inviato ogni volta che lo schermo torna in primo piano, incluso il ritorno dallo sfondo. Lifecycle.Event.ON_RESUME è il momento giusto per il tracciamento, non ON_START o ON_CREATE.
In SwiftUI si usa il modificatore onAppear, integrato in ogni View. Per l'automazione, viene creato un 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))
}
}
// Utilizzo:
ProductDetailView()
.trackScreen("Product Details")
Il modificatore trackScreen viene aggiunto a qualsiasi View con una singola riga. È una soluzione pulita e scalabile per progetti SwiftUI.
Nei progetti con architettura modulare, ogni modulo può usare una propria nomenclatura degli schermi, portando a duplicazioni di screen_name. Un enum ScreenName centralizzato risolve il problema — tutti gli schermi vengono nominati secondo uno standard unico in un unico posto. Aggiungere un nuovo schermo richiede solo una nuova costante nell'enum, senza dover cercare in tutto il codice.
Usa una sealed class per descrivere screen_name con raggruppamento per funzionalità: ProfileScreen.CHANGE_PASSWORD, OrdersScreen.ORDER_HISTORY, CatalogScreen.SEARCH_RESULTS. Questo semplifica il filtraggio nei report di analisi.
Screen Flow (o Path Analysis) è una visualizzazione della sequenza di schermi che un utente attraversa. È lo strumento principale per identificare i colli di bottiglia nella navigazione.
Ogni Screen View con il parametro previous_screen fornisce un bordo del grafo: CatalogScreen → ProductDetails → CartScreen. Aggregando tutte le transizioni, viene costruita una mappa dei percorsi. Un funnel a tre passaggi basato su Screen Flow mostra dove gli utenti abbandonano.
Secondo Mixpanel (2024), l'analisi di Screen Flow rivela fino al 40% dei problemi di UX che non sono visibili analizzando singoli eventi. Ad esempio, una transizione frequente ProductDetails → HomeScreen senza acquisto indica un problema con il prezzo o la descrizione del prodotto.
Drop-off è un punto in cui l'utente abbandona uno scenario. Se il 60% degli utenti abbandona dopo la schermata di caricamento, il problema è nella velocità di caricamento o nell'animazione. Se dopo un Paywall — nel costo o nel valore dell'abbonamento.
Firebase non fornisce un report Screen Flow pronto, ma i dati screen_view sono disponibili in BigQuery. Crea una query che raggruppi le transizioni per coppia (previous_screen, screen_name) e conti la frequenza. Il risultato è una matrice di transizioni che può essere visualizzata in Looker Studio come diagramma di Sankey.
Completa il Screen Flow con segmentazione: separatamente per nuovi utenti (primi 7 giorni) e utenti di ritorno. I nuovi utenti rimangono più spesso bloccati sugli schermi di onboarding, mentre gli utenti esperti raggiungono più velocemente le azioni target. Il confronto dei due flussi rivela colli di bottiglia nell'adattamento.
La scelta dello strumento per l'analisi di Screen View dipende dal budget, dallo stack e dal livello di dettaglio richiesto. Esaminiamo tre soluzioni popolari.
Firebase traccia automaticamente gli schermi tramite il parametro screen_view in ogni evento. Non richiede codice aggiuntivo dopo l'integrazione dell'SDK. Limitazione: screen_name viene generato da Activity/ViewController, che non sempre produce nomi leggibili.
Amplitude offre un Pathfinder integrato — un costruttore visivo di Screen Flow. Supporta proprietà utente e segmentazione per coorti. Permette di rinominare gli schermi lato server senza modifiche al codice dell'applicazione.
Mixpanel fornisce un report Flows in tempo reale. Può mostrare non solo transizioni lineari, ma anche ramificazioni — quali schermi vengono visitati dopo uno specifico. Si integra con gli SDK iOS, Android, Flutter e React Native.
Ogni evento screen_view è un invio di dati in rete. Se un'app invia screen_view a ogni cambio di scheda (20+ al minuto), crea un carico inutile. Ottimizzazione: bufferizza gli screen_view e inviali in batch ogni 5 secondi. Firebase aggrega automaticamente gli eventi, ma gli SDK personalizzati possono inviare ogni chiamata immediatamente.
Misura l'overhead del tracciamento: aggiungi un timestamp a ogni screen_view e calcola il ritardo da onResume all'invio. Se il ritardo supera i 100 ms, il tracciamento influisce sull'UX. Usa un thread in background per l'invio per non bloccare il thread dell'interfaccia. Sui dispositivi di fascia bassa, la differenza è notevole.
Domande frequenti
Sì, ogni frammento con contenuto proprio è uno schermo separato. Un TabLayout con tre schede dovrebbe inviare tre diversi eventi screen_view durante il cambio. Eccezione: popup di schede senza navigazione indipendente.
screen_class è il nome tecnico della classe (ad esempio, “MainActivity”), usato dagli sviluppatori. screen_name è un nome leggibile (“Schermo principale”), usato nei report. Gli SDK spesso compilano screen_class automaticamente, mentre screen_name deve essere impostato manualmente.
Quando il dispositivo ruota, l'Activity viene ricreata, causando un screen_view duplicato. Usa un controllo di stato: invia l'evento solo quando lo schermo cambia, non a ogni ON_RESUME. Firebase e Amplitude deduplicano automaticamente screen_view.
Per un'app media — 10–30 screen_view per utente al giorno. App di notizie: 15–20. Giochi: 20–40. Utilità: 5–10. Se il numero supera 100, controlla se gli schermi vengono inviati a ogni tocco invece che a una transizione completa.
Sì, screen_view è uno degli indicatori nei test A/B. Confronta il numero di visualizzazioni dello schermo tra le varianti A e B. Se lo schermo “Checkout” della variante B riceve il 15% in meno di eventi screen_view, è un segnale di problema nella scheda prodotto.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche