TWA Self-Hosted in Stato di "Soft Fail" - L'interfaccia utente a schermo intero funziona, ma la delega nativa fallisce

Sto cercando di abilitare le notifiche native per un TWA (Trusted Web Activity) del mio sito Discourse self-hosted e ho riscontrato un problema molto strano di "fallimento parziale" nella verifica dei Digital Asset Link.

Ecco i sintomi esatti:

  1. L’app si avvia e viene eseguita a schermo intero senza la barra degli indirizzi, il che suggerisce che il collegamento degli asset funzioni parzialmente.

  2. Tuttavia, all’avvio appare un messaggio toast "In esecuzione su Chrome".

  3. Soprattutto, quando la PWA richiede il permesso di notifica, mostra il prompt in stile browser, non la finestra di dialogo nativa di Android. Questo dimostra che la delega delle API native sta fallendo.

Questo comportamento è coerente su tutti i dispositivi di test (Android 12 e 13) e con gli APK generati sia da Bubblewrap che da PWABuilder di Microsoft.

Dopo un’approfondita attività di debug, ho confermato che tutta la mia configurazione lato client e lato server pubblica sembra essere perfetta. Il problema sembra essere un sottile problema lato server che influisce solo sul validatore Android.

Ecco cosa ho già verificato:

  • Chiave di firma e assetlinks.json: L’impronta SHA-256 della mia android.keystore corrisponde esattamente al 100% con l’impronta nel mio file /.well-known/assetlinks.json live.

  • Risposta del server: Il mio server serve l’URL assetlinks.json con uno stato 200 OK, il corretto Content-Type application/json e nessun header CORS bloccante quando verificato con strumenti web standard.

  • Configurazione dell’app Android: L’AndroidManifest.xml generato è corretto e contiene il DelegationService standard di com.google.browserhelper.trusted.

  • Impostazioni di amministrazione di Discourse: Le mie impostazioni di sicurezza di amministrazione per cors origins e Allowed crawler user agents sono entrambe vuote.

Dato questo specifico comportamento di "fallimento parziale", la mia domanda è:

Esiste una regola Nginx nota, un’impostazione del firewall o un sottile problema di risposta del server (come un leggero ritardo o un header non standard) nella configurazione predefinita di Discourse self-hosted che causerebbe al validatore Android di concedere una "fiducia parziale" (consentendo l’interfaccia utente a schermo intero) ma negare il livello di fiducia più elevato richiesto per la delega delle API native?

Sono arrivato al limite di ciò che può essere diagnosticato dal lato client. Qualsiasi approfondimento sulla configurazione profonda del server sarebbe molto apprezzato.