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

Chrome iOS环境下自定义域名深度链接失效,Branch.io实现可靠跳转的技术原理及替代方案咨询

Chrome iOS环境下自定义域名深度链接失效,Branch.io实现可靠跳转的技术原理及替代方案咨询

最近我在Chrome iOS上做App深度跳转的时候遇到了头大的问题:自己域名的深度链接不管是用Universal Links还是自定义Scheme都会报错,但Branch.io的链接却能丝滑跳转,完全没这个问题,我实在摸不透他们的门道,想请教下大家!

我的当前配置

正常工作的场景

  • Safari iOS下Universal Links完全正常
  • WhatsApp、Messages等App里点击Universal Links也能正常唤起App
  • AASA文件配置正确,放在https://myapp-domain.com/.well-known/apple-app-site-association,内容符合要求
  • 苹果开发者后台已配置关联域名:applinks:myapp-domain.com
  • Info.plist里已注册自定义URL Scheme:myappscheme://

完全失效的场景

  • Chrome iOS下打开Universal Links(例如https://myapp-domain.com/open
  • Chrome iOS下用自定义Scheme直接跳转(myappscheme://

我已经尝试过的方法

各种JavaScript跳转技巧

我试了几乎所有能想到的JS跳转方式,但都无法解决报错问题:

// 方法1:直接修改location
window.location.href = 'myappscheme://path';

// 方法2:通过iframe触发
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = 'myappscheme://path';
document.body.appendChild(iframe);

// 方法3:window.open
window.open('myappscheme://path', '_self');

// 方法4:动态创建a标签模拟点击
const link = document.createElement('a');
link.href = 'myappscheme://path';
link.click();

// 方法5:location.assign
window.location.assign('myappscheme://path');

模仿Branch.io的剪贴板方案

我注意到Branch.io似乎用到了剪贴板做延迟跳转,所以也复刻了这个思路,但还是没用:

// 先把深度链接复制到剪贴板(用于延迟跳转)
await navigator.clipboard.writeText('myappscheme://path');
// 尝试唤起App
window.location.href = 'myappscheme://path';
// 超时后跳转到App Store兜底
setTimeout(() => {
  if (!document.hidden) {
    window.location.href = appStoreUrl;
  }
}, 2500);

唤起状态检测方案

为了判断App是否成功唤起,我也试了多种检测方法,但都没解决根本的跳转报错问题:

  • 页面可见性API(document.hidden
  • Window blur事件监听
  • 固定超时检测
  • pagehidebeforeunload事件监听

我观察到的Branch.io特殊表现

  • 他们的子域名[clientname].app.link在Chrome iOS上完全无问题,一点就唤起App,没有任何报错
  • 部分场景下甚至连Chrome的「此网站尝试打开其他应用」提示框都不弹,直接跳转
  • 若App未安装,能优雅降级跳转到App Store
  • 查看他们的落地页源码,JS代码都是常规操作,没有明显的“黑科技”,但就是能实现稳定跳转

技术环境补充

  • iOS版本:17.x(多个小版本均测试过,结果一致)
  • Chrome iOS:最新正式版(受苹果限制,采用WKWebView内核)
  • 我的App基于React Native开发,深度链接相关配置均正确
  • 测试设备为物理iPhone,非模拟器
  • App已上架App Store,非TestFlight测试版本

奇怪的细节

同一个myappscheme://path链接,在这些场景下能正常工作:

  • 直接在Chrome地址栏输入该Scheme链接
  • 从Branch.io的域名页面触发该Scheme跳转
  • 从部分第三方App中点击该链接

但从自己的域名触发时,Chrome点击「允许」后立刻弹出「Something went wrong. The application couldn't be opened」,看起来Scheme被识别到了,但就是被拦截了。

核心疑问

我实在搞不懂Branch.io的实现逻辑,想请教各位:

  1. 他们是否接入了苹果/谷歌的特殊域名白名单?
  2. 有没有未公开的JS API或技巧可以绕开Chrome iOS的这个限制?
  3. 服务器端是否有特殊的配置(如响应头、跳转规则)能解决这个问题?
  4. 有没有办法不依赖Branch.io、Firebase Dynamic Links(2025年8月将废弃)这类第三方服务,自己实现同样的稳定跳转效果?

我知道Chrome iOS因采用WKWebView,没有Safari那样的系统级Universal Links支持,但Branch.io明显找到了完美的workaround,希望能得到各位的指点!

火山引擎 最新活动