我正在尝试为我的自托管 Discourse 站点的 TWA(Trusted Web Activity)启用原生通知,但在数字资产链接验证方面遇到了一个非常奇怪的“软失败”。
以下是确切的症状:
-
应用程序启动并以全屏无网址栏模式运行,这表明资产链接部分有效。
-
但是,每次启动时都会出现一个**“在 Chrome 中运行”的提示消息**。
-
最重要的是,当 PWA 请求通知权限时,它会显示**浏览器风格的提示,而不是原生 Android 对话框。**这证明了原生 API 委托失败了。
在所有测试设备(Android 12 和 13)以及使用 Bubblewrap 和 Microsoft 的 PWABuilder 生成的 APK 上,此行为都是一致的。
经过广泛的调试,我已确认我的整个客户端和面向公众的服务器配置似乎都完美无缺。问题似乎是一个细微的服务器端问题,仅影响 Android 验证器。
以下是我已经验证过的内容:
-
签名密钥和
assetlinks.json: 我的android.keystore的 SHA-256 指纹与我的实时/.well-known/assetlinks.json文件中的指纹100% 完全匹配。 -
服务器响应: 使用标准 Web 工具检查时,我的服务器以**
200 OK** 状态、正确的application/jsonContent-Type提供assetlinks.jsonURL,并且没有阻止性的 CORS 标头。 -
Android 应用配置: 生成的
AndroidManifest.xml是正确的,并且包含标准的com.google.androidbrowserhelper.trusted.DelegationService。 -
Discourse 管理员设置: 我的管理员安全设置中的
cors origins和Allowed crawler user agents均为空。
鉴于这种特定的“软失败”行为,我的问题是:
默认的 Discourse 自托管设置中是否存在已知的 Nginx 规则、防火墙设置或细微的服务器响应问题(例如轻微延迟或非标准标头),会导致 Android 验证器授予“部分信任”(允许全屏 UI)但拒绝原生 API 委托所需的高级别信任?
我已经无法从客户端进行诊断。非常感谢您能提供有关服务器深层配置的任何见解。