Web no Android

Como diferentes componentes podem ser usados para renderizar conteúdo da Web em apps Android.

A plataforma Android existe há mais de 10 anos e, desde o início, oferece ótimo suporte para a Web. Ele foi enviado com a WebView, um componente que permite que os desenvolvedores usem a Web nos próprios apps Android. Além disso, o Android permite que os desenvolvedores tragam o próprio motor de navegador para a plataforma, promovendo a competição e a inovação.

Os desenvolvedores podem incluir a Web nos apps Android de várias maneiras. A WebView é usada com frequência para renderizar anúncios, como um componente de layout usado com elementos de interface do Android ou para empacotar jogos HTML5. Com as guias personalizadas, os desenvolvedores podem criar navegadores no app e oferecer uma experiência de navegação seamless para conteúdo da Web de terceiros. Já a atividade confiável na Web permite que os desenvolvedores usem apps da Web progressivos (PWAs) em apps Android, que podem ser baixados na Play Store.

Android WebView

A WebView oferece aos desenvolvedores acesso a HTML, CSS e JavaScript modernos nos apps Android e permite que o conteúdo seja enviado dentro do APK ou hospedado na Internet. Ele é um dos componentes mais flexíveis e poderosos do Android, que pode ser usado na maioria dos casos de uso em que o conteúdo da Web é incluído em um app Android. Desde a ativação de serviços de publicidade, como a AdMob, até a criação e o envio de jogos HTML5 completos que usam APIs modernas, como o WebGL.

No entanto, quando usada para criar um navegador no app ou incluir um PWA em um aplicativo Android, a WebView não tem a segurança, os recursos e as capacidades da plataforma da Web.

O desafio do navegador no app

Com o tempo, mais e mais desenvolvedores criaram experiências de navegador incorporando conteúdo de terceiros ao app Android, com o objetivo de criar uma experiência mais simples para os usuários ao navegar para sites de terceiros. Essas experiências ficaram conhecidas como navegadores no app.

A WebView tem amplo suporte para a pilha de tecnologia da Web moderna e oferece suporte a muitas APIs da Web modernas, como a WebGL. Mas a WebView é principalmente um kit de ferramentas de interface da Web. Ele não tem como objetivo oferecer suporte a todos os recursos da plataforma da Web. Quando uma API já tem uma alternativa no nível do SO, como o Bluetooth da Web, ou exige que a interface do navegador seja implementada, como notificações push, talvez não haja suporte. À medida que a plataforma da Web evolui e adiciona mais recursos que só estavam disponíveis para apps Android, essa lacuna vai aumentar ainda mais. Como os desenvolvedores de apps não controlam quais recursos são usados ao abrir conteúdo de terceiros, a WebView é uma escolha ruim para navegadores no app ou para abrir apps da Web progressivos. Mesmo que a WebView implementasse suporte a todos os recursos da plataforma da Web, os desenvolvedores ainda precisariam escrever código e implementar a própria interface para funcionalidades como permissões ou notificações push, o que dificulta a consistência para os usuários.

Considerações de segurança para usar a WebView como um navegador no app

A WebView dá ao aplicativo incorporado acesso total ao conteúdo renderizado, incluindo cookies e o DOM. Esses são recursos poderosos que exigem um alto nível de confiança dos usuários.

Como a WebView não é destinada a ser uma estrutura para criar navegadores, ela não tem recursos de segurança disponíveis em navegadores modernos.

Arquitetura multiprocesso e isolamento de sites

Os navegadores são projetados para serem seguros ao renderizar e executar conteúdo não confiável. Para garantir a segurança do usuário ao navegar por conteúdo potencialmente não confiável ou malicioso, os navegadores modernos empregam técnicas como o uso de arquitetura multiprocesso e isolamento de sites.

Sem a arquitetura de vários processos, uma falha causada pela página da Web pode causar uma falha no app do navegador inteiro ou uma vulnerabilidade pode ser explorada para assumir o controle de todo o dispositivo. O isolamento de sites adiciona outra camada de segurança que dificulta que sites não confiáveis acessem e roubem informações de outros sites.

Até o Android 8.0 Oreo, o renderizador da WebView usava o mesmo processo do aplicativo de incorporação. Em versões mais recentes do SO e quando os dispositivos são capazes o suficiente, o renderizador é executado em um processo diferente. No entanto, um único processo ainda é compartilhado entre todas as páginas e instâncias da WebView em execução, o que torna impossível implementar totalmente o isolamento do site.

A falta de uma arquitetura de vários processos e o isolamento do site não são um problema para aplicativos que renderizam conteúdo que eles próprios possuem e confiam, mas podem ser um problema para aplicativos que executam conteúdo de terceiros não confiáveis, como navegadores no app, e deixam os usuários expostos a vulnerabilidades como Meltdown e Spectre, que podem ser usadas para roubar cookies, detalhes bancários, informações pessoais e muito mais.

Indicadores seguros da interface

