iOS平台DeepLink相关介绍
1、介绍DeepLink
1.1、什么是DeepLink
- 在web开发领域,DeepLink是指向具体内容页的链接,区别于指向首页的链接。
- 在app开发领域,DeepLink是指能够调起app内某个特定界面的链接。
1.2、为什么使用DeepLink
1.2.1、现状(app孤岛、2个原因)
真实的用户需求,打通各个app之间的连接。
现状:目前这些应用孤岛之间都是通过Web进行连接的,通过浏览器的WebView,进行内容跳转,缺少原生App体验。
为什么各个应用之间,为啥不能支持方便的*穿梭呢? 这里有2个原因,一个是经济原因(每个app都希望用户沉溺在自己的app中,所以大部分app总是越做越大);
另外一个是技术原因(移动操作系统有多家,各家处理应用间跳转的底层技术都不一样,调用方式、代码都不同,支持的力度也不同)。
1.2.2、DeepLink能带来什么?
1、从任何地方访问一个url,自动跳转到app的对应内容页面。
2、app安装之前打开某个M版,app安装之后,首次进入,自动跳转到之前M版页面对应的内容(Deferred DeepLink)。
3、在app A中调用app B中的服务,app B中得到的结果还能传回app A进行下一步处理。App 间带上下文切换(用于实现 app 间参数的传递,如授权协议,分享 API 等)
4、搜索
2、DeepLink的实现原理
2.1、Custom URL Scheme
iOS 9之前,通过URL Scheme打开app(需要safari浏览器做中转)
基础DeepLink调用方式:
iOS系统:使用openURL(“twitter://userid/1234”), canOpenURL
2.1.1、使用Custom URL Scheme时的JS处理
window.location = 'lexie://';
setTimeout(function() {
window.location = 'itms-apps://itunes.apple.com/us/app/eve-by-glow-period-tracker/id1002275138'
}, 250);
2.1.2、在不同iOS版本下的表现(是否有确认弹层、是否阻断JS执行)
-
iOS 9之前
- app已安装
- app未安装
-
iOS 9到iOS 9.2之前
- app已安装
safari是否打开app,会有提示弹窗。如果用户取消进入app,会跳转到app store。不管用户行为还是非用户行为触发的跳转到app store都会被提示弹窗拦截。 - app未安装
app未安装,无法打开custom url scheme,会直接跳转到app store。
- app已安装
-
iOS 9.2开始(是否用户行为触发表现不同)
-
app已安装
-
app未安装
-
用户行为(用户点击)引起的跳转到app store不会被提示弹窗拦截,而是直接跳转到app store。
非用户行为(onload)触发的跳转会有提示弹窗拦截,
2.2、Universal Link
2.2.1、何为Universal Link
2.2.2、Universal Link在iOS中的接入
2.2.3、Universal Link的简单原理
iOS 9之后,通过universal link打开app(不需要safari浏览器做中转)
增强的DeepLink调用篇(App Links/Universal Links, Since 2015)
基本想法就是把打开应用的地址,统一为使用HTTP(S)方式,系统通过拦截和解析HOST地址,与系统注册的HOST进行匹配,如果发现就可以直接打开APP。
这里复习一下,如何实现universal link,安卓和ios的原理都是差不多的。
3、Deferred DeepLink的实现原理
Deferred DeepLink 是 DeepLink 的进阶版。
顾名思义,Deferred DeepLink 是指用户打开一个 web 页面的时候并没有安装对应的 App,希望用户在安装 App以后可以 DeepLink 到安装前 web 页面对应的内容。
这里有三个需要解决的问题:
- 判断是否已经安装了 App,如果已经安装了直接 DeepLink 到 App,否则跳转 App Store。
- 用户匹配,如何把一个 install 对应到某一次 web page view 或者某一次 click。
- DeepLink,基础的DeepLink问题。
这曾经是个老大难的问题,受系统所限,在 iOS 上很难追踪到一个安装的来源,但是这样的需求又很多,主要的场景有:
- 追踪广告效果
- 追踪用户推荐/邀请链接
- 在 app 内保持网页浏览的上下文,如登录信息,购物车等
3.1、iOS 9之前设备指纹识别
在访问特定页面或点击特定链接的时候记录用户特征,如 IP,系统版本,手机型号,语言等等。然后在打开 app 的时候发送这些特征到服务器,查询一段时间内(如 1 小时内)有可以匹配的用户点击过的链接,然后处理这个链接。
这样做的缺点很明显,因为是通过特征模糊匹配的,所以很容易匹配不到或匹配到错误的上下文。
但是其实大部分第三方服务会从不同来源收集更多信息,所以这个准确率其实比想象中高很多,尤其是在打开了 IDFA 的情况下。
3.2、iOS 9开始共享SafariViewController的会话
- 以前在顾问里自己实现的方式
- 如果不是从safari中打开的,而是从第三方app的浏览器跳转到目标app
- deferred deeplink 的原理 学习branch deeplink
SFSafariViewController 和 Safari 的 cookies 是互通的!所以理论上可以做到 100% 的 match。解决方案也很简单,本地生成一个 UUID 并通过一个隐藏的 SFSafariViewController 传回给 server,server 就可以把这个 UUID 跟之前的 session 对应起来,然后通过一般的 API call 查询更多跟这个 session 有关的信息。
4、App间保留上下文的跳转
5、从巨无霸的DeepLink情节到web与app的映射
在app时代,搜索公司无法索引到app内部的数据,因此搜索公司希望能通过建立web和app之间的关系索引,来索引app内的数据。
谷歌、苹果、百度都提供技术和接口,让app开发者提交web和app直接的映射关系,通过从web抓取数据,打开与web映射的app页面,提高app曝光率。对于搜索广告商而言,除了Web形式的落地页之外,他们也可以提交对应的APP地址,例如谷歌App Indexing, 百度APP Link, 必应 App Linking。提升广告主的转化。
搜索app内容,改进用户体验。
如何建立web与app的映射?
谷歌/Facebook提供了2种方式:
方法一:App开发者提供这种映射关系 ,手工上载这种关系
方法二:App在Web站内描述好打开App的方式,机器爬虫可收集。