将至端午节,我们这边的一款文旅产品app需要在服务区进行地推,为配合好推广,需要在服务区张贴易拉罐海报等多种形式二维码供新老用户下载。
不具体写代码,只写相关方法
需求功能:
- IOS端 扫码进入APPLE STORE中下载APP。
- Android端 扫码进入对应机型的应用商店中下载APP。若已经安装APP,则尝试唤醒APP。
- 其他端打开,进入官网。
思路:
- 获取当前设备类型,判断是否为IOS或Android。
- 判断终端设备品牌(小米,华为…)。
- 尝试打开app
…
一些方法:
h5跳转打开app
window.location.href = 'scheme url'
h5唤醒app,未安装或唤醒失败时的处理
- 监听页面是否被隐藏/显示,若有变化归结为唤醒成功。
- 添加延时方法,若在指定时间内未唤醒成功,则跳转容错页面。
// 默认展示
let onShow = 'visible'
let timer = null
document.addEventListener("visibilitychange", function () {
// 将页面赋值给onShow
onShow = document.visibilityState
// 清除延时,不再跳转容错页面
timer && clearTimeout(timer)
});
// 唤醒app
window.location.href = 'scheme url'
// 延时3秒,若在3秒内未唤醒成功并且页面打开显示状态,则跳转容错页面
timer = setTimeout(() => {
// 页面没变化,跳转
if (onShow === "visible") {
window.location.href = '容错页面或操作'
}
}, 1000 * 3)
获取手机品牌、跳转对应应用商店
国内安卓手机都会预装本品牌的应用商店且不可卸载,故直接跳转即可。
function getMobileBrand() {
let sUserAgent = navigator.userAgent.toLowerCase()
var isHuawei = sUserAgent.match(/huawei/i) == "huawei";
var isHonor = sUserAgent.match(/honor/i) == "honor";
var isOppo = sUserAgent.match(/oppo/i) == "oppo";
var isOppoR15 = sUserAgent.match(/pacm00/i) == "pacm00";
var isVivo = sUserAgent.match(/vivo/i) == "vivo";
var isXiaomi = sUserAgent.match(/mi\s/i) == "mi ";
var isXiaomi2s = sUserAgent.match(/mix\s/i) == "mix ";
var isRedmi = sUserAgent.match(/redmi/i) == "redmi";
if (isHuawei || isHonor) {
return 'huawei';
} else if (isOppo || isOppoR15) {
return 'oppo';
} else if (isVivo) {
return 'vivo';
} else if (isXiaomi || isRedmi || isXiaomi2s) {
return 'xiaomi';
} else {
return 'default';
}
}
const appStore = {
vivo: 'vivomarket://details?id=包名',
huawei: 'appmarket://details?id=包名',
oppo: 'oppomarket://details?packagename=包名',
xiaomi: 'mimarket://details?id=包名',
default: '如果真没应用市场的时候跳转的下载apk地址'
}
// 跳转对应市场
window.location.href = appStore[getMobileBrand()];
获取设备终端类型
function judgeClient() {
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //判断是否是 android终端
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //判断是否是 iOS终端
if(isAndroid){
return 'Android';
}else if(isIOS){
return 'IOS';
}else{
return 'Other';
}
}
获取访问终端内核
let browser = {
versions: function () {
let u = navigator.userAgent, app = navigator.appVersion;
return {
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android终端
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
weixin: u.indexOf('MicroMessenger') > -1, //是否微信
qq: u.match(/\sQQ/i) == " qq" //是否QQ
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
};
欢迎大家下载 豫行易途App,一起玩转河南!!