Estou tentando fazer com que as notificações nativas funcionem para um TWA (Trusted Web Activity) do meu site Discourse auto-hospedado e encontrei uma falha “suave” muito estranha na verificação do Digital Asset Link.
Aqui estão os sintomas exatos:
-
O aplicativo é iniciado e é executado em tela cheia sem a barra de URL, o que sugere que o link do ativo está funcionando parcialmente.
-
No entanto, uma mensagem de “Executando no Chrome” aparece em cada inicialização.
-
Mais importante, quando o PWA solicita permissão de notificação, ele mostra o prompt no estilo do navegador, não a caixa de diálogo nativa do Android. Isso prova que a delegação de API nativa está falhando.
Esse comportamento é consistente em todos os dispositivos de teste (Android 12 e 13) e com APKs gerados por Bubblewrap e PWABuilder da Microsoft.
Após extensiva depuração, confirmei que toda a minha configuração do lado do cliente e do servidor público parece estar perfeita. O problema parece ser um problema sutil do lado do servidor que afeta apenas o validador do Android.
Aqui está o que já verifiquei:
-
Chave de Assinatura e
assetlinks.json: A impressão digital SHA-256 do meuandroid.keystoreé uma correspondência exata de 100% com a impressão digital no meu arquivo/.well-known/assetlinks.jsonativo. -
Resposta do Servidor: Meu servidor serve o URL
assetlinks.jsoncom um status200 OK, oContent-Typecorreto deapplication/json, e nenhum cabeçalho CORS bloqueador quando verificado com ferramentas web padrão. -
Configuração do Aplicativo Android: O
AndroidManifest.xmlgerado está correto e contém ocom.google.browserhelper.trusted.DelegationServicepadrão. -
Configurações de Administrador do Discourse: Minhas configurações de segurança de administrador para
cors originseAllowed crawler user agentsestão ambas vazias.
Dado esse comportamento específico de “falha suave”, minha pergunta é:
Existe alguma regra Nginx conhecida, configuração de firewall ou um problema sutil de resposta do servidor (como um pequeno atraso ou um cabeçalho não padrão) na configuração padrão do Discourse auto-hospedado que faria com que o validador do Android concedesse um “confiança parcial” (permitindo a interface de usuário em tela cheia), mas negasse o nível mais alto de confiança necessário para a delegação de API nativa?
Estou no limite do que pode ser diagnosticado do lado do cliente. Qualquer insight sobre a configuração profunda do servidor seria muito apreciado.