2
window.location.href = "myscheme://myhost:8080/index"; 
window.setTimeout(function(){
    window.location.href = "https://xxxx/apk/app.apk";
},2000);

以上是百度出来的方法,确实可以打开app,但是在显示打开提示后等待几秒定时器,会出现下载提示,不符合需求。所以想求助大神以下问题

求解1:怎么才能在提示打开app时,关闭定时器;当没有安装app时,直接提示下载app,不跑定时器?

求解2:以B站(哔哩哔哩官网)为例。在B站移动版中,手机安装了B站app时,web上的按钮显示‘打开app’;没安装app时,web上的按钮显示‘下载app’,这种效果怎样才能实现?

大白 100
2019-02-25 提问
3 个回答
2

已采纳

为此我专门下了一个B站,不过我的手机chrome上并没有变化,还是“下载APP”。

web端确实无法检测当前设备中是否已安装了。目前通用的方法就是你说的这种,先尝试打开,然后再延迟进行下载。我们使用的也是这种。其他开发者也就是在延迟下载这块做点功夫,因为假如设备真的安装了app,那么在呼起app后,浏览器就会被置于后台,定时器会停止运行或者延迟运行。

比如有的是利用页面可见性来鉴定,假如浏览器不可见,说明app被呼起了,那么就清除定时器;
第2种方法:延迟后进行下载操作时,不是直接去下载app,而是先跳转到一个中间页,这个中间页有个按钮,可以点击去下载,就是用户体验会好点;

0

传送门:stackoverflow: How to check if an app is installed from a web-page on an iPhone?

除此之外,可以参考「知乎」的做法:不自定义Scheme,而是直接用http(s),然后在App的AndroidManifest.xml中定义Activity拦截URL的规则,浏览器若发现跳转的URL符合上述规则,则会调用App。

撰写答案

推广链接