1.什么是DeepLink
2.什么是Deferred DeepLink
3.Deferred DeepLink的实现思路
DeepLink 深度链接
简单的说就是用户点击一个链接,可以直接跳转的app里面的制定页面
使用DeepLink 点击链接-->打开App-->跳转到指定界面
不使用DeepLink 点击链接-->打开App-->只能进入app首页
这项技术在iOS App有新旧两种实现方案
Custom URL Scheme
Universal Links (iOS 9之后)
Universal Links 有许多 Custom URL Scheme不具备的优点
1.不同的App可以定义相同的URL Scheme造成冲突,Universal Links则是由server端决定呼起哪一个app
2.Universal Links本身是一个https地址,可以展示页面,更友好,同时也能被搜索引擎索引
综合这些优点,Universal Links 大有取代前者的趋势。
Deferred DeepLink 延迟深度链接
然而以上所说的DeepLink,都建立在用户已经安装了App的前提下。
如果用户没用安装App,则需要引导用户到各种App Store去安装,等到用户安装完毕,打开App时就找不到之前的指定页面了,这条流程就被打断了。
安装之后,再一次引导用户点击链接,重走流程,这种体验显然是接受不了的。
因此,Deferred DeepLink应运而生。要解决的核心问题就是用户匹配,怎么知道现在打开App的用户就是刚才点击链接的那位用户。
常见使用场景:
1.在 Web 和 App 的切换过程中保留上下文。
(比如购物,用户在web浏览哪一件商品,跳转到App端继续浏览。记录登录信息自动登录等等)
2.好友邀请,点击链接即可,无需填写繁琐的邀请码
Deferred DeepLink的实现思路
任何匹配的问题都可以转化到获取唯一标示的问题。
很容易联想到http里面的session和cookies。
但是iOS的沙盒模式,阻断了App之间的数据共享。也就是说App的cookies跟手机浏览器的cookies是分开的,无法互通。
直到iOS 9,Apple开放了SFSafariViewController
API,实现了App和Safari的cookies互通,那么一切问题迎刃而解了。首次启动App的时候,通过一个隐藏的SFSafariViewController
访问server,server通过cookies拿到唯一标示sessionID,从而得知用户之前访问过什么商品,进一步跳转到一个 Universal Links
,再进一步打开对应的商品详情页,完成了Deferred DeepLink的流程。
具体实现可参考 国外开源的Branch or VKSafariDomainBridge
这个方案仅仅解决了App和Safari之间的互通,手机上还有微信、手百、chrome等等第三方浏览器,并且项目还要支持iOS 9之前的系统版本。
下边讲另外一种方案,暂且叫做模糊匹配。
在用户点击web链接或打开app的时候,尽可能的收集跟设备相关的信息,例如
a.设备屏幕尺寸
b.设备操作系统版本号
c.ip地址
d.访问时间
e.使用的语言 等等
这些信息的每一项都不能作为唯一标示,但是如果把他们组合起来,作为一个集合,配合算法,进行模糊匹配,匹配成功的几率会大大提高。缺点也是显而易见的,也许世界上找不到两片同样的叶子,但是要找两部同样的手机还是挺容易的。匹配成功率取决于匹配策略,需要长期的去打磨匹配算法。
总结起来,两种方案都不是特别完美,与其自己去DIY,不如采用第三方提供Deferred DeepLink解决方案。
国内的有 魔窗 && Deepshare
国外的有 Branch