Quando pensamos em criar um ponto de acesso dedicado no Android para um catálogo web responsivo, a tentação inicial quase sempre é recorrer a frameworks híbridos robustos que facilmente geram pacotes APK de 40 MB a 80 MB. Em aparelhos topo de linha isso passa despercebido, mas em smartphones intermediários com armazenamento cheio — ou em receptores TV Box e Android TV de entrada com apenas 8 GB de memória — cada megabyte conta.
Ao estruturar a versão 1.0.0 do projeto NoveFlix para Android, nosso objetivo técnico foi o oposto: usar exclusivamente as APIs nativas do sistema (android.webkit.WebView a partir do Android 8.0 / API 26) sem bibliotecas externas desnecessárias, chegando a um instalador final enxuto de 20,95 KB.
Abaixo compartilho quatro aprendizados práticos de engenharia mobile que fazem toda a diferença na experiência real do usuário em um WebView minimalista.
- Suporte real a Tela Cheia em Players de Vídeo HTML5
Por padrão, o WebView do Android ignora o botão de fullscreen dos players de vídeo HTML5 a menos que você implemente os métodos onShowCustomView e onHideCustomView dentro do WebChromeClient:
Kotlin
webView.webChromeClient = object : WebChromeClient() {
private var customView: View? = null
private var customCallback: CustomViewCallback? = null
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
if (customView != null) {
callback?.onCustomViewHidden()
return
}
customView = view
customCallback = callback
fullscreenContainer.addView(view)
fullscreenContainer.visibility = View.VISIBLE
webView.visibility = View.GONE
}
override fun onHideCustomView() {
fullscreenContainer.removeView(customView)
fullscreenContainer.visibility = View.GONE
webView.visibility = View.VISIBLE
customCallback?.onCustomViewHidden()
customView = null
}
}
Sem esse bloco simples, o usuário toca no ícone de expandir o episódio e absolutamente nada acontece na tela.
- Separar links externos da sessão interna do aplicativo
Um cuidado importante de segurança e usabilidade é garantir que o WebViewClient mantenha apenas o domínio principal dentro da janela do app, delegando qualquer link externo para o navegador padrão do Android via Intent(Intent.ACTION_VIEW):
- O histórico e os cookies da sessão do app permanecem isolados do navegador pessoal do usuário.
- Fica imediatamente claro para quem está assistindo quando um clique aponta para fora do catálogo.
- Diferenciar carregamento de página vs. buffering de vídeo
Em redes móveis 4G instáveis, telas brancas causam a impressão de que o aplicativo travou. Adicionar uma barra de progresso fina ligada ao onProgressChanged — junto a uma tela local amigável com botão "Tentar novamente" no onReceivedError — permite que o usuário saiba se a página HTML já terminou de carregar ou se é apenas o player de vídeo aguardando conexão.
- Desafios em Android TV, TV Box e Fire OS
Testar o mesmo pacote fora do touch screen revela detalhes curiosos de hardware:
Android TV certificada: A navegação depende 100% do foco direcional (D-Pad) do controle remoto; elementos clicáveis precisam de estados :focus-visible nítidos no CSS.
TV Box (Android AOSP): Como muitas caixas rodam versões adaptadas de celular, orientar o usuário a ativar o modo cursor/mouse do controle resolve cliques em controles internos do player.
Play Protect e instalação limpa: Manter zero permissões invasivas no AndroidManifest.xml (apenas android.permission.INTERNET) garante que o pacote passe tranquilamente pela verificação ativa do Google Play Protect, como documentamos no guia de instalação segura no Android.
Conclusão
Nem todo projeto web precisa de dezenas de megabytes de dependências nativas no mobile. Quando o conteúdo já é entregue online, um WebView bem configurado entrega velocidade de abertura instantânea, consumo mínimo de memória e compatibilidade ampla do celular à TV da sala.
Se quiser conferir as especificações completas do pacote e os testes por dispositivo, a documentação completa está disponível em noveflixappapk.com.
Top comments (0)