手机浏览器中js打开指定的APP
需求:
1:分享二维码到微信;
2:用户识别二维码进入H5;
3:H5中出现“下载或打开某某APP”;
4:用户点击“下载或打开APP”后,直接打开APP或者下载APP;
实现原理:
JS通过
location.href=scheme;
打开一个类似为协议的URL,
scheme格式如下:
iOS:app_id://
android:scheme://host:port/path
scheme需要跟app商定,app给到前端;
安卓是在manifest文件的MainActiivty中申明:
<intent-filter>
<action ..../>
<category .../>
<data android:scheme="demo" android:host="test" android:port="1080" android:path="app"/>
</intent-filter>
如上面内容我们只需在js里用location.href=”demo://test:1080/app”;
这样如果用户安装了app,js执行到这行即可打开app;
有一些以下几个问题:
1:在微信浏览器不生效,应该是微信屏蔽了这个功能,但是看有一些APP又可以,比如知乎。估计是微信加了白名单;
解决方法有两个:
1:听说是可以通过把APP上传到应用宝上,通过打开应用宝的app地址,可以实现,但这样ios无法实现,且一定要安装应用宝。
2:通过添加引导提示,让用户点击微信的右上角按钮,用浏览器打开页面。这样就可以open app了。
2:由于无法判断app是否已经安装,所以不知道是要打开app,还是要下载app;
解决方法:
// 打开app
location.href='demo://test:1080/app';
setTimeout(function(){
// 判断用户是否已经切换到了app
if(!document.hidden)(){
location.href='http://download.apk';// 下载app
}
},1000);
3:在iOS浏览器里(safari),如果用户没有安装app,直接用location.href=’scheme://’时,直接会弹窗提示:打不开该地址,该地址为无效地址。
解决办法:
用iframe加载scheme的形式,不要用主窗口load scheme。
不过测试好像没有用,目前还没有好办法。