getInstalledRelatedApps():检测已安装的原生或 PWA 对应应用
发布于
一句话: navigator.getInstalledRelatedApps() 会 resolve 为一组已经安装在用户设备上的、
与调用方 web 应用相关的平台特定应用或 PWA——这些应用在调用方 manifest 的 related_applications
中声明。
getInstalledRelatedApps() 可用于检查与调用该方法的 web 应用相关的 Universal Windows Platform
(UWP)应用、Android 应用以及 PWA 的安装情况。要把调用方 web 应用与某个平台特定应用或 PWA 关联
起来,需要完成两件事:
- 调用方 web 应用的 manifest 必须在自己的
related_applications成员中列出该相关的 Android 应用、UWP 应用或 PWA。 - 该平台特定应用或 PWA 必须以某种平台特定方式定义并验证它与调用方应用的关系:
- Android 应用通过 Digital Asset Links 系统定义该关系。
- Windows UWP 应用通过 URI Handlers 定义该关系。
- PWA 则通过以下两种方式之一定义:在自己的
related_applications成员中包含一个自引用条目 (指定platform与id),用于同一 scope 内检查是否已安装在底层平台上;或者——对于要检查 某个 PWA 的 scope 之外的应用是否已安装在 Android 上的情况——在该 PWA 的/.well-known/目录中提供一个assetlinks.json文件。
getInstalledRelatedApps() 不接受参数,返回一个 Promise,它 resolve 为一个数组,每个已安装的
相关应用对应数组中的一项,每项对象可以包含:
id(可选)——一个平台特定的字符串,标识该应用。platform——该应用所属的生态或操作系统:"chrome_web_store"、"play"、"chromeos_play"、"webapp"、"windows"、"f-droid"或"amazon"。url(可选)——与该应用关联的 URL,通常是可以安装或了解它的地方。version(可选)——该相关应用的版本。
const relatedApps = await navigator.getInstalledRelatedApps();const psApp = relatedApps.find((app) => app.id === 'com.example.myapp');if (psApp) { // 一个相关的平台特定应用已经安装。}在顶层浏览上下文之外调用该方法会抛出 InvalidStateError 类型的 DOMException。
- 在调用方 web 应用自己 manifest 的
related_applications成员中列出该相关的 Android 应用、 UWP 应用或 PWA。 - 为相关应用配置好其平台所需的验证方式:Android 用 Digital Asset Links,UWP 用
URI Handlers,相关 PWA 则用自引用的
related_applications条目(或/.well-known/assetlinks.json)。 - 只在顶层浏览上下文中调用
getInstalledRelatedApps(),以避免InvalidStateError。 - 用解析出的
platform/id值来决定是否要抑制自己的安装提示或某个功能(例如,当已存在 原生对应应用时跳过提示安装该 PWA)。
- 安装提示——把这项检测与
beforeinstallprompt结合,在相关应用已安装时抑制提示