使用DeepLink技术唤醒 App

  移动互联时代,手机作为我们日常交流的主要媒介,搭载了许许多多的移动应用程序,这些五花八门的应用程序极大的丰富了我们的生活。目前主流移动应用程序主要有Native App和Web App两种实现形式,其中Native App具有良好的用户黏性和操作体验。本篇针对从浏览器、短信、甚至是在其他APP中唤醒Native APP的需求,帮助Native App开发者为用户提供更好的交互体验,从而建立更稳固的用户关系。

一、Native APP唤醒场景

1、浏览器 -> 唤醒APP

  用户A在手机上通过浏览器打开了某APP的M站或者官网,则引导用户打开该APP或者下载该APP。

2、微信、QQ等 -> 唤醒APP

  用户通过某APP分享了一条链接至微信或QQ,用户B点开该链接后,引导用户B打开该APP或者下载该APP。

3、短信、邮件、二维码等-> 唤醒APP

  用户A打开了某APP的推广短信,邮件或者扫描二维码等,引导用户打开该APP或者下载该APP。

4、其他APP -> 唤醒APP

  用户A通过第三方APP分享了一条链接至用户B,用户B点开该链接后,引导用户B打开指定APP或者下载指定APP。

二、那么移动平台提供了哪些唤醒APP的方法呢?

目前常见的唤醒APP方式有几种:

1、URL Scheme

  URL Scheme是iOS,Android平台都支持,只需要原生APP开发时注册scheme, 那么用户点击到此类链接时,会自动唤醒APP,借助于URL Router机制,则还可以跳转至指定页面。
  这种方式是当前使用最广泛,也是最简单的,但是需要手机,APP支持URL Scheme。
  优点: 开发成本低,绝大多数都支持,web-native协议制定也简单。
  缺点: 错误处理情况因平台不同,难以统一处理,部分APP会直接跳错误页(比如Android Chrome/41,iOS中老版的Lofter);也有的停留在原页面,但弹出提示“无法打开网页”(比如iOS7);iOS8以及最新的Android Chrome/43 目前都是直接停留在当前页,不会跳出错误提示。
支持情况: iOS在实际使用中,腾讯系的微信,QQ明确禁止使用,iOS9以后Safari不再支持通过js,iframe等来触发scheme跳转,并且还加入了确认机制,使得通过js超时机制来自动唤醒APP的方式基本不可用;Android平台则各个app厂商差异很大,比如Chrome从25及以后就同Safari情况一样。

2、Universal Links

  在2015年的WWDC大会上,Apple推出了iOS 9的一个功能:Universal Links通用链接。如果你的App支持Universal Links,那就可以访问HTTP/HTTPS链接直接唤起APP进入具体页面,不需要其他额外判断;如果未安装App,访问此通用链接时,可以一个自定义网页。

3、Android App Links

  在2015年的Google I/O大会上,Android M宣布了一个新特性:App Links让用户在点击一个普通web链接的时候可以打开指定APP的指定页面,前提是这个APP已经安装并且经过了验证,否则会显示一个打开确认选项的弹出框。在推动deep linking上Google和Apple可谓英雄所见略同,优缺点也大致相同,只支持Android M以上系统。

  总结以上各种方案从长远趋势来看都是Deep Links技术,都需要

  • 一个支持HTTPS的Web站

三、DeepLink相关技术和产品

  目前市面移动DeepLink相关技术和产品,包括系统基础技术,巨头产品,创新产品,图示如下。

Deep Link技术产品栈

四、DeepLink全方位解析

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

1,什么是deeplink?什么是applink?两者的关系和区别是什么?
  deeplink是从拦截外部请求到app内并定位到具体页面的技术.
  简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页。不似web,一个链接就可以直接打开web的内页,app的内页打开,必须用到deeplink技术。

2,deeplink的作用是什么?
  deeplink能够将外部流量引导到app内, 并提供连贯的浏览体验, 实在是引流的大杀器.
  deeplink还做高效的流量分发. 通过外部url的投放和内部拦截, 可以针对不同场景直接分发流量到具体页面, 将用户直接引导到各个垂直频道.

3,有哪些比较成熟的解决方案?
  魔窗等

4,安全性如何?
Android Intent Scheme URLs攻击

五、技术实现

下面以Android为例实现浏览器唤醒APP。

一)浏览器唤醒APP
1,首先创建Android工程。


deeplink demo

2,新建DeepLinkActivity,并在清单文件中配置如下:

 <!--&lt;!&ndash; Accepts URIs that begin with "example://gizmos” &ndash;&gt;-->
        <!--<data android:scheme="example"-->
        <!--android:host="gizmos" />-->
        <!--&lt;!&ndash; Accepts URIs that begin with "http://www.example.com/gizmos” &ndash;&gt;-->
        <!--<data-->
        <!--android:host="www.xp.pro.deeplinkdemo"-->
        <!--android:pathPrefix="/gizmos"-->
        <!--android:scheme="http" />-->
        <activity android:name=".DeepLinkActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <!-- Accepts URIs that begin with "example://gizmos” -->
                <data
                    android:host="detail"
                    android:scheme="xp" />
            </intent-filter>
        </activity>

3,网页中使用如下代码,打开app指定页面:

<a href="xp://detail">打开详情</a>

4,在app中接收html打开原生页面请求:

 activityDataWebview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                String url = request.getUrl().toString();
                Uri uri = Uri.parse(url);
                if (uri.getScheme().equals("xp") && uri.getHost().equals("detail")) {
                    Toast.makeText(MainActivity.this, "HTML open Android native App success!", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent();
                    intent.setData(uri);
                    startActivity(intent);
                } else {
                    view.loadUrl(url);
                }
                return true;
            }
        });

  从上面的代码可以看到协议头时自定义的"xp",在测试过程中发现:href中的链接在浏览器输入框里面无法直接打开,只能在html代码中打开。

完整代码见:
https://github.com/XieXiePro/DeeplinkDemo

附:
1,用python快速搭建http服务器访问html及文件。
  如果你的电脑已经装上了Python,那么,搭建一个静态文件服务器将是一件非常简单的事情。
  只需进入到项目文件夹,运行下面这一条命令,就可以把该文件夹作为一个HTTP服务器的根目录(后面8888为端口):

python -m SimpleHTTPServer 8888

  这种方法搭建起来的服务器基本能满足调试使用,如果不够可以试试增强版BaseHTTPServer
  在Python3中,‘SimpleHTTPServer’已经变为‘http.server’了,对应命令为:

python3 -m http.server 8888

  如果要停止HTTP服务器,按Ctrl+C即可。

2,Android模拟器访问本地服务器 localhost。
要把localhost或者127.0.0.1改为10.0.0.2才能访问到本地的服务器数据。

3,本实例主要实现:
deeplink 原生启动原生页面,可支持应用内跳转及跨应用启动。
deeplink Html启动原生页面,可支持本地html加载及服务器访问Html启动原生页面。

参考链接:
1、唤醒 App 的那些事
2、iOS/Android 浏览器(h5)及微信中唤起本地APP
3、移动DeepLink的前生今世
4、Deep Link是什么
5、Deep Link技术
6、Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
7、html与iOS/Android的兼容交互

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 前段时间公司让调研一下DeepLink,说以后会用到,之前看了很久,并做了个demo,现整理一下,方便以后查阅,如...
    Jinbeen阅读 14,566评论 11 44
  • 移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道、硬推广,不如从细节下手...
    La_我们阅读 4,235评论 0 4
  • Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app正常打开...
    Robertbiu阅读 936评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,472评论 28 53
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 3,733评论 0 5