一、需求分析
1、实现app之间的通信有多种方式
单从前端角度来看,需要利用IOS 与 Android 都支持一种叫做 URL scheme 协议的链接。比如网易新闻客户端的协议为 newsapp://xxxxx 采用URL Scheme链接方式解决即可,
2、什么是URL Scheme?
URL Scheme就是一个可以让app相互之间可以跳转的对外接口,为方便app之间互相调用而设计的。通过给APP定义一个唯一的URL路径来从外部快速的打开这个指定的APP,每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
这个协议不需要前端去实现,只需要将协议放在 a 标签的 href 属性里,或者使用 location.href 与 iframe 来实现激活这个链接。
3、URL Scheme有哪些应用?
1、 第三方分享的SDK就是通过这种方式来实现分享的,我们将需要分享的数据传递给SDK,SDK通过OpenURL来打开第三方应用传递数据,返回时SDK来处理OpenUrl的参数,实现查看分享的回调。
2、 调用微信、支付宝等客户端完成支付的功能。
3、 第三方应用调用系统所带的地图软件。
4、 从浏览器中某一页面的点击事件可以打开对应客户端的某一个界面,就是通过APP协议 URL Scheme:// + 参数 来完成唤醒跳转客户端界面的。
二、代码实现(以税务局app为参考)
当纳税人在微信端发起授权时,直接唤起电子税务局APP进行授权URLScheme为:taxsdapp://taxbs:9999,URL路径为:icbc/oauth (银行简称/操作)
未编码的授权URLScheme为:
taxsdapp://taxbs:9999/icbc/oauth?params="{"yhdm":"402455350018","cpmc":"产品名称"税e贷":"产品编码","syd01":"签名":”402455350018syd0110013”}"
编码后的授权URLScheme为:
taxsdapp://taxbs:9999/icbc/oauth?params=InsieWhkbSI6IumTtuihjOS7o+eggSIsImNwbWMiOiLkuqflk4HlkI3np7AiLCJjcGJtIjoi5Lqn5ZOB57yW56CBIiwic2lnbmF0dXJlIjoi562+5ZCNIn0iIA==
<a ’href="taxsdapp://taxbs:9999/icbc/oauth?params=eyJ5aGRtIjoic2RueCIsImNwbWMiOiLnqI5l6LS3IiwiY3BibSI6InRheDAxIiwic2lnbmF0dXJlIjoiOTU1NTVjM2Q1ZGJjOTg4NzRlMTFiNTE4YzQxOWM3OGZiNTM0YjBkZCJ9"> </a>
给a标签一个点击事件,如果本地安装了相应的app则提示用户是否打开
如果本地没有安装对应的app则通过
document.hidden H5新增的api
判断当前页面是否处于隱藏状态,false则页面处于隐藏状态,并且在3秒内跳转到APP下载页面
Let hidden = window.document.hidden || window.doument.mozHidden || window.document.webkitHidden
setTimeout(function(){
!hidden && setTimeout(function(){
if (new Date() - clickedAt < 3000){
window.location = 'http://etax.shandong.chinatax.gov.cn/ydsw_webservice/qyd_ydsw.jsp';
}
}, 500);
}, 500)