js在微信、微博、QQ、Safari唤起App的解决方案

首先看下完整的流程:android

简单说下universal linkweb

在iOS9以前,唤起方式和如今安卓是一个的,都是使用scheme进行唤起,这种方式有个小问题,每次唤起,都会给个提示:是否打开xx应用,这样从体验上来说,又让用户多一步操做。universal link会直接跳转,不会在页面作停留,条件就是在咱们项目的根目录,增一个apple-app-site-association.json文件,里面的内容大体是这样:json

微信、微博、QQ、Safari在各平台的唤起方案

微信

微信是最重要的一种分享渠道,可是咱们可以作的,却很少。以前,iOS下的微信支持universal link这种唤起方式,可是从2018年1月8日以后,微信把这个给屏蔽了!!!无论微信基于什么缘由,把iOS下这种最便捷的唤起方式屏蔽,咱们能作的只能是适应了。so,如今不论是iOS仍是Andriod,咱们的处理方式是同样的:都是直接跳到应用宝。iOS的应用宝会引导找开AppStore,Andriod的应用宝会直接打开App(前提是你已经下载) 注:微信把itunes连接也屏蔽了,因此也没办法直接跳转AppStore,只能借助应用宝来搭这个桥。浏览器

微博

微博目前还支持universal link唤起,咱们只须要考虑未下载的状况。缓存

  • iOS下,微博是不支持打开应用宝的连接,因此咱们须要引导用户使用Safari打开,像这样:
  • Andriod平台下,使用scheme这种方式是唤不起App的,可是有特例,一样是scheme,大人点评和网易云音乐就能够唤起,有空你们能够本身试试,因此咱们能够推断出,安卓平台下的微博,也有相似微信同样的白名单,在白名单内的,就可使用scheme唤起,就像微信之于京东,京东在微信里面就是经过scheme方式唤起的。

so,不论是iOS仍是Andriod,咱们的方案是:直接引导用户使用本地浏览器打开。微信

QQ

  • iOS平台下,QQ目前还支持universal link唤起,要是没有安装,QQ下也支持直接打开itunes连接,比较其余应用,QQ支持是最好的。
  • Andriod平台下,QQ也支持scheme方式唤起,可是在一些老机型下,QQ会有必定的几率唤起失败,具体的现象是:第一次打开页面,唤起失败,再次打开,唤起成功。根据现象,咱们能够推测出,在QQ的webview中,会对scheme的唤起方式作一些加载时间上的限制,经测试,大约在500ms,超过这个时间值,就会出现唤起失败的状况。为何第二次打开,唤起成功的几率会大,是由于第一次加载时,已缓存了文件,第二次打开直接加载,这样时间在限制以内。

Safari

Safari这种状况比较简单,支持universal link,也支持直接打开itunes,so,如图处理就能够了。app

踩坑

    • iOS9中,Safari不支持直接跳转itunes,so,这种状况须要作兼容处理,能够直接跳到应用宝
    • 以前看唤起是否是成功了,须要本身来计算时间,由于要是唤起成功了,setInterval的时间就会变慢,经我测试,已经用不到这种方法了,只须要使用document.hidden || document.webkitHidden就能够,兼容性还不错
    • 判断是否是Safari浏览器时,通常判断都是UA中有没有这个字符串,经测试发现,安卓的UA中,也包含Safari这个字符串(以下UA展现),因此须要加上操做系统的判断
  • 关于Scheme唤起,以前有不少方案,好比:使用iframe<a>标签点击window.location…经测试,只要使用a标签点击,这样兼容性最好,代码大约长这样:iphone

关于测试

两个平台,这么多状况,要一个一个测试吗?固然要一个一个的验证,可是在开发期间,没有必要改一行,在手机上测试一下,这样效率过低了,尤为是像同样,选了一个安卓4.4的手机,绝对能够磨练你的耐心。为了提升效率,我把我经常使用到的UA分享给你们,这样在Chrome模拟器里配置一下,就能够本地调试了,经常使用UA以下:测试

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
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
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)
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

  

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

  

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

  

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)

  配置完成以后,就能够像我同样,在电脑上切换环境啦:ui

相关文章
相关标签/搜索