首先判断是在微信中,还是在浏览器中,如果在浏览器中,直接使用scheme url进行跳转,如果有app就直接进入app并通过页面隐藏事件监听,取消到下载页的跳转,没有唤醒则说明无app,到下载页。
在微信中时,如果是ios,用universal Link进行指定页跳转,无app时会解析为普通路径,故此路径可放置下载页,有app时会直接唤醒app并到达指定页。而android时若要到达指定页,要么用遮罩引导用户在浏览器打开,要么达到应用宝中deeplink的条件。我的项目中主要目的是进入app,所以直接放置了应用宝的地址,放弃了到达指定页。
toDownload() {
if (this.$api.isWx) {
if (this.$api.subTag == "wxIOS") {
let url =
"https://xxx.xxx.com/applink/?url=https://xxx.xxx.com" +
this.$route.fullPath;
location.href = url;
} else {
window.location.href =
"https://a.app.qq.com/dom/micro/open.jsp?pkgname=com.xxx.xxx&android_scheme=xxxx://spa/welcome?url=https://xxx.xxx.com" +
this.$route.fullPath;
}
} else {
let url =
"xxx://spa/welcome?url=https://xxx.xxx.com" +
this.$route.fullPath;
location.href = url;
//延迟执行 如果1s没响应,就表示你手机中没有该app。就可以去下载了
var timer = setTimeout(() => {
location.href = "https://xxx.xxx.com/download"; //ios下载地址
}, 1000);
document.addEventListener(
"visibilitychange webkitvisibilitychange",
function() {
var tag = document.hidden || document.webkitHidden;
tag ? clearTimeout(timer) : "";
}
);
window.onpagehide = function() {
clearTimeout(timer);
};
}
},