跳转到内容

related_applications 与 prefer_related_applications

发布于

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

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。
"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 自身:

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

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

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

  • true —— 浏览器可能会提示用户安装 related_applications 中的某一项,而不是 Web 应用。
  • false 或省略 —— 浏览器倾向于安装 Web 应用,而非相关的原生应用。
{
"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 将二者都标记为 实验性且有限可用。