Screen View é um evento de análise móvel que registra a abertura de cada tela em um aplicativo. É o equivalente de page_view para a web, adaptado ao modelo de navegação das interfaces móveis. De acordo com a Amplitude, 2024, Screen View é o evento mais frequente na análise de aplicativos, representando até 40% de todos os eventos enviados. A implementação correta do rastreamento de telas é a base para analisar os caminhos do usuário e funis.
Principais conclusões
Screen View é um evento de análise que é enviado quando uma tela de aplicativo móvel é aberta. O evento contém o nome da tela (screen_name), a classe (screen_class) e um carimbo de data/hora. Ao contrário da análise web, onde page_view está vinculado a um URL, em aplicativos móveis as telas são identificadas pelo nome da Activity, Fragment, ViewController ou Custom View.
| Parâmetro | Tipo | Exemplo |
|---|---|---|
| screen_name | String | “Product Details” |
| screen_class | String | “ProductDetailActivity” |
| previous_screen | String | “CatalogScreen” |
| timestamp | Long | 1719876543000 |
| duration_sec | Int | 45 |
O parâmetro previous_screen é especialmente importante: ele permite restaurar a sequência de transições e construir um Screen Flow — um mapa dos caminhos do usuário pelo aplicativo.
Screen View e Page View resolvem a mesma tarefa — registar uma visualização — mas em ambientes diferentes. Na web, um URL identifica exclusivamente uma página, e o Page View está vinculado ao carregamento do documento. Em aplicativos móveis, uma tela é um estado da IU que não corresponde necessariamente a um endereço separado.
Outra diferença é a profundidade do contexto. Screen View em um aplicativo móvel inclui parâmetros de estado: se o usuário está autenticado, quais dados estão carregados, se a tela está aberta em modo de edição. Page View na web raramente carrega esse contexto — ele apenas regista o facto do carregamento do URL. Isso torna o Screen View mais informativo para a análise de produto, já que cada evento pode ser segmentado por estado.
O primeiro erro é enviar screen_view em cada mudança de estado dentro de uma tela (alternância de abas, abertura de popup). Screen View deve registrar apenas uma transição completa para uma nova tela, não microinterações.
O segundo erro é usar o nome técnico da classe em vez de um nome legível. “ProductDetailActivityKt” é inútil para um analista — use “Product Details” no screen_name.
O terceiro erro é enviar screen_view sem os campos correspondentes. Um screen_name vazio cria um conjunto de registos de lixo que não podem ser agrupados. Sempre passe pelo menos screen_name e screen_class, mesmo em telas de teste.
A implementação do rastreamento de Screen View depende da arquitetura de navegação. Vamos analisar as abordagens automática e manual usando Jetpack Compose e SwiftUI como exemplo.
Use LifecycleEventObserver ao nível do NavigationComponent. Cada vez que um usuário navega para uma nova rota, o evento screen_view é acionado.
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()
)
}
}
}
// Conexão no NavHost
fun NavBackStackEntry.trackScreenView(analytics: AnalyticsProvider) {
lifecycle.addObserver(ScreenTrackingObserver(analytics))
}
Esta abordagem garante que o screen_view seja enviado sempre que a tela retorna ao primeiro plano, incluindo o retorno do segundo plano. Lifecycle.Event.ON_RESUME é o momento certo para o rastreamento, não ON_START ou ON_CREATE.
No SwiftUI, usa-se o modificador onAppear, incorporado em cada View. Para automação, é criado um 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))
}
}
// Uso:
ProductDetailView()
.trackScreen("Product Details")
O modificador trackScreen é adicionado a qualquer View com uma única linha. É uma solução limpa e escalável para projetos SwiftUI.
Em projetos com arquitetura modular, cada módulo pode usar sua própria nomenclatura de telas, o que leva à duplicação de screen_name. Um enum ScreenName centralizado resolve o problema — todas as telas são nomeadas de acordo com um padrão único em um só lugar. Adicionar uma nova tela requer apenas uma nova constante no enum, em vez de procurar em todo o código.
Use uma sealed class para descrever screen_name com agrupamento por funcionalidade: ProfileScreen.CHANGE_PASSWORD, OrdersScreen.ORDER_HISTORY, CatalogScreen.SEARCH_RESULTS. Isso simplifica a filtragem nos relatórios de análise.
Screen Flow (ou Path Analysis) é uma visualização da sequência de telas que um usuário percorre. É a ferramenta principal para identificar gargalos na navegação.
Cada Screen View com o parâmetro previous_screen fornece uma aresta do grafo: CatalogScreen → ProductDetails → CartScreen. Agregando todas as transições, um mapa de caminhos é construído. Um funil de três etapas baseado no Screen Flow mostra onde os usuários desistem.
De acordo com a Mixpanel (2024), a análise de Screen Flow revela até 40% dos problemas de UX que não são visíveis ao analisar eventos individuais. Por exemplo, uma transição frequente ProductDetails → HomeScreen sem compra indica um problema com o preço ou a descrição do produto.
Drop-off é um ponto onde o usuário abandona um cenário. Se 60% dos usuários saem após a tela de carregamento, o problema está na velocidade de carregamento ou na animação. Se for após um Paywall — no custo ou valor da assinatura.
Firebase não fornece um relatório Screen Flow pronto, mas os dados de screen_view estão disponíveis no BigQuery. Crie uma consulta que agrupe as transições por par (previous_screen, screen_name) e conte a frequência. O resultado é uma matriz de transições que pode ser visualizada no Looker Studio como um diagrama de Sankey.
Complemente o Screen Flow com segmentação: separadamente para novos usuários (primeiros 7 dias) e usuários que retornam. Novos usuários frequentemente ficam presos nas telas de onboarding, enquanto usuários experientes chegam mais rápido às ações-alvo. Comparar os dois fluxos revela gargalos de adaptação.
A escolha da ferramenta para análise de Screen View depende do orçamento, da stack e do nível de detalhe necessário. Vamos analisar três soluções populares.
Firebase rastreia automaticamente as telas através do parâmetro screen_view em cada evento. Não requer código adicional após a integração do SDK. Limitação: o screen_name é gerado a partir da Activity/ViewController, o que nem sempre produz nomes legíveis.
Amplitude oferece um Pathfinder integrado — um construtor visual de Screen Flow. Suporta propriedades de usuário e segmentação por coortes. Permite renomear telas no lado do servidor sem alterações no código do aplicativo.
Mixpanel fornece um relatório Flows em tempo real. Pode mostrar não apenas transições lineares, mas também ramificações — quais telas são visitadas após uma específica. Integra-se com SDKs iOS, Android, Flutter e React Native.
Cada evento screen_view é um envio de dados pela rede. Se um aplicativo envia screen_view em cada alternância de aba (20+ por minuto), cria uma carga desnecessária. Otimização: armazene em buffer os screen_view e envie em lote a cada 5 segundos. O Firebase agrega eventos automaticamente, mas SDKs personalizados podem enviar cada chamada imediatamente.
Meça a sobrecarga do rastreamento: adicione um carimbo de data/hora a cada screen_view e calcule o atraso desde onResume até o envio. Se o atraso exceder 100 ms, o rastreamento afeta a UX. Use uma thread em segundo plano para o envio para não bloquear a thread da IU. Em dispositivos de baixo custo, a diferença é notável.
Perguntas frequentes
Sim, cada fragmento com conteúdo próprio é uma tela separada. Um TabLayout com três abas deve enviar três eventos screen_view diferentes ao alternar. Exceção: popups de abas sem navegação independente.
screen_class é o nome técnico da classe (por exemplo, “MainActivity”), usado pelos desenvolvedores. screen_name é um nome legível (“Tela inicial”), usado nos relatórios. Os SDKs geralmente preenchem screen_class automaticamente, enquanto screen_name precisa ser definido manualmente.
Ao rodar o dispositivo, a Activity é recriada, o que causa um screen_view duplicado. Use uma verificação de estado: envie o evento apenas quando a tela mudar, não em cada ON_RESUME. Firebase e Amplitude desduplicam screen_view automaticamente.
Para um aplicativo médio — 10–30 screen_view por usuário por dia. Aplicativos de notícias: 15–20. Jogos: 20–40. Utilitários: 5–10. Se o número exceder 100, verifique se as telas estão sendo enviadas em cada toque em vez de uma transição completa.
Sim, screen_view é um dos indicadores em testes A/B. Compare o número de visualizações de tela entre as variantes A e B. Se a tela “Checkout” da variante B receber 15% menos eventos screen_view, isso é um sinal de problema no cartão do produto.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também