一篇文章了解H5打开APP的诸多方案

其实H5打开APP原本应该是一件很简单的事,无非是在H5页面上调用一个协议或者接口将APP打开嘛。可是由于技术方案的发展和某些流量APP的封锁,唤起APP的方案就变得复杂了起来。本文从介绍唤起APP的诸多方案入手,讲述各个方案的优缺,指望读者能从全局的角度对H5唤起APP有一个系统的认识。

1. 唤起APP的方案

以下图,当前主要有三种打开APP的渠道:流量APP封装渠道,原生的打开渠道以及一些奇技淫巧。api

clipboard.png

1.1 流量APP封装渠道

微信、手Q和微博等流量入口为了保证流量不流失,对iOS和Android原生的唤起方案作了屏蔽和封装。在这些APP中,使用原生唤起APP方案是无效的,只能用他们的方案或者位于白名单中的APP才能经过H5的唤起APP。跨域

1.1.1 微信

微信最初唤起APP方案是WXJSBridge,后来变为了WX JS-SDK。这时候有人可能就要说了,你瞎说,我根本没有看到JS-SDK上有关于唤起APP的相应接口。其实这些关于APP的接口都是有的,只不过没有写在文档中。浏览器

要使用微信的唤起APP方案须要两点:缓存

  • 明确知道唤起APP的接口
  • 要唤起的APP自己就处于微信的白名单中

因此对于第三方APP,即便知道了接口的名字也不能用。微信

而JS-SDK和JSBridge的本质实现都是同样的,可是JS-SDK还要求使用者在本身的后台全局缓存一个jsapi_ticket,若是是腾讯系单纯想作唤起APP方面的逻辑的话,直接使用JSBridge无疑是个又快又好的作法。post

1.1.2 手Q

手Q和微信同样,也对唤起APP作了封装,一样又白名单的限制,因此也只有腾讯系的APP才能使用。spa

可是在微信中,唤起腾讯系APP使用schema是不行的,可是对于在手Q打开腾讯系APP,能够选择使用schema而不是手Q的封装方案MPP.code

另外说一点,手Q的MPP唤起APP并传递参数的方法有点问题,文档写的也不完善,确实不如直接用schema唤起好用。blog

1.1.3 其余流量APP

主要是指微博,手机百度等APP,应该也是白名单的打开方式,日常用的很少,这里不作赘述。接口

2. 原生渠道

2.1 Schema

Schema是一种页面内跳转协议,主要有如下几部分组成[1]

行为(应用的某个功能)    
            |
scheme://[path][?query]
   |               |
应用标识       功能须要的参数

可是在Chrome25以后,iOS9之后,Android和iOS原生都再也不支持这种协议,转而转变为新的方案App Link和Universal Link。

对比起这种方案,Schema不能判断出是否打开APP成功,也就不能针对没有打开APP作一些处理(只能经过hack的手段,经过判断页面是否可见来达到这一点)。可是,Schema如今在除原生之外各大移动端浏览器上(如QQ浏览器,Chrome浏览器等)都有不错的支持,并且使用schema不用客户端作额外的处理,作一些简单的逻辑仍是能够用的。

2.2 Universal Link

Universal Link是iOS开发的一种无缝连接APP和Web的方式。当访问一个连接时,若是安装了APP,那么直接跳转APP的相应页面,若是没有安装APP,则跳转相应的H5页面。不过咱们能够利用它的这种特性来唤起APP。

Universal Link有几个缺陷:

  • 要唤起的APP要作相应的支持
  • 当前的页面和唤起的域名必定要跨域才能够
  • 必须是Https

2.3 APP Link

APP Link的初衷和Universal Link一致,都是为了给用户提供无缝的用户体验——若是安装了APP则跳转APP,没有安装APP就跳转相应页面,所以,咱们也能够用它来作唤起APP。一样的,它也须要APP作相应的设置。

不过APP Link是Android上提供的方案,它和Universal Link不一样的是:不须要使用https协议

3. 其余渠道

3.1 应用宝渠道

应用宝渠道是应用宝借用本身腾讯系APP的能力,利用本身的权限来帮助其余APP在微信上唤起,换取其余推广资源的行为。

不过这种方案已经被微信给封杀了。因此当前,做为一个第三方APP,是没有办法在微信上唤起的

4. 总结

本文泛泛的总结了市面上常见的H5唤起APP方案,罗列了它们的优缺点。受限于腾讯系自己白名单的限制,没有办法给出一个最佳实践,可是也但愿能给你们对H5唤起APP提供一些帮助。

相关文章
相关标签/搜索