# related_applications 与 prefer_related_applications

> 清单的 related_applications 数组如何指向平台特定应用（platform、url、id），以及布尔值 prefer_related_applications 如何提示浏览器改为提供原生应用而非 Web 应用。

**一句话：** `related_applications` 是一个数组，指向与你的 Web 应用相关的平台特定应用
——每个条目需要一个 `platform`，以及 `url` 和/或 `id`；布尔值
`prefer_related_applications`（省略时行为与 `false` 相同）则提示浏览器是否要改为提供其中一个相关
应用，而不是 Web 应用本身。

## `related_applications`

MDN 将其描述为"用于指定一个或多个与你的 Web 应用相关的应用。这些可以是平台特定的应
用，也可以是渐进式 Web 应用"。每个条目都是一个对象，"必须包含 `platform` 属性，以及
`url` 或 `id`（或两者都有）"：

- **`platform`** —— 标识应用所在位置的字符串。文档给出的示例包括 `amazon`（Amazon
  App Store）、`play`（Google Play Store）、`windows`（Windows Store）以及
  `webapp`（用于渐进式 Web 应用）。
- **`url`**（可选）—— 可找到该平台特定应用的 URL。若省略，则必须提供 `id`。
- **`id`**（可选）—— 在指定平台上代表该应用的 ID。若省略，则必须提供 `url`。

```json
"related_applications": [
  {
    "platform": "play",
    "url": "https://play.google.com/store/apps/details?id=com.example.app1",
    "id": "com.example.app1"
  },
  {
    "platform": "windows",
    "url": "https://apps.microsoft.com/store/detail/example-app1/9WZDNCRFHVJL"
  }
]
```

`webapp` 平台的条目可以指向 PWA 自身：

```json
"related_applications": [
  { "platform": "webapp", "id": "com.example.app1" }
]
```

MDN 还指出这种关联是单向的——"原生应用无需反过来引用你的 Web 应用"——并且这份数据支
撑了 `Navigator.getInstalledRelatedApps()`，让你的 Web 应用可以检测设备上是否已安装
某个平台特定版本，或已安装 Web 应用本身。

## `prefer_related_applications`

这个布尔值"为浏览器提供一个提示，说明是否倾向于安装 `related_applications` 中指定的
原生应用，而非你的 Web 应用"。据 MDN 所述：

- **`true`** —— 浏览器可能会提示用户安装 `related_applications` 中的某一项，而不是
  Web 应用。
- **`false` 或省略** —— 浏览器倾向于安装 Web 应用，而非相关的原生应用。

```json
{
  "prefer_related_applications": true,
  "related_applications": [
    { "platform": "play", "id": "com.example.hiking-app" }
  ]
}
```

MDN 标注了一个 Chromium 特有的行为："对于基于 Chromium 的浏览器，应将
`prefer_related_applications` 设为 `false` 或省略，才能让你的 Web 应用可安装。"

## 状态

MDN 将这两个成员都标注为**实验性**且**有限可用**（"因为在部分最广泛使用的浏览器中
不可用，所以不属于 Baseline"），依据的是 Manifest Incubations 规范。

## 实践清单

- [ ] 为每个 `related_applications` 条目提供 `platform`，以及 `url` / `id` 中的至少
      一项。
- [ ] 如果希望 `getInstalledRelatedApps()` 能检测到 Web 应用本身，添加一个指向你自
      己 PWA 的 `webapp` 平台条目。
- [ ] 对基于 Chromium 的浏览器，MDN 建议将 `prefer_related_applications` 设为
      `false`（或直接省略），以便让你的 Web 应用可安装。
- [ ] 在生产环境依赖这两个成员之前，先查看当前的浏览器支持情况——MDN 将二者都标记为
      实验性且有限可用。