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 o início, oferece um ótimo suporte para a Web. Ele foi lançado com o 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 usem o próprio mecanismo de navegador na plataforma, promovendo a concorrência e a inovação.

Os desenvolvedores podem incluir a Web nos apps Android de várias maneiras. O WebView é frequentemente usado para renderizar anúncios, como um componente de layout usado com elementos da interface do Android ou para empacotar jogos HTML5. As guias personalizadas permitem que os desenvolvedores criem navegadores no app e ofereçam uma experiência de navegação perfeita para conteúdo da Web de terceiros. Já a Atividade Confiável na Web permite que os desenvolvedores usem os Apps Web Progressivos (PWAs) em apps Android, que podem ser baixados na Google Play Store.

Android WebView

O WebView dá aos desenvolvedores acesso a HTML, CSS e JavaScript modernos nos apps Android e permite que o conteúdo seja enviado no APK ou hospedado na Internet. É um dos componentes mais flexíveis e eficientes do Android, que pode ser usado na maioria dos casos 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 WebGL.

No entanto, quando usado para criar um navegador no app ou incluir um PWA em um app Android, o 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, cada vez mais desenvolvedores criaram experiências de navegador incorporando conteúdo de terceiros ao app Android, com o objetivo de criar uma experiência mais integrada para os usuários ao navegar para sites de terceiros. Essas experiências ficaram conhecidas como navegadores no app.

O WebView tem amplo suporte para a pilha de tecnologia da Web moderna e oferece suporte a muitas APIs da Web modernas, como WebGL. Mas o WebView é principalmente um kit de ferramentas de interface da Web. Ele não foi criado para oferecer suporte a todos os recursos da plataforma da Web. Quando uma API já tem uma alternativa no nível do SO, como o Web Bluetooth, ou exige que a interface do navegador seja implementada, como notificações push, ela pode não ser compatível. À medida que a plataforma da Web evolui e adiciona mais recursos que estavam disponíveis apenas para apps Android, essa lacuna se torna ainda maior. Como os desenvolvedores de apps não controlam quais recursos são usados ao abrir conteúdo de terceiros, o WebView não é uma boa opção para navegadores no app ou para abrir Apps Web Progressivos. Mesmo que o WebView implementasse suporte para todos os recursos da plataforma da Web, os desenvolvedores ainda precisariam escrever código e implementar a própria IU 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 dá ao aplicativo 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 o WebView não foi criado como um framework para criar navegadores, ele não tem os recursos de segurança disponíveis nos navegadores mais recentes.

Arquitetura de vários processos e isolamento de sites

Os navegadores são projetados para serem seguros ao renderizar e executar conteúdo não confiável. Para garantir que o usuário permaneça seguro ao navegar por conteúdo potencialmente não confiável ou até mesmo mal-intencionado, os navegadores mais recentes usam técnicas como 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 do WebView usava o mesmo processo que o aplicativo incorporador. 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 do WebView que as executam, o que impossibilita a implementação completa do isolamento de sites.

A falta de uma arquitetura multiprocesso e de isolamento de sites não é um problema para aplicativos que renderizam conteúdo próprio e confiável, mas pode ser um problema para aplicativos que executam conteúdo de terceiros não confiável, 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, e os navegadores se esforçam muito e estão sempre evoluindo nessa área. No entanto, o WebView não tem uma API para verificar se a conexão de um site é segura, o que permitiria que os desenvolvedores de aplicativos criassem indicadores de segurança confiáveis. A falta de uma API desse tipo pode fazer com que, por exemplo, 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 desenvolvedores é incorporar um mecanismo de navegador ao aplicativo. Além de aumentar o tamanho do aplicativo, essa abordagem é complexa e demorada.

Guias personalizadas como 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 os navegadores mais conhecidos oferecem suporte às guias personalizadas, incluindo Chrome, Firefox, Edge e Samsung Internet. Por isso, é mais adequado chamá-las apenas de "guias personalizadas".

As guias personalizadas ajudam os desenvolvedores a integrar o conteúdo da Web à experiência no app. Eles também permitem que os desenvolvedores personalizem a atividade em que o conteúdo da Web é mostrado, permitindo que eles personalizem 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 o WebView ou incorporar um mecanismo de navegador. Como o navegador no app é alimentado pelo navegador do usuário, as guias personalizadas compartilham o armazenamento compartilhado 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 são compatíveis com todos os recursos e APIs da plataforma da Web que são compatíveis com o navegador que as alimenta.

Abrir Apps Web Progressivos usando a Atividade Confiável na Web

Os apps Web progressivos trazem para a Web muitos comportamentos e recursos que antes estavam disponíveis apenas para apps específicos da plataforma. Com a introdução do comportamento semelhante ao de 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 são compatíveis com todos os recursos e APIs da Web modernos, 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 acessando, além do ícone de bloqueio que indica se o site é seguro. Ao abrir a experiência própria 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 o PWA em um app Android. O protocolo é semelhante ao das guias personalizadas, mas introduz APIs que permitem aos desenvolvedores verificar (com o Digital Asset Links) se controlam o app Android e o URL que está sendo aberto e remover a barra de URL quando ambos são verdadeiros.

Também foram introduzidas 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. Mais recursos, como suporte para o Google Play Faturamento, serão lançados em breve.

Como os URLs abertos em Atividades Confiáveis na Web precisam ser PWAs e ter um conjunto de comportamentos e características de desempenho, as Atividades Confiáveis na Web introduzem critérios de qualidade para PWAs abertos nelas.

Limitações das soluções atuais

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

As guias personalizadas são, na verdade, guias renderizadas 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, o que impossibilita alguns desses recursos.

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

Resumo

A WebView é útil quando um aplicativo precisa de HTML, CSS e JavaScript no app Android, mas não usa recursos e funcionalidades mais avançados disponíveis na Web moderna, como notificações push, Web Bluetooth e outros. Não é recomendável ao abrir conteúdo projetado para a plataforma da Web moderna, porque 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 deve ser usada quando os desenvolvedores querem renderizar o próprio app da Web progressivo em tela cheia no 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 de abrir conteúdo de terceiros projetado para a plataforma da Web, também conhecido como navegadores no app.