Deep Link 技术

4,945 阅读6分钟
原文链接: m.toutiao.com

原创作者:应龙@英才技术 58招聘技术团队

英才APP业务发展很快,Hybird框架从无到有,经历了快速2个大版本的迭代,遇到几个瓶颈问题:

1、 分享到微信中的Web链接无法直接跳转至APP指定页面

2、当手机未安装APP时,点击Web链接在iOS9以上的系统无法直接跳转至下载页面,更无法在安装之后跳转至指定页面

3、Hybird框架使用的注入JS对象方式,常常会出现Web页丢失注入对象无法交互的问题

4、用户召回短信中的Web链接都是跳转至M站,无法为APP导入流量

这几个问题都是属于Deeplink领域,于是对这个Deeplink技术做了详细调研。

Deeplink(深度链接)

我们手机里面的每个APP都是独立的,他们之间的内容、服务是完全隔离的,应用搜索是断裂的,每个 APP 都建立起自己的信息孤岛,链接和数据不能在APP之间交换。这时就需要深度链接(Deeplink)—— 深度链接让 APP 开发者能够链接到应用内特定的页面。

其实 Deeplink 并不是一个新名词,在 Web 开发领域,区别于指向首页的链接,Deeplink 就是指向具体内容页的链接。在移动开发领域,Deeplink 则是指 APP 在出路特定 URI 的时候可以直接跳转到对应的内容页或触发特定逻辑,而不仅仅是唤醒APP。

举个例子:朋友在微信上发给你某个商品的介绍链接,假如该电商使用了Deeplink技术,且你已安装该电商的APP,那你就可以点击链接,跳转到APP,直接进入该商品页面。你可以直接在这个页面购买该商品,而不是跳转到首页再搜索它。

Deferred Deeplink(延展的深度链接)

Deeplink有个局限,就是只能在已安装的APP之间进行跳转。如果没安装,就会出现下面的场景:用户在微信点击这个商品链接后,屏幕跳转到一个HTML5页面,页面右上角会有个按钮提示你到App Store下载。下载后打开应用,发现之前的商品页面找不到了。那么,用户很可能会直接卸载应用,商铺也会失去一次有效交易。这时就需要Deeplink的进阶技术 —— Deferred Deeplink。当用户下载安装APP后,它可以直接打开此前显示的商品页面。

商业价值前景

从刚才举例的场景中不难看出,这是免费APP流量变现的方式之一。更大的商业价值来自于移动搜索、广告,“深度链接领域的 Adwords 是一项潜力巨大的业务,相信广告很快就会到来。”移动广告公司URX创始人John Milinovich 如是说。Google早在两年之前就已经开始使用 Deeplink 作为“应用索引”的技术支持。该技术将为 APP 的不同板块提供类似“网址”的专属链接。用户点击链接后,可直接跳转进入相关 APP。Facebook更是发布了实现深度链接的开放跨平台解决方案App Links(http://applinks.org/)。类似的,国内的百度、豌豆荚也已经开始了“应用内搜索”的尝试,接受了阿里巴巴投资的应用搜索引擎Quixey 也会开始这方面的探索。可预见未来,只要app还是移动体验的主流,我们就肯定还会听到更多关于深度链接的消息。

如何实现 Deeplink

说完了上述大背景铺垫,我们再来谈谈具体小细节:

目前实现Deeplink,业内主要有两种解决方案:

1、自定义URL Scheme

URL Scheme是iOS,Android平台都支持,只需要原生APP开发时注册Scheme, 那么用户点击到此类链接时,会自动唤醒APP,借助于URL Router机制,则还可以跳转至指定页面,在Web端稍加逻辑判断,还可进一步实现Deferred Deeplink。比如:

Deep Link技术

如果手机已安装APP,则会调用到APP的接口:

Deep Link技术

2、iOS Universal Links/Android App Links

在2015年的WWDC大会上,Apple推出了iOS 9的一个功能:Universal Links通用链接。如果你的App支持Universal Links,那就可以访问HTTP/HTTPS链接直接唤起APP进入具体页面,不需要其他额外判断。同年的Google I/O大会上,Android M宣布了一个新特性:App Links让用户在点击一个普通web链接的时候可以打开指定APP的指定页面。在推动Deeplink上Google和Apple可谓英雄所见略同

iOS9开启Universal Links步骤

第一步,你必须有一个域名,且这个域名的网站需要支持HTTPS,拥有网站的上传到.well-known目录的权限(这个权限是为了上传一个Apple指定的文件apple-app-site-association)该文件内容如下:

Deep Link技术

第二步,激活Associated Domains能力,在其中的Domains中填入你想支持的域名(这里不是随便填的,是可以支持你需要的Universal Links的域名), 必须以applinks:为前缀,例如:applinks:www.domain.comApple将会在合适的时候,从这个域名请求apple-app-site-association文件。注意:当你打开Associated Domains后,Xcode会在你的工程中添加.entitlements文件,并且登录开发者中心,可以看到Associated Domains处于Enable状态。

Deep Link技术

Steps处显示 √ 即已开启Universal Links。

第三步,APP中实现接口:

Deep Link技术

Android M开启App Links步骤

开启方式也大致同iOS一致:

先决条件:

  • 注册一个域名

  • 域名的SSL通道

  • 具有上传JSON文件到域名的能力

  • Android Studio 1.3 Preview 及以上

  • Gradle 版本 — com.android.tools.build:gradle:1.3.0-beta3 及以上

  • 设置 compileSdkVersion 为 android-MNC 及以上

  • buildToolsVersion — 23.0.0 rc2 及以上

创建json格式的web-app关联文件,如assetlinks.json,上传到web端

Deep Link技术

第一步,创建一个处理App Links的activity,这个activity的目的是为了实现一种这样的机制:负责捕获与解析深度链接,同时转发用户到正确的视图。同时配置激活App Links能力,如下所示:

Deep Link技术

第二步,实现App Links activity的处理逻辑

Deep Link技术

至此APP已经开启App Links,可以通过链接唤醒APP,并支持跳转至指定页面了。

英才APP Deeplink技术现状,由于Android M系统短期内不会普及到国内,Android端采用的仍是URL Scheme,iOS端采用Universal Links,为了解决iOS 9以下系统的兼容问题我们接入了第三方的Deeplink平台魔窗,以减轻前端工作量,使开发人员能专注于交互协议的定制,加快产品业务发展速度。

Deep Link技术

文章选自微信公众号:zhaopinteam_58

如果您有什么意见想法或者想看到更多干货,欢迎关注公众号:zhaopinteam_58