You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Safari浏览器通过通用链接检测移动端特定APP的跳转异常问题求助

Safari浏览器通过通用链接检测移动端特定APP的跳转异常问题求助

大家好,我最近做移动端APP跳转检测的功能,写了下面这段代码,在Chrome(安卓和iOS端)上都能正常工作,但在Safari里遇到了几个头疼的问题,想请教下各位有没有解决思路。

先说说具体的异常表现:

  • 当APP已经安装时,调用我的OpenToolKit函数会弹出一个带有“打开APP”和“取消”按钮的弹窗
    • 如果在2秒内点击“打开APP”,能正常打开APP,不会跳App Store,这是符合预期的
    • 但如果超过2秒再点击“打开APP”,会同时打开APP和跳转到App Store链接,这就出问题了
  • 另外,点击弹窗里的“取消”按钮,也会直接跳转到App Store,这不是我想要的,用户取消后应该留在当前网页才对

下面是我目前在用的代码:

OpenToolKit() {
  let ua = navigator.userAgent.toLowerCase();
  let isAndroid = /android|tab|touch|webOS|tablet|mobile/i.test(ua) || navigator.maxTouchPoints > 0;  // android检测
  let isIphone = ua.indexOf("iphone") > -1 || ua.indexOf("ipad") > -1;  // iOS检测

  function openApp(url, appStoreUrl) {
    let isAppOpened = false;
    window.location.href = url;   // 尝试通过自定义URL Scheme打开APP
    setTimeout(() => {
      isAppOpened = document.hidden || document.webkitHidden;
      if (!isAppOpened) {
        window.location.href = appStoreUrl; // 跳转到App Store
      }
    }, 2000);
  }

  // 这里根据平台调用openApp,比如iOS传对应的自定义URL和App Store链接
  // ... 省略平台判断后的调用逻辑
}

我猜问题出在那个2秒的定时器判断上:Safari的弹窗交互不会立刻触发document.hidden的变化,当用户延迟点击或者取消时,定时器已经触发了跳转逻辑。但我不知道怎么更精准地捕获用户对弹窗的操作,或者有没有更适合Safari的APP跳转检测方案?麻烦各位大佬指点一下!

备注:内容来源于stack exchange,提问作者MFI

火山引擎 最新活动