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 dez anos e, desde os primeiros dias, tem um ótimo suporte para a Web. Ele acompanha 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 mecanismo de navegador para a plataforma, promovendo a concorrência e a inovação.

Os desenvolvedores podem incluir a Web nos seus aplicativos Android de muitas maneiras. A WebView é usada com frequência para renderizar anúncios, como um componente de layout usado com elementos da interface do Android ou para empacotar jogos HTML 5. As guias personalizadas permitem que os desenvolvedores criem navegadores no app e ofereçam uma experiência de navegação integrada para conteúdo da Web de terceiros, e a Atividade na Web confiável permite que os desenvolvedores usem Progressive Web Apps (PWAs) em apps Android, que podem ser transferidos por download na Play Store.

Android WebView

A WebView fornece 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 avançados 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 anúncios como a AdMob até a criação e o envio de jogos HTML5 completos que usam APIs modernas, como a WebGL.

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

O desafio do navegador no aplicativo

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

A WebView tem amplo suporte ao conjunto de tecnologias modernas da Web e oferece suporte a muitas APIs modernas da Web, como a WebGL. Mas a WebView é principalmente um kit de ferramentas de interface da Web. Ele não se destina e não oferece suporte a todos os recursos da plataforma da Web. Quando uma API já tem uma alternativa no nível do SO, como Web Bluetooth, ou exige a implementação da interface do navegador, como notificações push, ela pode não ter suporte. À medida que a plataforma da Web evolui e adiciona mais recursos que estavam disponíveis apenas para apps Android, essa lacuna ficará ainda maior. Como os desenvolvedores de apps não controlam quais recursos são usados ao abrir conteúdo de terceiros, isso torna a WebView uma opção ruim para navegadores no app ou para abrir Progressive Web Apps. Mesmo que a WebView tenha implementado suporte a todos os recursos da plataforma Web, os desenvolvedores ainda vão precisar escrever código e implementar a própria interface para funcionalidades, como permissões ou notificações push, dificultando a consistência para os usuários.

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

A WebView concede ao app de incorporação acesso total ao conteúdo renderizado, incluindo cookies e o DOM. Esses são recursos avançados que exigem um alto nível de confiança dos usuários.

Como a WebView não se destina a um framework para a criação de navegadores, ela não dispõe de recursos de segurança disponíveis em navegadores modernos.

Arquitetura de vários processos e isolamento de sites

Os navegadores são projetados para oferecer segurança ao renderizar e executar conteúdo não confiável. Para garantir que o usuário permaneça seguro ao navegar pelo conteúdo potencialmente não confiável ou até mesmo malicioso, os navegadores modernos empregam técnicas como o uso de arquitetura de vários processos e isolamento de sites.

Sem a arquitetura de vários processos, uma falha causada pela página da Web pode causar uma falha em todo o app do navegador 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 o acesso e o roubo de informações de outros sites por sites não confiáveis.

Até o Android 8.0 Oreo, o renderizador WebView usava o mesmo processo que o aplicativo incorporador. Em versões mais recentes do SO, e quando os dispositivos forem compatíveis o suficiente, o renderizador será executado em um processo diferente. No entanto, um único processo ainda é compartilhado entre todas as páginas e instâncias de WebView que as executam, fazendo com que seja impossível implementar totalmente o isolamento de sites.

A falta de uma arquitetura de vários processos e do isolamento de sites não é um problema para apps que renderizam conteúdo próprio e de confiança, mas pode ser um problema para apps que executam conteúdo não confiável de terceiros, como navegadores no app, e deixa os usuários expostos a vulnerabilidades como Meltdown e Spectre, que podem ser usadas para roubar cookies, dados bancários, informações pessoais e muito mais.

Indicadores de interface seguros

Também é importante fornecer bons indicadores de segurança aos usuários, porque os navegadores são muito esforçados 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, permitindo que os desenvolvedores de aplicativos criem indicadores de segurança confiáveis. A falta dessa API pode fazer com que um URL exibido na barra de endereço não corresponda à página exibida ao usuário, mesmo em conexões HTTPS seguras.

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

Guias personalizadas como solução para navegadores no aplicativo

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. Originalmente, as guias personalizadas foram lançadas pelo Chrome e, portanto, conhecidas como "guias personalizadas do Chrome". Atualmente, ele é uma API Android, e os navegadores mais conhecidos são compatíveis com guias personalizadas, incluindo Chrome, Firefox, Edge e Samsung Internet. Por isso, é mais apropriado apenas chamá-lo de "Guias personalizadas".

As guias personalizadas ajudam os desenvolvedores a integrar perfeitamente o conteúdo da Web à experiência do aplicativo. Eles 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.

Elas 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 é alimentado pelo navegador do usuário, as guias personalizadas compartilham o armazenamento com o navegador para que os usuários não precisem fazer login novamente nos sites favoritos sempre que um dos apps instalados iniciar 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 Web que têm suporte do navegador que as aciona.

Abrir Progressive Web Apps usando atividades confiáveis na Web

Os Progressive Web Apps oferecem muitos comportamentos e recursos que antes só estavam disponíveis para apps específicos da plataforma na Web. 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 guias personalizadas oferecem 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 o URL que eles estão visitando, assim como o ícone de bloqueio que indica se o site é seguro. Ao abrir a experiência de um app, a barra de ferramentas impede que ele pareça estar integrado ao sistema operacional.

As Atividades confiáveis na Web foram introduzidas no Chrome 72 e permitem que os desenvolvedores usem o PWA dentro de um app Android. O protocolo é semelhante ao de guias personalizadas, mas apresenta APIs que permitem que os desenvolvedores verifiquem (por Digital Asset Links) se controlam o app Android e o URL que está sendo aberto e removem a barra de URL quando ambos são verdadeiros.

Eles também introduziram APIs para criar telas de apresentação ao abrir o PWA ou delegar notificações da Web para serem processadas pelo código do Android. Em breve, vamos lançar mais recursos, como o suporte ao Play Faturamento.

Como espera-se que os URLs abertos em atividades da Web confiáveis sejam PWAs e tenham um conjunto de comportamentos e características de desempenho, essas atividades apresentam critérios de qualidade para os PWAs abertos dentro delas.

Limitações das soluções atuais

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

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

A equipe da Web no Android do Google está analisando alternativas e testando soluções para resolver esses casos de uso. Não perca os detalhes!

Resumo

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

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

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