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

**URL:** <https://meta.discourse.org/t/self-hosted-twa-in-soft-fail-state-full-screen-ui-works-but-native-delegation-fails/379041>\
**Category:** Support\
**Created:** [2025年八月18日 12:16 UTC](https://meta.discourse.org/t/self-hosted-twa-in-soft-fail-state-full-screen-ui-works-but-native-delegation-fails/379041 "2025-08-18T12:16:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![MihirR](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mihirr/32/475158_2.png) [@MihirR](https://meta.discourse.org/u/MihirR)\
**Post date:** [2025年八月18日 12:16 UTC](https://meta.discourse.org/t/self-hosted-twa-in-soft-fail-state-full-screen-ui-works-but-native-delegation-fails/379041/1 "2025-08-18T12:16:10Z")

</div>

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

以下是确切的症状：

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

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

3. 最重要的是，当 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/json`** `Content-Type` 提供 `assetlinks.json` URL，并且没有阻止性的 CORS 标头。

- **Android 应用配置：** 生成的 `AndroidManifest.xml` 是正确的，并且包含标准的 `com.google.androidbrowserhelper.trusted.DelegationService`。

- **Discourse 管理员设置：** 我的管理员安全设置中的 **`cors origins`** 和 **`Allowed crawler user agents`** 均为空。

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

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

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