URL Scheme机制的使用

2020年7月 29日     


简介

由于app都是在沙盒中,独自就是一个信息孤岛,尽管保障用户的隐私和安全,但是也阻碍了应用间合理的信息共享,于是系统给出了能让app之间进行通信的协议:URL Scheme。通过app注册自己的URL Scheme,作为唯一标识。由于URL Scheme并没有不允许重复的硬性要求,如果设置的URL Scheme与其他app冲突时,自身app不一定会被启动起来,这也跟安装app的优先级有关。

URL Scheme是什么?

URL Scheme有两个单词:

  • URL:我们都很清楚,http://www.apple.com就是个URL,我们通常叫它链接或网址;
  • Scheme:表示的是一个URL中的一个位置—-最初始的位置,即://之前的那段字符。比如http://www.apple.com这个网址的Scheme即为http。

根据上面的简单描述,我们可以很轻易地理解,在我们所使用的应用app中,我们可以像定位一个网页一样,通过特殊的URL来定位一个应用甚至应用里某个具体的功能。下面以苹果的网站和iOS上的微信来做个简单的对比:

网页(苹果)iOS应用(微信)
网站首页/
打开应用
http://www.apple.comweixin://
子页面/具体功能http://www.apple.com/mac/(Mac页面)weixin://dl/moments
(朋友圈)

在这里,http://www.apple.com 和 weixin:// 都声明了这是谁的地盘。然后在 http://www.apple.com 后面加上 /mac 就跳转到从属于 http://www.apple.com 的一个网页(Mac 页)上;同样,在 weixin:// 后面加上 dl/moments 就进入了微信的一个具体的功能——朋友圈。

当然,两种还是有一定的区别:

  • 所有网页都一定有网址,不管是首页还是子页。但未必所有的应用都有自己的 URL Schemes,更不是每个应用的每个功能都有相应的 URL Schemes。实际上,现状是,大多数的应用只有用于打开应用的 URL Schemes,而有一些应用甚至没有用于打开应用的 URL Schemes。几乎没有所有功能都有对应 URL 的应用。
  • 由于URL Scheme存在重复性原因,所以并不是每个URL Scheme都只对应一款应用,而一个网址只对应一个网页。

使用场景

那么URL Scheme有什么作用呢?要知道我们所使用的每个app应用都有很多功能模块,比如基金列表详情、活动详情页、消息通知页,而这种机制可以使得每个app应用都像一个功能组件一样,让我们能通过该机制去完成需要做的事情,比如申购某个基金、搜索等等。同时URL Scheme的使用方式也是多样化的。

1、应用A跳转到应用B

两个没有任何关系的应用进行跳转来完成对应的目的,最常见的就是分享功能。

比如:app应用进行更多渠道的活动宣传时,即可通过URL Scheme将对应的活动给分享到微信的朋友圈或者好友。

直销基金app应用,可通过该机制引导不希望开户的代销用户去对应代销基金app应用进行交易操作。反过来亦可引导代销用户往直销基金app应用进行开户。如下图所示:

既然存在跳转应用的方式,那么也就存在检测应用安装情况的方式。但相对于跳转方式,在不同系统上会需要添加跳转app应用的白名单,以保证检测方式的正常运作。同理,应用为了避免随意乱跳转其他应用的危险,可通过添加白名单减少不合法的跳转,保障应用的安全性。如下图所示:

2、通过网址打开应用

网页可以根据协议头(URL Scheme)来区分打开的是哪一个app应用,在网址上输入对应的URL Scheme ,系统会自动弹框提醒是否打开本应用。实际上这种跳转方式跟应用A跳转应用B是一样的。比如在Safari中直接在输入对应的URL Scheme,即可启动对应的应用并且跳转对应的功能页面。如下图所示:

3、通过html页面跳转app原生页面

要知道每个app应用都会存在不少的需要引流的活动,希望引导客户进行各种操作。使用URL Scheme跳转,可以简单快捷的配置html页面跳转app应用相应的功能页面,并且不需要html页面跟原生有过多的交互处理,仅仅简单的 “href = URL Scheme” 即实现所需功能,减少了开发人员的工作量以及成本。

比如fundapp://platformapi/register、fundapp://platformapi/openacco就是代表着引导用户去注册、开户流程。如下图所示:

4、服务器可以定制化跳转app页面

通过URL Scheme协议,可以方便的对应到app的各个页面,服务器可以用过定制化来告诉app跳转到app内部页面。比如app获取到对应的推送消息后,可以通过点击消息跳转到app的内部页面。如下图所示:

5、通过URL Scheme传参

在跳转到app的每个对应功能的时候,我们会需要传递一些参数,让app能够根据我们传递的参数做出相应的行为,相当于将我们想做的具体步骤更加详细的告知app。

以一个应用中的例子:

fundapp://platformapi/funddetail?fundcode=000000(该例子会在应用中直接打开一个基金代码为000000的基金详情页面)

又或者说通过一个活动页,引导用户完成任务即可获得对应的积分或者抽奖机会,比如某任务是希望用户去申购某个基金10块钱。那么对应的例子即为:

fundapp://platformapi/buyfund?fundcode=000000&appsum=10,这里就即表明了希望用户申购的基金,也表明了申购的金额。如下图所示:

6、通过URL Scheme判断手机是否安装应用

市场上最为常见的,html页面就是先试着打开手机端app自定义的本地协议;一旦发现超时就会转到对应的app下载页,推荐用户下载该app。现主流的是通过该方式,一旦发现未安装应用,会自动跳转到应用宝进行推荐安装。

URL Scheme的格式

那么app自定义的URL作为协议的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。这跟我们常见的网页内容 URL 格式一样。

一个简单的URL分为几个部分,scheme、host、relativePath、query。

scheme代表着协议名称

host代表scheme作用的地址域

relativePath代表的是指定页面(路径)

query代表传递的参数

比如:http://www.baidu.com/s?rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709,

这个URL中,scheme为http,host为www.baidu.com,relativePath为/s,query为rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709。

以上面提到的例子:fundapp://platformapi/funddetail?fundcode=000000,

其中scheme为fundapp,host为platformapi,relativePath为/funddetail,query为fundcode=000000。

结尾

URL Scheme机制是一个被开发者所重视的功能,其在对app的推广以及使用构思上是非常优秀的,而一个app是否能够完整系统地支持URL Scheme已经是判断它是否优秀的标志之一。并且URL Scheme目前仍然是用于提高效率的必要工具:减少时间浪费和在工作的时间集中注意力。通过URL Scheme完成的自动化动作同时做到了这两点:它减少操作步骤,从而减少时间浪费;避免在桌面和 App 内的层层寻找,直达功能,从而减少了干扰。

0

道乐研究院