首页>专栏>js呼起app在h5浏览器

js呼起app在h5浏览器、微信、qq、微博是如何实现的?

2018-01-29 18:55 分类:专栏
项目背景
2014年的时候公司有个移动端的项目,需要在移动端浏览器点击下载按钮呼起原生app,当时依赖js在浏览器呼起原生app还是一个比较新的交互形式,当然技术的实现方案也基本没有什么可以参考的,经过一段时间的技术调研和开发调试,最终实现产品的需求。一晃3年多时间过去了,移动端h5技术也有了很大的进步和发展,各大浏览器厂商和微信、QQ、微博等app内置的webview实现对h5唤起原生app也有了更好的支持。接下来我为大家整理一下最新的js在浏览器、微信、qq和微博中唤起app的解决方案。
 
交互效果
用户点击H5页面的打开App或者下载按钮(这个按钮可能在一个下载入口页、各种分享页面的吸顶或吸底的banner),如果用户已经安装了App,则呼起APP并根据业务跳转到相应的Native页面;如果用户没有安装该应用,则跳到AppStore或者应用市场去下载我们的App,android一般直接下载app应用。

业务逻辑

首先所有的下载/唤起入口都是一个直接跳转,应该是这样:
html代码:
<a href="https://applink-party.mtime.cn/mtlf">下载</a>
js代码 :
window.location.href = 'https://applink-party.mtime.cn/mtlf'
所有的业务判断都是mtlf这个页面里面来做,这样有两个好处:
1、多业务共用代码。在一个团队中,每个人的业务都可能有一个banner下载,没有比location到一个url更简单的调用方式了
2、能够利用universal link
 
universal link实现
1、universal link优势
在iOS9之前,唤起方式和现在安卓是一个的,都是使用scheme进行唤起,这种方式有个小问题,每次唤起,都会给个提示:是否打开xx应用,这样从体验上来讲,又让用户多一步操作。universal link会直接跳转,不会在页面做停留,条件就是在我们项目的根目录添加一个apple-app-site-association.json文件,里面的内容大致是这样:
{
	"applinks": {
		"apps": [],
		"details": [
			{
				"appID": "",
				"paths": ""
			}
		]
	}
}
然后iOS的App后台再配置一下,就可以实现直接唤起了!
 
2、universal link配置
在H5端怎么才算配置成功了呢?只要我们某一个url在浏览器打开(不管是cdn地址,还是路由转发),看到json文件的内容,H5这边就算配置成功。然后把这个地址,给iOS开发工程师,让他们配置即可!
微信、微博、QQ、h5浏览器是怎么呼起的呢?


h5浏览器
ios系统sarafi这种情况比较简单,支持universal link,也支持直接打开itunes,所以按照以上讲的universal link方式实现即可。
android平台h5浏览器,因为不支持universal link呼起app的方式,所以需要采用scheme呼起app的方式,由于各个机型的性能不同在时间的控制上需要多加考虑,经多次测试,呼起等待时间2000ms比较合适。
 
微信
微信是最重要的一种分享渠道,但是我们能够做的,却不多。之前,iOS下的微信支持universal link这种唤起方式,但是从2018年1月8日之后,微信把这个给屏蔽了!!!不管微信基于什么原因,把iOS下这种最便捷的唤起方式屏蔽,我们能做的只能是适应了。现在不管是iOS还是android,我们的处理方式是一样的:都是直接跳到应用宝。ios的应用宝会引导找开AppStore,android的应用宝会直接打开App(前提是你已经下载)
注:微信把itunes链接也屏蔽了,所以也没办法直接跳转AppStore,只能借助应用宝来搭这个桥。
 
微博
微博目前还支持universal link唤起,我们只需要考虑未下载的情况。
在ios下,微博是不支持打开应用宝的链接,所以我们需要引导用户使用Safari打开。
在android平台下,使用scheme这种方式是唤不起App的,但是,同样是scheme呼起app,大众点评和网易云音乐就可以唤起app的,因为微博有自己的信任app白名单,在白名单内的,就可以使用scheme唤起,就像微信之于京东,京东在微信里面就是通过scheme方式唤起一样。
因此,不管是iOS还是android,我们都可以直接引导用户使用本地浏览器打开。
 
QQ及QQ浏览器
iOS平台下,QQ目前还支持universal link唤起,要是没有安装,QQ下也支持直接打开itunes链接,比较其他应用,QQ支持是最好的。
android平台下,QQ也支持scheme方式唤起,但是在一些老机型下,QQ会有一定的概率唤起失败,具体的现象是:第一次打开页面,唤起失败,再次打开,唤起成功。根据现象,我们可以推测出,在QQ的webview中,会对scheme的唤起方式做一些加载时间上的限制,经测试,大约在500ms,超过这个时间值,就会出现唤起失败的情况。为什么第二次打开,唤起成功的概率会大,是因为第一次加载时,已缓存了文件,第二次打开直接加载,这样时间在限制之内。
 
h5移动端调试
开发过程中调试,针对ios和android平台以及微信、qq、微博、浏览器环境一定要每个环境都进行调试验证吗?答案是不需要的,开发过程中可以针对h5浏览器环境进行调试。开发完成后测试验证时可以利用chrome浏览器进行ua设置,模拟浏览器或app环境进行测试验证。safari、微信、qq、微博ua如下:
 
iOS-safari
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C202 Safari/604.1
iOS-微信
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C202 MicroMessenger/6.6.1 NetType/WIFI Language/zh_CN
iOS-QQ
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C202 QQ/7.3.5.473 V1_IPH_SQ_7.3.5_1_APP_A Pixel/1125 Core/UIWebView Device/Apple(iPhone X) NetType/WIFI QBWebViewType/1
iOS-微博
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C202 Weibo (iPhone10,3__weibo__8.1.0__iphone__os11.2.2)
Android-微信
Mozilla/5.0 (Linux; Android 4.4.2; PE-TL20 Build/HuaweiPE-TL20; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
Android-QQ
Mozilla/5.0 (Linux; Android 4.4.2; PE-TL20 Build/HuaweiPE-TL20; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 V1_AND_SQ_7.3.2_762_YYB_D QQ/7.3.2.3350 NetType/WIFI WebP/0.3.0 Pixel/1080
Android-微博
Mozilla/5.0 (Linux; Android 4.4.2; PE-TL20 Build/HuaweiPE-TL20) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 Weibo (HUAWEI-PE-TL20__weibo__8.0.2__android__android4.4.2)
 
总结
1、微博中呼起app需要微博白名单支持,如无法添加到白名单则需要对用户引导
2、ios中新增了universal link唤起app的方式,sarafi、qq具有良好的支持
3、scheme呼起app的方式,各个机型以及各个平台性能差异,造成具有一定的唤起失败率,开发时需要多次测试已找到一个合适的唤起等来时间,建议2000ms
4、关于Scheme唤起,之前有很多方案,比如:使用iframe、<a>标签点击、window.location...经测试,使用a标签点击的兼容性最好

上一篇:没有了
最新教程最新教程 更多>>
html2018-01-31 16:39
css2018-01-31 16:37