上一篇已经介绍了iOS系统层面提供的应用之间跳转的技术和实施方案,本篇会带你们更深刻的了解UniveralLinks技术,探究其绑定运做原理,使用时的技巧。ios
对于UniversalLinks的生效和绑定原理,官方文档并未说明,经过亲自尝试整理出了其绑定原理,这有助于对于触发时机把握:web
App从iOS9开始,安装App成功后,系统会检查App是否对UniversalLinks技术作了支持,若是检查到有作支持,则从App的associated-domains配置里读取绑定域名。算法
访问该域名下预设的JSON文件apple-app-site-association
,读取JSON文件中的app绑定信息,与当前App内的信息作对比。跨域
若是匹配成功,在系统本地内部就作完了双向绑定。浏览器
也就是只要App安装完成,就能够即刻触发UniversalLinks打开App啦!不须要像推送那样,须要打开一次。微信
上一篇文章也提到了,目前全部包括UniversalLinks技术都没法直接对App的安装作判断。网络
但我要说:非也!UniversalLinks提供的一项特性可让咱们反向推断App是否安装,并且准确率至关高,不像scheme跳转那样,只能作延时。app
UniversalLinks在触发时,也就是连接被点击时,系统会与本地已经创建双向绑定的数据进行匹配,匹配到的话,这个网络请求就会在系统层面被拦截,系统就会转而打开绑定的App,并把完整URL传给App的openURL的Delegate方法来处理。反之,若是App没有安装,那么点击连接时系统没法匹配到信息,则就将请求放行,让服务端接收到这个请求来处理。dom
看到这里已经很明了了吧,用户只要点击了,服务端能够经过是否接收到请求来判断App是否已安装。工具
固然这里也会不许,但几率比较小,缘由若是用户是长按打开,或者打开App后点击了右上角的系统的返回按钮后,系统会下次触发UniversalLinks的时候就不会拦截请求了,致使接收到请求的设备其实已经App,而咱们没法知道。要想从新让系统拦截,用户须要点击的时候长按link,而且选择经过App打开,以后才又会被拦截。
但已经比scheme跳转设置一个timeout要来的靠谱的多了。
UniversalLinks做为一个平滑使用体验的工具类技术来讲,自己不具有拉新客户的功能:好比新用户若是从站外点击UniversalLinks,那么用户没有装App的话,只是会访问m站而已,无它;引导老用户从H5迁移到App的能力也比较弱,一直使用m站的用户,只有在页面顶部看到有一个入口,点击才能打开App。缘由是用户若是直接输入了m站的地址,在站内访问,是不会触发UniversalLinks的,只是会在绑定的H5页面顶部有一个bar提醒用户,点击能够跳转到App的相同功能,能够说是很弱的。
让咱们看看怎么才能让它具有强制拉新引旧能力:
https://app.alibaba.com/babalink?scheme=enalibaba://detail?id=123&url=https://m.alibaba.com/product?id=123
每一个一级参数下的值都须要urlencode,这边为了查看方便就不作了。[[UIApplication sharedApplication] opentURL:@"https://app.alibaba.com/babalink?scheme=enalibaba://detail?id=123&url=https://m.alibaba.com/product?id=123"]
这样打开,才能跳转到目标app,若是把连接塞到webview中则不会触发,请求必定会到服务端。https://app-c.alibaba.com/babalink?scheme=enalibaba://detail?id=123&url=https://m.alibaba.com/product?id=123
注意这个连接的域名不是app.alibaba.com
,这个h5页面展现一个按钮,跳转连接为https://app.alibaba.com/babalink?scheme=enalibaba://detail?id=123&url=https://m.alibaba.com/product?id=123
。为何?由于要跨域,并且点击行为在浏览器中进行是没法阻断的。总结一下,巧用UniversalLink须要让服务端的这个link具有