使用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,并在清单文件中配置如下:

 
        
        
        
        
        
        
        
        
            
                

                
                

                
                
            
        

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

打开详情

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的兼容交互

你可能感兴趣的:(使用DeepLink技术唤醒 App)