Também é importante fornecer bons indicadores de segurança aos usuários. Os navegadores se esforçam e estão sempre evoluindo nessa área. No entanto, a WebView não tem uma API para verificar se a conexão de um site é segura, o que permite que os desenvolvedores de aplicativos criem indicadores de segurança confiáveis. A falta de uma API desse tipo pode fazer com que um URL exibido na barra de endereço não corresponda à página mostrada ao usuário, mesmo em conexões HTTPS seguras.

Outra opção disponível para os desenvolvedores é incorporar um mecanismo de navegador ao aplicativo. Além de aumentar o tamanho do aplicativo, essa abordagem é complexa e demorada.

As Custom Tabs como uma solução para navegadores no app

As guias personalizadas foram introduzidas no Chrome 45 e permitem que os desenvolvedores usem uma guia do navegador padrão do usuário como parte do aplicativo. As guias personalizadas foram lançadas originalmente pelo Chrome e, portanto, eram conhecidas como "guias personalizadas do Chrome". Hoje, é uma API do Android, e a maioria dos navegadores mais conhecidos oferece suporte a guias personalizadas, incluindo Chrome, Firefox, Edge e Samsung Internet. Por isso, é mais adequado chamar de "Guias personalizadas".

As guias personalizadas ajudam os desenvolvedores a integrar conteúdo da Web à experiência do app. Elas também permitem que os desenvolvedores personalizem a atividade em que o conteúdo da Web é mostrado, permitindo personalizar a cor da barra de ferramentas, os botões de ação, a animação de transição e muito mais.

Eles também oferecem recursos que antes não estavam disponíveis ao usar a WebView ou incorporar um mecanismo de navegador. Como o navegador no app é fornecido pelo navegador do usuário, as Custom Tabs compartilham o armazenamento com o navegador. Assim, os usuários não precisam fazer login novamente nos sites favoritos sempre que um dos apps instalados inicia uma sessão de navegação no app.

Ao contrário das WebViews, as guias personalizadas oferecem suporte a todos os recursos e APIs da plataforma da Web que são aceitos pelo navegador que as oferece.

Abrir apps da Web progressivos usando a Atividade Confiável na Web

Os Progressive Web Apps trazem para a Web muitos comportamentos e recursos que antes só estavam disponíveis para apps específicos da plataforma. Com a introdução do comportamento semelhante a apps, o desejo dos desenvolvedores de reutilizar essas experiências no Android aumentou, e eles começaram a pedir maneiras de integrar PWAs aos apps.

As abas personalizadas têm suporte a todos os recursos e APIs modernos da Web, mas, como foram projetadas principalmente para abrir conteúdo de terceiros, elas têm uma barra de ferramentas na parte de cima que informa aos usuários qual URL eles estão visitando, além do ícone de cadeado que indica se o site é seguro. Ao abrir a experiência de um app, a barra de ferramentas impede que o aplicativo pareça integrado ao sistema operacional.

As Atividades confiáveis na Web foram introduzidas no Chrome 72 e permitem que os desenvolvedores usem a PWA em um app Android. O protocolo é semelhante ao das guias personalizadas, mas apresenta APIs que permitem aos desenvolvedores verificar (usando links de recursos digitais) se eles controlam o app Android e o URL que está sendo aberto e removem a barra de URL quando ambos são verdadeiros.

Também foram introduzidas APIs para criar telas de abertura ao abrir o PWA ou delegar notificações da Web para serem processadas pelo código do Android. Outros recursos, como o suporte ao Play Faturamento, serão lançados em breve.

Como os URLs abertos em atividades confiáveis da Web precisam ser PWAs e ter um conjunto de comportamentos e características de desempenho, as atividades confiáveis da Web apresentam critérios de qualidade para PWAs sendo abertos dentro delas.

Limitações das soluções atuais

O feedback dos desenvolvedores mostrou a necessidade de compatibilidade de plataforma das guias personalizadas combinadas à flexibilidade da WebView para que eles pudessem, por exemplo, acessar o DOM ou injetar JavaScript nos navegadores no app.

As guias personalizadas são uma guia renderizada pelo navegador do usuário, com uma interface personalizada ou sem interface alguma. Isso significa que o navegador precisa atender às expectativas do usuário em relação à privacidade e à segurança, o que torna alguns desses recursos impossíveis.

A equipe da Web no Android do Google está analisando alternativas e testando soluções para resolver esses casos de uso. Fique de olho para mais detalhes.

Resumo

A WebView é útil quando um aplicativo precisa de HTML, CSS e JavaScript no app Android, mas não usa recursos mais avançados disponíveis na Web moderna, como notificações push, Bluetooth da Web e outros. Não é recomendado abrir conteúdo projetado para a plataforma da Web moderna, porque ele pode não ser exibido da maneira que o desenvolvedor pretendia. A WebView não é recomendada para criar navegadores no app. Por outro lado, a exibição de conteúdo da Web próprio é uma área em que as WebViews se destacam.

A Atividade Confiável na Web precisa ser usada quando os desenvolvedores querem renderizar o próprio app Web Progressivo em tela cheia no aplicativo Android. Ela pode ser usada como a única atividade no app ou junto com outras atividades do Android.

As guias personalizadas são a maneira recomendada de abrir conteúdo de terceiros projetado para a plataforma da Web, também conhecido como navegadores no app.