Estoy intentando que las notificaciones nativas funcionen para una TWA (Trusted Web Activity) de mi sitio de Discourse autoalojado y me he encontrado con un “fallo suave” muy extraño en la verificación de Digital Asset Link.
Aquí están los síntomas exactos:
-
La aplicación se inicia y se ejecuta a pantalla completa sin la barra de URL, lo que sugiere que el enlace de activos está funcionando parcialmente.
-
Sin embargo, aparece un mensaje toast de “Ejecutando en Chrome” en cada inicio.
-
Lo más importante es que, cuando la PWA solicita permiso de notificación, muestra el mensaje de aviso estilo navegador, no el diálogo nativo de Android. Esto demuestra que la delegación de la API nativa está fallando.
Este comportamiento es consistente en todos los dispositivos de prueba (Android 12 y 13) y con los APK generados tanto por Bubblewrap como por PWABuilder de Microsoft.
Después de una depuración exhaustiva, he confirmado que toda mi configuración del lado del cliente y del servidor público parece ser perfecta. El problema parece ser un problema sutil del lado del servidor que solo afecta al validador de Android.
Esto es lo que ya he verificado:
-
Clave de firma y
assetlinks.json: La huella digital SHA-256 de miandroid.keystorees una coincidencia exacta del 100% con la huella digital en mi archivo/.well-known/assetlinks.jsonen vivo. -
Respuesta del servidor: Mi servidor sirve la URL
assetlinks.jsoncon un estado200 OK, elContent-Typecorrecto deapplication/json, y sin encabezados CORS bloqueantes cuando se verifica con herramientas web estándar. -
Configuración de la aplicación Android: El
AndroidManifest.xmlgenerado es correcto y contiene elcom.google.androidbrowserhelper.trusted.DelegationServiceestándar. -
Configuración de administración de Discourse: Mi configuración de seguridad de administración para
cors originsyAllowed crawler user agentsestán ambas vacías.
Dado este comportamiento específico de “fallo suave”, mi pregunta es:
¿Existe alguna regla Nginx conocida, configuración de firewall o un problema sutil de respuesta del servidor (como un ligero retraso o un encabezado no estándar) en la configuración predeterminada de Discourse autoalojado que cause que el validador de Android otorgue una “confianza parcial” (permitiendo la interfaz de usuario a pantalla completa) pero deniegue el nivel de confianza superior requerido para la delegación de API nativa?
He llegado al límite de lo que se puede diagnosticar desde el lado del cliente. Cualquier información sobre la configuración profunda del servidor sería muy apreciada.