Um aplicativo web progressivo depende da Web Push API e de um Service Worker para reconectar com os usuários — lembretes de carrinho, notícias de última hora, alertas de corrida, códigos de verificação. Esse pipeline é exatamente o que não existe dentro de um WebView. O Android WebView não tem Push API nem execução em segundo plano; os próprios engenheiros DTS da Apple afirmam claramente que o Web Push não funciona em nenhum app que use WKWebView. O aviso de permissão nunca aparece, a inscrição falha silenciosamente e cada mensagem de reconexão que o H5 deveria enviar desaparece. Um runtime próprio do host restaura o canal com uma ponte de push nativa: FCM ou APNs no dispositivo, uma ponte JS para registrar o token e uma entrega idêntica ao padrão web para a página.

Android: sem Push API, sem ativação em segundo plano

A documentação do Android e o ecossistema concordam: o WebView é um componente de renderização, não um navegador completo. Ele não implementa a Push API, não mantém um Service Worker vivo para push e, quando o app está fechado, não pode ser acordado para receber nada. Quem tenta «juntar web push com o WebView» conclui que não é possível com o WebView sozinho; a solução é descer para o lado nativo com o Firebase Cloud Messaging e empurrar a carga por uma ponte JavaScript. Isso é trabalho real — um serviço de mensagens, um canal de notificação, um fluxo de sincronização de tokens — que um WebView padrão simplesmente não oferece.

iOS: a plataforma diz não

No iOS a situação é mais aguda. Uma página em WebView pode registrar um Service Worker em algumas configurações (com domínios vinculados ao app ou um entitlement de navegador), mas o Web Push em si não está disponível. Nos fóruns de desenvolvedores da Apple, um engenheiro DTS responde diretamente: «As notificações Web Push não funcionarão em apps com um WKWebView. Você pode usar notificações push nativas com um app que também tenha um WKWebView, mas não Web Push.» A mesma página que mostra um botão de inscrição limpo no Safari não mostra nada na visão embutida — sem aviso, sem erro, apenas silêncio.

O que você perde sem um canal de push

  • Botões de inscrição mortos. O aviso nunca aparece, então quem aceitaria simplesmente não o faz.
  • Reconexão perdida. Lembretes de carrinho abandonado, atualizações de entrega e alertas de notícias — toda a razão pela qual os PWA investem em push — nunca chegam.
  • Identidade fragmentada. Um usuário logado no H5 a partir de um navegador do sistema é um estranho dentro do WebView do app, e o push também não cobre essa lacuna.
  • Divergência silenciosa. O mesmo código se inscreve bem no Chrome e no Safari e não faz nada no WebView.
  • Sem sincronização em segundo plano. A sincronização em segundo plano e as buscas periódicas do Service Worker não estão disponíveis, então as filas de escrita offline travam.

A correção do runtime

Um runtime próprio do host entrega uma ponte de push nativa abaixo da página. Registra o dispositivo com FCM ou APNs, expõe uma pequena API JS (solicitar permissão, obter token, receber carga) que espelha a Push API web e roteia as notificações para a rota correta do app ao tocar. O autor do H5 escreve o mesmo fluxo de inscrição; o runtime fornece o canal que falta ao WebView, em ambas as plataformas, com um contrato consistente.

DimensãoWebViewRuntime próprio do host
Push APINão implementadaPonte nativa (FCM/APNs)
Aviso de permissãoNunca exibidoAviso nativo, espelhado no JS
Ativação em segundo planoImpossível com app fechadoEntrega em nível de SO
Push do Service WorkerNão suportadoConectado ao nativo
ReconexãoPerdidaRestaurada
Contrato multiplataformaNenhumUma API, ambos SO

Um navegador trata um botão de inscrição como a promessa de uma mensagem futura. Um WebView padrão o trata como uma solicitação que pode ignorar. Um runtime cumpre a promessa — um canal de push, nativo no dispositivo, com forma web para a página.

Fontes