前言:
最近公司业务发展迅速,要求在各种手机浏览器中、各种app的webview中打开移动手厅app客户端。
什么是 URL Scheme?
android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。
URL Scheme应用场景:
客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如商品详情页、活动详情页等等。也可以执行某些指定动作,如完成支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下几种:
- 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面
- H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
- APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
- APP根据URL跳转到另外一个APP指定页面
问题
- 某些浏览器或webview支持iframe中src方式,还有些不支持
- 某些浏览器或webview支持a标签中href方式,还有些不支持会报这个错 net::ERR_UNKNOWN_URL_SCHEME
解决思路和代码
- 需要去腾讯开放平台注册一个URL Scheme
- 经过测试ios 9系统以上版本 safari 不支持iframe的方式跳转。所以ios系统 都用a标签的方式来做吧。
- 如果有业务是一进页面需要拉起客户端需要写一个定时器例如3秒以后还没有唤起app就执行下载app的操作。如何监听到app被唤起可以在页面中使用window监听pagehide事件,在监听事件中来清除那个下载app的定时器。
window.addEventListener('pagehide', function() {
//清理下载app的定时器
}, false);
复制代码
- 安卓webview中最好用iframe的方式跳转,使用a标签方式如果没有安装要拉起的app会报ERR_UNKNOWN_URL_SCHEME的错。