互联居
首发于互联居
移动DeepLink的前生今世

移动DeepLink的前生今世

DeepLink是我一直想聊的话题,但是一直没下笔,因为Deeplink技术的线索太多,太乱,太杂,就像《费加罗的婚礼》和《疯狂的石头》一样,多条线索交织前进,有生态为目的巨无霸,有商业化为目的创业公司,有体验为目的系统开发商。这些线索都是以深度链接(DeepLink)为基础,各打各的牌,各下各的棋。

昨天再读《国家为什么会失败》,重温国家的兴荣可以简化到2个维度来分析,我突然有点灵感,把DeepLink分为三层来介绍,希望能把DeepLink讲清楚。

移动用户86%的时间 (Flurry 2015数据)都是在各个APP中。然而,各个移动App就像大海中的一座座岛屿,虽然都生活在一个海洋中(Android系统或iOS),但是他们之间通常是老死不相往来。举例来说,在微信应用中,用户基本上就没有机会打开第三方应用APP,只能通过Web/浏览器方式提供受限的互通。

真实的用户需求是什么样的呢? 例如,用户在朋友圈中,看到关于一个饭店文章的时候,用户可以很方便打开大众点评应用看评论,直接打开美团查看折扣券,直接打开叫车软件前往该地点。 在信息流看到推荐的商品,能够直接打开淘宝/京东App查看宝贝详情。但是很不幸,目前这些应用孤岛之间都是通过Web进行连接的,通过浏览器的WebView,进行内容跳转,缺少原生App体验。

那么问题来了,为什么各个应用之间,为啥不能支持方便的自由穿梭呢? 这里有2个原因,一个是经济原因,另外一个是技术原因。

经济原因比较简单,目前各个应用开发者的核心目标是把用户"滞留"在自己的应用中,用户离开(哪怕短期离开)被认为是需要医治的病。应用做的越来越大,越来越粘人。举例来说,本来浏览器是一个系统工具软件,但越来越多的浏览器软件集成了更多的功能模块,例如新闻,小说,视频,音乐等。大家都希望用户在自己的APP中,沉溺的时间越长越好。

另外一个就是技术原因了,也是今天想聊的主题。所谓DeepLink(深度链接)就是支持在移动App自由跳转的技术,在PC的Web时代,这个问题简化一个HTTP地址。到了移动时代,这个问题变得复杂起来,移动操作系统有多家,各家处理应用间跳转的底层技术都不一样,调用方式、代码都不同,支持的力度也不同。目前也没有任何行业协会致力于解决这个问题,没有像W3C组织解决Web的规范化。

1 总结篇

今天,我从三个层次来介绍移动DeepLink相关技术和产品,包括系统基础技术,巨头产品,创新产品,图示如下。


简单解释一下:

1. 底层:系统级别对于DeepLink技术支持

a) 基础的App调起技术,通过代码实现,步骤较为复杂

b) 增强的App调起技术(App Links),通过HTTP(S)调用(Android 6.0和iOS9以上)

2. 中间层:移动巨无霸公司在应用间调转的技术和思路

在APP时代,搜索公司无法索引到APP内部的数据,因此搜索公司希望能够建立Web和APP之间的关系的索引,因此它对于Deep Link是一个拥抱的态度。谷歌/百度/苹果都提供技术和接口,让APP开发者提交Web和APP直接的映射关系,对于有映射的WEB结果,用户有机会直接打开APP,提高用户体验。对于搜索广告商而言,除了Web形式的落地页之外,他们也可以提交对应的APP地址,例如谷歌App Indexing, 百度APP Link, 必应 App Linking。

3. 高层:基于DeepLink的创新机会

由于底层DeepLink技术的复杂性,巨无霸企业的规范各自为政的背景下,DeepLink的应用层面还是一个《列王的纷争》的感觉,这种混沌的状态也吸引了很多创业小公司,利用DeepLink技术,找到一个业务突破点。不少公司获得较高的估值,例如URX(估值4000万美元), DeepLink.me, BUTTON,豌豆荚等。

第二部分 底层:基础技术篇

这一部分介绍,基础的系统调用,如何打开第三方应用

第一类,基础DeepLink调用方式:

打开APP发起者需要处理所有的容错,版本检查,参数非标准传递等所有事项。下面是各个系统的DeepLink实现的具体技术

Android 系统: 创建一个Intent,并且指定目标应用的包名(例如com.twitter等)和参数等,既可以打开目标应用。

iOS系统:使用openURL("twitter://userid/1234"), canOpenURL

Windows Phone:使用UriMapper ,例如Uri:"/Music/song123"

JavaScript:使用Intent Schema,使用新窗口打开,但是很多浏览器/应用并不支持这些JS的执行,或者有白名单列表。

第二类:增强的DeepLink调用篇(App Links/Universal Links, Since 2015)

Android 和 iOS其实是鼓励各个应用之间进行交互和集成,提高用户体验,为了就解决基础调用方式的复杂性。2015年,Android 和iOS依次推出了方便开发者得App Links技术,谷歌叫做App Links(Android 6.0),苹果叫做Universal Links(iOS9.0),基本想法就是把打开应用的地址,统一为使用HTTP(S)方式,系统通过拦截和解析HOST地址,与系统注册的HOST进行匹配,如果发现就可以直接打开APP。(注意,谷歌的APP Links技术和App Indexing没有半毛钱关系。)

简单介绍一下Google App Links技术,


以Android App Links为例(苹果的Universal Links整个过程也很类似)

1. App 开发者使用AppLinks(Android 6.0)

a)在App Manifest中声明App Links,打开Intent Filter

b)在HOST服务器创建statements.json配置,包含打开包名和数字签名

2.系统的调用DeepLink过程

