手机浏览器中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。

            不过测试好像没有用,目前还没有好办法。
Table of Contents