getinstalledrelatedapps 是浏览器api,用于检测用户设备是否安装了与网页关联的原生应用,需https、有效manifest(含related_applications和prefer_related_applications:true)、用户手势触发,仅chromium支持。

getInstalledRelatedApps 是什么,它能做什么
getInstalledRelatedApps 是一个浏览器 API,用于检查用户设备上是否已安装与当前网页关联的原生应用(比如 Android 上的 APK 或 iOS 上的 App Clip)。但它不是 HTML 层面直接调用的 API,而是必须在 JavaScript 中、且满足特定条件时才能使用。
它返回一个 Promise,解析为一个 WebAppManifest 对象数组(每个对象代表一个匹配的已安装应用),如果没装或不满足条件,则返回空数组或被拒绝。
注意:这个 API 只在安全上下文(HTTPS)中可用,且要求网页已通过 manifest.json 正确声明了 related_applications 字段,并启用 prefer_related_applications: true。
为什么调用 getInstalledRelatedApps 总是返回空数组或报错
常见失败原因不是代码写错,而是环境或配置没到位:
-
getInstalledRelatedApps被调用时不在 HTTPS 页面下(本地file://或 HTTP 页面会静默失败) - 页面没有有效的
manifest.json,或manifest.json中缺少related_applications数组 -
related_applications里填的是错误的platform(比如写成"android"却在 iOS 上测试),或id格式不对(Android 要求包名,如"com.example.app";iOS 要求 App ID,如"1234567890.com.example.app") - 浏览器不支持:目前仅 Chromium 内核浏览器(Chrome、Edge ≥ 93)稳定支持;Firefox 和 Safari 完全不支持
- 用户未授予“安装应用”相关权限,或系统级限制(如 Android 上关闭了“未知来源应用安装”)
怎么正确调用 getInstalledRelatedApps 并处理结果
先确保 manifest.json 已正确配置(示例):
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
{
"name": "My Web App",
"related_applications": [
{
"platform": "android",
"id": "com.example.app",
"url": "/android-app.html"
}
],
"prefer_related_applications": true
}
然后在 JS 中调用(注意必须在用户交互后触发,如点击事件):
document.getElementById('check-btn').addEventListener('click', async () => {
try {
const apps = await navigator.getInstalledRelatedApps();
if (apps.length > 0) {
console.log('已安装:', apps.map(a => a.id));
} else {
console.log('未检测到关联应用');
}
} catch (err) {
console.error('getInstalledRelatedApps 失败:', err.name);
}
});
关键点:
- 必须由用户手势(如
click、touchstart)触发,不能在页面加载时自动调用 - 不要依赖返回值做核心功能分支,它只是辅助提示;用户仍可通过其他方式(如 deep link)唤起应用
-
err.name可能是"SecurityError"(非 HTTPS 或非安全上下文)、"NotSupportedError"(浏览器不支持)、"NotAllowedError"(未获用户授权或策略拦截)
替代方案和现实约束
getInstalledRelatedApps 的实际可用性比文档描述的低得多。很多场景下它返回空数组,不代表应用没装——可能只是系统没上报、浏览器没集成、或用户禁用了相关服务。
更稳妥的做法是:
- 同时准备 deep link(如
intent://...或myapp://...)和 fallback 页面 - 使用
navigator.canLaunchApp(已废弃)或launchQueue(PWA 相关,不查安装状态)都不等价于本 API - 在 Android 上可尝试
iframe加载intent:URL 并监听onerror,但兼容性和 UX 都较差
真正容易被忽略的一点:这个 API 检测的是「系统级注册的已安装应用」,不是「用户曾经下载过 APK」,也不是「App Store 里有没有上架」。哪怕用户手动安装了正确包名的调试版 APK,若未通过 Play Store 关联或未在 manifest 中精确匹配,依然不会出现在结果里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