系统如果发现HTTPS://HOST请求,系统将检查App Links,如果发现注册的APP,就会直接打开应用。支持的场景包括浏览器,短信等很多系统内置场景。

第三部分 中层:巨无霸的DeepLink情节

搜索结果或则社交网络是用户经常使用的APP,百度搜索,Facebook,谷歌搜索,这些应用也在吸收直接跳转到第三方应用的技术,它有三个目的:

第一:获取App的应用内数据。之前的结果都是Web结果,搜索引擎公司在App的事件里,无法为应用内数据做索引,百度/谷歌/必应需要索引更多的应用内数据。

第二:提升广告主的转化。通过直接打开/拉活APP,有数据表明转化率更高,广告主更愿意为高转化率的技术买单。

第三,改进移动的用户体验。例如,你在浏览器搜到一个地点,点击之后直接调转到打车软件。

这里面有一个核心技术,就是如何建立Web和App之间的映射。对这个行业来说,这是一个新问题,谷歌/Facebook提供了2种方式。

方法一:App开发者提供这种映射关系 ,手工上载这种关系

方法二:App在Web站内描述好打开App的方式,机器爬虫可收集。

目前来说,Facebook提出了一种标准叫做App Links,定义了一些Meta语言放在<HTML>的Meta部分。 App Links的相关标准定义,在AppLinks.org可以找到。这确实是一个行业不错的标准,可以定义App和Web的映射,这样搜索引擎公司建立索引将更加方便自然。豌豆荚推出的应用内搜索,也是需要App将这些信息提供给豌豆荚,用于索引。

AppLinks.org的标记代码例子,用于支持不同的OS。


下面是App Indexing 的一些基本流程


行业的几个相关的技术,虽然名称不同,但都是一个事情:

1. Facebook : App Links(2014),AppLinks.org

2. 谷歌:App Indexing(2014,Android 4.0):

3.Quixey: 网站的根目录下面AppURL.JSON

4. 百度App Link : AppLink.baidu.com; 搜索场景, 面向广告主或有Web站的APP开发者。 WEB站中嵌入了与APP之间的映射关系。

5. Bing App Linking:类似谷歌的App Indexing,Bing可以在搜索结果中直接打开APP的过程,主要用于一些电商产品的推广。

6. 豌豆荚 In-App Search:应用内搜索,比较类似谷歌App Indexing

第四部分 创新层:DeepLink 创新产品篇

在中层,大公司都定义了自己的DeepLink技术标准,利用自己巨无霸的地位,自己索引Web和App映射,支持巨无霸APP中打开第三方应用。那么对于其他的大大小小应用,非巨无霸应用,如何打开其它应用呢?

我们来看看需求,一些小应用需要集成一些第三App体验,例如一个订餐软件集成一个打车软件的App,一个美食App在后面对接一个订餐App,或折扣券App。为了解决这个问题,通常有两个技术问题要解决。

1. 调用方App:需要简化调用的过程(容错,参数传递,标准化等)

2. 被调起方App:需要支持DeepLink,并且无缝与调起方联系起来

有问题,就会有创新。前几年出现不少创新公司,解决这些问题,并积极开发DeepLink的商业机会。总结了一下,这些公司大概提供了两类服务:

1. App的某些Intent场景下,适时引入第三方App,类商业化平台例如有个App软件需要对接打车服务,那么广告平台可以选择滴滴或者是神州的App打开。DeepLink.me公司推出了移动端的AdWords,有雄心壮志把所有的App都接入它的广告平台。

2. 降低DeepLink的集成门槛,方便的支持跨平台,统计等

简单介绍一下市面上一些DeepLink的创业公司/项目吧。

1. Bitly:短链接服务,提供SDK,可以非常方便调用第三方APP

2. 腾讯应用直达广告:支持应用的拉活,在蘑菇街有Show Case,提高30%的CPA

3. AppsFlyer:提供SDK服务,降低DeepLink集成门槛,支持强大统计分析。

4. DeepLink.me:提供SDK服务,也推出AdWords产品,App推广可以购买相关的Intent,通过DeepLink进行倒流。

5. URX:提供场景化的第三方应用打开,也希望通过广告模式发展


最后总结一下DeepLink的发展,在Android6.0和iOS9.0之前,系统对于DeepLink的技术支持有限,使用起来比较复杂,业务的模式也比较薄弱,一直都没有发展起来。随着Google App Links和 Apple Universal Links的发展,越来越多的App可以参考这两个标准,支持从其它应用中被唤起。由于商业原因的限制,直接调转到第三方应用的场景还有限,因此虽然技术很美好和强大,但是现实却很骨感,应用之间的互联互通还是一个商业禁忌之地。

终于罗嗦完了,本文相关技术名词较多,这里有个总结,方便大家查阅。

参考相关文章:

公众号“互联居”:《一个挑战Google AdWords的DeepLink公司》

作者简介:

欧阳辰,互联网广告技术的老兵,曾负责微软移动Contexual Ads广告平台,目前负责小米广告平台的架构和大数据,有空也会在个人微信公众号“互联居”中,分享一些互联网技术心得,订阅互联居公众号,与作者直接交流

编辑于 2016-05-12

文章被以下专栏收录

    作者介绍:欧阳辰 互联网广告技术老兵,毕业于北京大学计算机系,超过15年的互联网研发经验。小米广告架构师主管,负责广告平台架构和大数据,曾负责微软移动Contexual Ads广告平台,参与Bing搜索引擎Index Serve的核心模块研发,有空也会在个人微信公众号“互联居”中,分享一些互联网技术心得,订阅“互联居”公众号,与作者直接交流 微信公众号:互联居 (ConnectHome) 个人主页:http://www.ouyangchen.com