一场从“余额宝领体验金活动”引发的技术思考

近期支付宝策划了一期“余额宝体验金”爆款的理财体验活动,通过领取模拟体验资金,获得真实收益。在领取过程中,有个细节引起我们的注意:

可以看出,在平台的跳转过程中,第二步会比较受限(多了一步复制链接按右上角),交互并不流畅。

  • 因为微信屏蔽了scheme调用,只有在微信白名单中的才能被唤起,就连QQ、京东都不行。比较通常的做法是提示在外部浏览器中打开,在外部浏览器中通过scheme方式打开APP。


此处引申出我们的关注点:一是跳转机制,提供了APP之间何种交互的能力;二是场景,跳转技术如何配合业务场景设计?

  • 就场景来看,譬如上述例子,第四到第五步实现从浏览器App→到支付宝App的场景切换:在浏览器上“输入手机号、立既使用”,绑定用户确保活动转换后;引导跳转应用商城下载页,为app带来引流。

本期我们将就浏览器跳转到APP具体页面的URL Scheme跳转技术使用进行浅谈。



1

前言:Android页面跳转的两种方式


两种方式分别是显式跳转和隐式跳转。

  • 显式跳转:简单是说目的地很明确,指明了去向目标页面Activity,多用于APP内部。

  • 隐式跳转:不明确指定跳转到哪个页面,而是设置Action、Data、Category,让系统来筛选出合适的页面。筛选是根据所有的<intent-filter>来筛选。简单的说就是既可以处理某一类功能,也可以处理具体某一动作,多用于APP与APP之间和或APP与H5页面之间。

我们要介绍的Scheme协议跳转就属于隐式跳转。



2

URL Scheme跳转使用场景


应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如基金详情页、基金购买页面等等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下5种

  1. APP端收到服务器端下发的PUSH通知栏消息,结合scheme机制点击跳转路径跳转相关页面;

  2. H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面;

  3. APP根据URL跳转到另外一个APP指定页面;

  4. 通过短信息中的url打开原生app;

  5. javascript判断是否安装应用,打开本地APP还是跳转下载链接。

部分场景效果截图:

比如用在手机浏览器打开了一个分享页面,点击打开,弹框询问是否打开APP,给APP导流。

  • 注意微信浏览器做了限制需引导用户在手机浏览器中打开,反而QQ中打开是没有限制的。如果手机没有安装APP,那么会跳转到一个预设的下载页面,引导用户下载。



3

URL Scheme协议知识介绍


  1. URL即:http://www.szltech.com就是个URL,我们也叫它链接或者网址,是Uniform Resource Location(统一资源定位符)的缩写。

  2. Scheme表示的是一个URL最初始的位置,即://之前的那段字符,比如http://www.szltech.com这个网址的Scheme是http。

  3. 说到URL不得不提到URI,Uniform Resource Identifier(统一资源标识符),URL是URI是一种。在隐式跳转中就需要用到URI


URI的组成如下图所示:

上图所列举了3种比较常见的形式,分别是网址、打电话、发邮件。


而Android中URI常用的几个部分主要是scheme、host、path和query。


android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面。


怎么定义自己APP的Scheme协议呢?我们拿刚才的道乐官网和道乐APP做对比



4

跳转的实现


1、设置scheme,在AndroidManifest.xml对应标签设置scheme

2、获取Scheme跳转参数并显式跳转

3、WebViewClient设置重定向


4、H5调用,APP内外都可


第2步其实也可以用隐式直接跳转,但需要把购买页面FundBuyActivity也暴露出去,不推荐这么做,一个APP只暴露一个中转无页面的SchemeJumpActivity,利于统一控制,提高安全性。好比一个房间有10个门和一个门区别,守一个门的比10个门容易的多。

  • 建议开发者专门用一个模块处理转跳转逻辑,只取需要的参数,避免链接中带遇多余的参数,在内部跳转中使用显示跳转方式。


中转解析模块的流程图如下:

用户点击链接,浏览器解析链接,跳转到APP,在解析模块我们做了一些合法性校验,包括scheme、host、path和相关参数的检查,通过则取相关参数去实现相关功能,不通过则走容错处理模块。


容错处理机制是非常必要的,当出现一些找不到的对应规则时就降级去到首页,避免了出现空白页面,提高了兼容性。


5

扩展:开源路由框架也用了Scheme设计思路


路由跳转在Android开发中有越来越流行的趋势,其中核心设计思路也用到了URL scheme协议,在Manifest给中转Activity配置host、scheme等。


6

总结


URL scheme协议提供了APP之间交互的能力,APP不再是一座孤岛,为APP导流提供过了一种方式。而事先设计好的scheme协议规则就像一张地图,通过这张“地图”能准确的找到目的地。特别注意是微信做了直接跳转外部的限制,需引导用户在外部浏览器中打开。