“软故障”状态下的自托管 TWA - 全屏 UI 工作正常,但原生委托失败

我正在尝试为我的自托管 Discourse 站点的 TWA(Trusted Web Activity)启用原生通知,但在数字资产链接验证方面遇到了一个非常奇怪的“软失败”。

以下是确切的症状:

  1. 应用程序启动并以全屏无网址栏模式运行,这表明资产链接部分有效。

  2. 但是,每次启动时都会出现一个**“在 Chrome 中运行”的提示消息**。

  3. 最重要的是,当 PWA 请求通知权限时,它会显示**浏览器风格的提示,而不是原生 Android 对话框。**这证明了原生 API 委托失败了。

在所有测试设备(Android 12 和 13)以及使用 BubblewrapMicrosoft 的 PWABuilder 生成的 APK 上,此行为都是一致的。

经过广泛的调试,我已确认我的整个客户端和面向公众的服务器配置似乎都完美无缺。问题似乎是一个细微的服务器端问题,仅影响 Android 验证器。

以下是我已经验证过的内容:

  • 签名密钥和 assetlinks.json 我的 android.keystore 的 SHA-256 指纹与我的实时 /.well-known/assetlinks.json 文件中的指纹100% 完全匹配

  • 服务器响应: 使用标准 Web 工具检查时,我的服务器以**200 OK** 状态、正确的 application/json Content-Type 提供 assetlinks.json URL,并且没有阻止性的 CORS 标头。

  • Android 应用配置: 生成的 AndroidManifest.xml 是正确的,并且包含标准的 com.google.androidbrowserhelper.trusted.DelegationService

  • Discourse 管理员设置: 我的管理员安全设置中的 cors originsAllowed crawler user agents 均为空。

鉴于这种特定的“软失败”行为,我的问题是:

默认的 Discourse 自托管设置中是否存在已知的 Nginx 规则、防火墙设置或细微的服务器响应问题(例如轻微延迟或非标准标头),会导致 Android 验证器授予“部分信任”(允许全屏 UI)但拒绝原生 API 委托所需的高级别信任?

我已经无法从客户端进行诊断。非常感谢您能提供有关服务器深层配置的任何见解。