WebAPKs no Android

Quando o usuário adiciona o Progressive Web App à tela inicial do Android, o Chrome gera automaticamente um APK, que às vezes chamamos de WebAPK. A instalação por um APK permite que o app apareça na tela de início, nas configurações do Android e registre um conjunto de filtros de intent.

Instalar um PWA no Android não é apenas adicionar o Progressive Web App à tela inicial do usuário. O Chrome gera e instala automaticamente um APK especial do seu app. Às vezes, chamamos isso de WebAPK. A instalação por um APK permite que o app apareça na tela de início, nas configurações do app do Android e registre um conjunto de filtros de intent.

Para gerar o WebAPK, o Chrome analisa o manifesto do app da Web e outros metadados. Quando uma atualização do manifesto é detectada, o Chrome precisa gerar um novo APK.

Filtros de intent do Android

Quando um app da Web progressivo é instalado no Android, ele registra um conjunto de filtros de intent para todos os URLs no escopo do app. Quando um usuário clica em um link que está no escopo do app, o app é aberto, em vez de abrir em uma guia do navegador.

Considere o seguinte manifest.json parcial:

"start_url": "/",
"display": "standalone",

Quando um app da Web que usa o recurso é iniciado pelo iniciador de apps, ele abre https://example.com/ como um app independente, sem nenhum navegador Chrome.

O WebAPK incluiria os seguintes filtros de intent:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/" />
</intent-filter>

Se o usuário clicar em um link em um app instalado para https://example.com/read, ele será detectado pela intent e aberto no Progressive Web App.

Como usar scope para restringir filtros de intent

Se você não quiser que o app da Web progressivo processe todos os URLs do seu site, adicione a propriedade scope ao manifesto do app da Web. A propriedade scope informa ao Android para abrir seu app da Web somente se o URL corresponder ao origin + scope. Ele permite controlar quais URLs serão processados pelo app e quais serão abertos no navegador. Isso é útil quando você tem seu app e outros conteúdos não relacionados a apps no mesmo domínio.

Considere o seguinte manifest.json parcial:

"scope": "/app/",
"start_url": "/app/",
"display": "standalone",

Quando iniciado pelo iniciador de apps, ele abria https://example.com/app/ como um app independente, sem nenhum navegador Chrome.

Como antes, o WebAPK gerado incluía um filtro de intent, mas com um atributo android:pathPrefix diferente no AndroidManifest.xml do APK:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
    android:scheme="https"
    android:host="example.com"
    android:pathPrefix="/app/" />
</intent-filter>

Confira alguns exemplos:

O que fazer

https://example.com/app/ - em /app/

O que fazer

https://example.com/app/read/book - em /app/

O que não fazer

https://example.com/help/: não está em /app/

O que não fazer

https://example.com/about/: não está em /app/

Consulte scope para mais informações sobre scope, o que acontece quando você não o define e como usá-lo para definir o escopo do app.

Gerenciar permissões

As permissões funcionam da mesma forma que outros apps da Web e não podem ser solicitadas no momento da instalação. Em vez disso, elas precisam ser solicitadas no momento da execução, idealmente apenas quando você realmente precisar delas. Por exemplo, não peça permissão para a câmera no primeiro carregamento, mas espere até que o usuário tente tirar uma foto.

Como gerenciar o armazenamento e o estado do app

Mesmo que o app da Web progressiva seja instalado por um APK, o Chrome usa o perfil atual para armazenar dados, e ele não será segregado. Isso permite uma experiência compartilhada entre o navegador e o app instalado. Os cookies são compartilhados e ativos, qualquer armazenamento do lado do cliente é acessível e o worker do serviço está instalado e pronto para uso.

Como atualizar o WebAPK

As informações sobre como um WebAPK é atualizado foram movidas para Como o Chrome lida com atualizações no manifesto do app da Web.

Perguntas frequentes

Quais ícones são usados para gerar a tela de apresentação? :
Recomendamos que você forneça pelo menos dois ícones: 192 px e 512 px para a tela de apresentação. Vocês disseram que os ícones na tela inicial eram muito pequenos. Os WebAPKs gerados no Chrome 71 ou mais recente vão mostrar um ícone maior na tela de apresentação. Não é preciso fazer nada, desde que os ícones recomendados sejam fornecidos.
O que acontece se o usuário já tiver instalado o app nativo para o site?
Assim como "Adicionar à tela inicial", os usuários poderão adicionar um site independente de qualquer app nativo. Se você espera que os usuários instalem os dois, recomendamos diferenciar o ícone ou nome do site do app nativo.
O armazenamento do meu site instalado será limpo se o usuário limpar o cache do Chrome?
Sim.
Meu app será reinstalado quando eu tiver um novo dispositivo?
Não no momento, mas achamos que é uma área importante e estamos investigando maneiras de fazer isso funcionar.
Como as permissões são tratadas? Vou receber a solicitação do Chrome ou do Android?
As permissões ainda serão gerenciadas pelo Chrome. Os usuários vão receber os comandos do Chrome para conceder permissões e poderão editá-los nas configurações do Chrome.
Em quais versões do Android isso vai funcionar?
Os Progressive Web Apps podem ser instalados em todas as versões do Android que executam o Chrome para Android, especificamente o Jelly Bean e versões mais recentes.
Isso usa a WebView?
Não, o site é aberto na versão do Chrome em que o usuário adicionou o site.
É possível fazer upload dos APKs criados para a Play Store?
Não. Se você quiser fazer upload do seu próprio APK, confira as Atividades confiáveis na Web.
Eles estão listados na Play Store?
Não. Se você quiser fazer upload do seu próprio APK para listagem na Play Store, consulte as Atividades confiáveis na Web.
Sou desenvolvedor de outro navegador no Android. Posso ter esse processo de instalação sem problemas? :
Estamos trabalhando nisso. Estamos comprometidos em disponibilizar esse recurso para todos os navegadores no Android, e em breve teremos mais detalhes.