Universal Link(iOS)踩坑

这篇文章讲的都是集成 Universal Link 的时候可能会踩的坑,并不会讲具体如何使用

官方关联文件测试

一般来说,把关联文件(apple-app-site-association)布置好之后,都要使用苹果提供的官方测试工具测试一下,然而结果很可能是这样的:
action_required

这个提示大多数与关联文件无关。
据了解,测试工具会先去爬输入的网站的信息,找到关联文件,检查关联文件格式,然后执行最关键、最有可能导致这个问题的一步:去 App Store 检查 appID 所对应的应用是否存在。

所以说,如果官方测试通过,那是极好的;但是如果不通过,那就直接测试一下功能。我们现在就是处在官方检测不通过、功能却可以正常使用的状态。

跨域问题

aha
没想到吧!做移动端的人也有碰到跨域问题的一天!

在苹果多次迭代 Universal Link 之后,直接将连接丢到浏览器地址栏里面打开已经是不可行的了。更有甚者,通过点击按钮跳转的网页链接 有时候 也不能拉起应用。

这个 有时候 应该就是碰到跨域问题。这种情况下,将链接粘贴到备忘录或者短信里面,发现可以点击拉起应用,那就是跨域问题无疑。

跨域问题:假设当前网页的地址为 a.com,如果要跳转的链接也是 a.com 这个域下的,系统将不会进行拉起应用的操作,必须要跳转不同的子域,例如 b.com 时,系统才会根据关联文件去判断是否要拉起应用。

虽然不知道苹果这样设计的道理,但是解决方法也是很简单直接,就是让跳转链接跨域。

选择性跳转

通过 Universal Link 拉起应用之后,你会发现状态栏的右边有个跳转到 Safari 的小按钮,如果你好奇心满满地点了下去,那么恭喜你,这个链接以后就“再也”不会拉起 App,而是直接用 Safari 打开了。

问题就在于,系统会尝试理解用户的意图,当你点了那个跳转按钮,系统会认为你想要打开网页而不是 App,于是以后就会按照“它认为的”你的意思去执行跳转。
在浏览器打开了一个本可以拉起应用的 Universal Link 时,通过下拉网页,可以拉出一个打开对应应用 banner,算是对拉起应用的一点补偿吧?

如果用户点击了网页顶部 banner 中的“打开”拉起了应用,下一次用户再次点击链接的时候,系统就会首先去拉起应用。

简单来说,系统会记住 Universal Link 最后到达的位置,并将这个位置作为下次的默认打开选项。

在这个回答里,可以看到更详细一些的分析。