495 字
2 分钟
Web 中判断 DeepLink 是否成功打开
在 Web 中判断是否成功打开了 DeepLink(深度链接)通常比较困难,因为 DeepLink 的本质是通过 URL 来尝试打开一个 App,如果 App 没有安装,浏览器可能不会有任何反馈。常见的判断方法主要是基于 页面可见性 和 定时器 机制。以下是几种常用的方案:
1. 定时器降级处理
由于不同设备、浏览器对 DeepLink 的处理时间不同,通常会设置一个短暂的定时器(如300ms - 3s),如果在这个时间内没有检测到页面被隐藏,就认为唤起失败,并执行降级处理(如跳转到应用商店)。
function openApp() {
let timer = setTimeout(() => {
window.location.href = '';
}, 2000);
// 尝试打开App
window.location.href = 'myapp://';
window.addEventListener('visibilitychange', () => {
if (document.hidden) {
clearTimeout(timer); // 页面隐藏,认为 App 唤起成功,清除定时器
}
});
}
2. 使用 iframe
隐藏加载
另一种方式是通过创建一个隐藏的 iframe
来加载 DeepLink URL,这样可以避免页面跳转的影响。
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = 'myapp://';
document.body.appendChild(iframe);
setTimeout(() => {
document.body.removeChild(iframe);
}, 3000);
这种方式与直接修改 window.location.href
类似,但可以避免页面刷新或跳转。
3. Chrome Intents(仅限Android)
对于 Android 设备,可以使用 Chrome Intents 来尝试打开 App,并提供备用方案。如果 App 未安装,可以指定一个备用 URL(如应用市场链接)。
<a href="intent://example.com#Intent;scheme=myapp;package=com.example.app;end;">
打开App
</a>
总结
visibilitychange
事件 是目前最常用的方法之一,通过检测页面是否变为不可见来判断是否唤起了App。- 定时器降级处理 可以有效应对不同设备和浏览器之间的差异,在一定时间内未成功唤起则引导用户去下载App。
iframe
隐藏加载 是一种较为隐蔽的方法,可以避免页面刷新或跳转。- 对于Android设备,还可以使用 Chrome Intents 来提供更好的兼容性。
Web 中判断 DeepLink 是否成功打开
https://blog.lpkt.cn/posts/web-deeplink-open-callback/