iOS应用已实现Universal Link,但弹窗内触发Deep Link跳转至Safari问题咨询
兄弟,我太懂这种“外部跳转全正常,内部触发就掉链子”的糟心了!你这情况大概率是弹窗触发Deep Link的方式没踩对Universal Link的系统规则,给你捋几个排查和解决的方向:
先查按钮触发链接的代码逻辑
很多第三方框架默认的链接触发可能用了最基础的UIApplication.shared.open(url),但没指定强制走Universal Link的参数。系统这时候可能会因为“不确定你要走Universal Link还是Safari”,直接跳浏览器。你可以改成带universalLinksOnly参数的调用:let targetURL = URL(string: "https://your-universal-link-domain.com/target-path")! let options = [UIApplication.OpenExternalURLOptionsKey.universalLinksOnly: true] UIApplication.shared.open(targetURL, options: options) { success in // 如果Universal Link不生效,再兜底跳Safari if !success { UIApplication.shared.open(targetURL) } }要是第三方框架不让你直接改代码,看看有没有提供自定义点击回调的接口,把链接打开的逻辑接管过来自己写。
排查第三方弹窗的载体(比如WebView)
如果你的弹窗是加载了网页的WebView,那WebView默认会自己处理链接跳转,不会触发系统的Universal Link。这时候要给WebView设置navigationDelegate,在webView(_:shouldStartLoadWith:navigationType:)方法里拦截目标链接,用上面的方式手动打开,然后返回false阻止WebView自己跳转。清一下Universal Link的系统缓存
有时候系统会缓存旧的关联规则,哪怕你配置全对也可能抽风。可以试试:卸载重装应用,或者在iOS设置里找到你的App,拉到最下面的「关联域名」开关,关掉再打开,重置一下系统的Universal Link关联。再确认一遍Universal Link的格式和配置
虽然外部跳转正常,但还是要核对下触发的URL是不是和AASA文件里的域名、路径完全匹配,有没有打错字符或者路径不匹配的情况——毕竟有时候内部触发的URL可能因为拼接错误,变成了不匹配的链接,自然就跳Safari了。
备注:内容来源于stack exchange,提问作者Shwe Nik

