在智能手机上,用户平均超过86%的时间都是花在各个 App 中的,而各个 App 之间又是独立运作的,只能用 web 进行连接,或者通过浏览器的 WebView 进行受限的内容跳转,实际上缺少原生的 App 体验。这是由于移动端操作系统、各个应用的底层技术、调用方式、代码等层面各不相同造成的割裂性,我们今天要讲的 Deeplink(深度链接)正是解决 App 间自由跳转的技术。
Deeplink 又叫深度链接,是一项减少运营难度的技术,它在手机上的应用场景十分广泛,你可能没听过,但你一定见过它的相关应用场景。比如朋友在微信上分享一条资讯,我点击打开的流程是这样的:
再比如,朋友分享一件商品,我点击打开的流程是这样的:
在页面中直接拉起打开对应的 App,并且直接跳转到相应页面,而非 App 首页,这里就运用了 Deeplink 技术。
目前移动端 Deeplink 的说法有狭义和广义之分,分为 Deeplink 和 Deferred Deeplink。
Deeplink:深度链接,指已安装相应 App 的情况下,把特定的参数通过 url 的形式传递给 App,从而直接打开指定的内部页面,实现从链接直达 App 内部页面的跳转。
Deferred Deeplink:延迟深度链接,主要增加了一个是否已安装相应 App 的判断,用户点击链接时,如果未安装 App,则引导用户前往应用市场,下载完对应 App 后,首次打开该 App 时自动跳转进入指定的内部页面。
一般业内常说的“Deeplink”其实就是这两层含义相结合的简称。
事实上只要结合好这两者,用户不管是否下载了对应 App,只要点击链接,都能一键拉起 App,一步直达想去的任何页面。使用和不使用 Deeplink 的差别如下图:
在整个流程中,Deeplink 起到的作用是显而易见的,一方面,随着操作步骤的减少,用户体验也就随之提高;另一方面,用户点击 H5 链接后一键拉起 App,不会再因为找不到相应页面而产生流失,App 的分享页面、推广活动、投放广告的价值和转化率都将大大提高。
涉及到的一些参与者:
想在 App 上开发 Deeplink 是需要一些技术支持的,首先要明白,一个 App 想要做到一键拉起 App,必须先满足两个条件:
-
具备被其他 App 打开的能力(URL Scheme)
-
具备打开其他 App 的能力(各种设备判断及跳转)
因为 Deeplink 是通过 web 页面调用 Android 原生 App,然后将参数通过 url 形式传递给 App 实现拉起,因此需要同时对接多方平台,兼容它们的服务,这个流程中需要涉及一些参与者:
浏览器或社交平台等:通常广告投放、分享链接、推广活动等都要通过社交平台传播,社交平台本身就自带内置浏览器,而点击广告/链接时的跳转、判断显然就需要各个平台的配置和支持才能实现。
App:由于 App 需要获取参数,打开对应的 Activity,因此 App 本身也需要支持获取参数,并且设置好对应的唤醒指定页面。
URL Scheme:
Deeplink 需要在用户点击下载链接后,判断用户手机上是否已安装该 App,如果已安装则通过参数调用 App 打开指定页面,这个过程用 Scheme 就可以实现(Android/iOS 均支持),这就需要 App 端能够接收参数,传递给 App。
Android 方面,打开对应的 Activity,传递的参数 ID 也要跟 App 相应页面匹配,其中也包括 action 和 category 的配置。此外,国内 Android 各个厂商及浏览器差异很大。
iOS 方面,需要配置 info,原理相似,但局限性在于 iOS9 以前需要制作一个中间提示页右上角打开浏览器实现,对用户体验不是很友好,若用户未安装 App ,也会出现各种报错。
Universal link:
Universal link 是苹果公司推出的通用链接技术,如果你的 App 支持 Universal link,就可以通过访问 http/https 链接打开 App 内指定页面,不需要点击右上角跳转,如果没有安装 App,可以跳转到自定义网页,很好的解决了 Scheme 的缺点。
App links:
App links 是由安卓发布的,让用户可以在点击一个 web 链接时跳转到 App 指定页面,前提是这个 App 已经安装并经过验证,否则会显示一个是否打开的提示框。
事实上,即便知道 Deeplink 的实现原理,但是要做一个兼容性很好的方案,就要考虑到各种情况,不同情况适配不同方案,比如判断用户是在浏览器中打开还是微信中打开,Universal link 是否被关闭等,另外,这几项技术是基于系统平台的,因此 Android 及 iOS 每个系统版本的迭代后,配置方式都会有新的变化,且安卓机型众多,浏览器众多等也会导致出现兼容问题,这就使得代码的实现相当复杂。
总而言之,开发者自行研发的话,资源配置、兼容性以及系统更新后的维护成本是比较高的。
另外,像以上几种方案都无法很好的实现用户未安装情况下首次打开进入指定页面。不过也不是完全没办法,比如进行模糊匹配,尽可能收集设备的特征,将 web 和 App 上的信息点配合算法做一个匹配是可以做到的,但准确率和成功率就取决于算法本身,精准度不够高的话显然也会影响 App 的业务开展。
世界上找不到相同的两片叶子,也无法跨过同一条河流,但从千万部手机中找到相同的两部还是可以实现的,不过其难度也不亚于大海捞针,精准度是这项技术的关键。
如果嫌实现难度太大或者精准度不够高的话,目前市面上已经有相对成熟的第三方解决方案可供选择,它们已经将标准的 scheme、Universal link 等技术封装成 SDK 供开发者集成。比如兼容50多家主流浏览器及社交平台、同时支持渠道来源统计的 openinstall;国内 App 出海常用的 Branch、AppsFlyer 等。
不需要重复造轮子,像资源配置、兼容性方面的适配等工作,交给专业打磨这项技术的第三方去做就可以了,毕竟这些供应商本身就是专业做这项服务的,它们提供的服务在稳定性和精准度方面也是经受过市场检验的,在精准匹配方面,有些甚至能在邀请分享方面做到一对一匹配。只用花十几分钟简单集成 SDK 就能实现 Deeplink 的一键拉起 App 直达应用场景效果。
Deeplink 的使用场景很多,通常可以运用于 App 社交分享、App 沉默唤醒、App 广告引流、Web to App、DSP精准投放、短信/邮件营销、搜索引擎索引应用商店等场景。
而常用的外部 H5 链接拉起 App 内部页面功能,也适用于所有类型的 App,尤其是对 web 和原生 App 交互场景需求很大的 App,如:
-
视频类App:点击 H5 链接直达指定视频播放页;
-
直播类App:点击 H5 链接直达指定直播房间;
-
电商类App:点击 H5 链接直达指定商品购物页;
-
新闻类App:点击 H5 链接直达指定资讯详情页;
-
游戏类App:点击 H5 链接直达指定对战房间等。
想象一下,假如你的 App 只有少量内容提供,那么给到用户的选择成本就很低,用户进入 App 后可以迅速找到自己需要功能使用。但如果你的 App 内容是成百上千的量(比如:资讯类、电商类 App),那么用户必然需要在 App 中手动搜索对应内容。而 Deeplink 的出现,能够把其他平台上的用户直接引流到指定内容页,这会给到以内容见长的 App 巨大的价值。
再开动一下脑筋,Deeplink 也绝不限于两款 App 间的互相跳转,如果未来这项技术的生态完全构建成功,我们甚至可以在多款 App 中灵活拉起,实现应用接龙,打个比方:
在深度链接出现之前,有谁能想到,看一部电影也能给这么多 App 进行深层次的精准引流呢?多款 App 之间通过相互跳转的形式互相导流、相互换量,这在未来将成为常态。
Deeplink 的最终目的是让 App 能像 web 一样相互连接,用户在外部打开应用就能够直接到达 App 里的任何一个场景,不再需要熟悉复杂的菜单、也不用手动搜索内部页面,这对 App 的推广和用户体验都是非常重要的。但目前移动互联网领域的操作系统层面,以及各大厂家设置的壁垒,共同造就了一个碎片式的混乱局面,有很多问题需要解决,距离一个工业标准的程度还有一段距离。