最近公司的产品需求,希望iOS和安卓使用一个二维码,让扫描的机器自己识别操作系统实现跳转到相应的下载链接。比如iPhone用微信进行扫描就让他跳转appStore的下载页面,安卓机器使用微信扫描就直接跳浏览器下载。但是这二维码还有一个需求就是,用户已经下载了这个app,当用户打开app进入到注册页面时,再次扫描这个二维码时,自动填写邀请码进行注册。那么该如何实现,当中走了不少弯路,为此研发部也开了几次会,细节就不说了,直接上代码。
使用js实现,其实代码非常简单.
使用时直接拷贝代码,改掉相应的链接就好。
PS:该链接在微信环境打开时还是需要手动跳转到手机的浏览器才能跳到下载页面,因为微信内的webView比较特别,所以写了一个alert引导用户打开浏览器。
Update PS : 已经解决了微信环境打开时需要手动跳转到手机浏览器才能跳到下载页面的情况,使用新的代码,在微信环境下也可以直接跳转下载地址而不需要手动跳浏览器!!!
("更新后实测是可行的,之前可能有些朋友误会了下面的代码的使用场景。")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
/**
出来的链接大概是长这样的
http://xxxx.cn/243423.html?c=Q23DR32
*/
// c=Q23DR32是注册时扫描获取的邀请码。
// 这样加参数,后面的参数会被自动忽略,不会影响加载此网页
toDownload();
// 新的方法
function toDownload(){
var u = navigator.userAgent;
var ua = u.toLowerCase();
if (/iphone|ipad|ipod/.test(ua)) { // iOS 系统 -> 跳AppStore下载地址
//alert("iOS");
window.location.href = 'https://itunes.apple.com/cn/app/xxxxxxx/id1124348115?mt=8';
} else if ( /android/.test(ua)) { // 安卓系统 -> 跳安卓端下载地址
window.location.href = 'http://xxxxxxx.cn/release/xxxx-release.apk';
//alert("android");
} else if (IsPC()){ // PC端
}
}
// 修改前的代码
/*
function goDownload() {
var u = navigator.userAgent, app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
// 是安卓浏览器
if (isAndroid) {
window.location.href = 'http://xxxxxxx.cn/release/xxxx-release.apk'; // 跳安卓端下载地址
}
// 是iOS浏览器
if (isIOS) {
window.location.href = 'https://itunes.apple.com/cn/app/xxxxxxx/id1124348115?mt=8'; // 跳AppStore下载地址
}
// 是微信内部webView
if (is_weixn()) {
alert("请点击右上角按钮, 点击使用浏览器打开");
}
// 是PC端
if (IsPC()) {
window.location.href = 'http://www.xxxxxxx.cn/index.html'; // 公司主页
}
}
// 是微信浏览器
function is_weixn(){
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
return true;
} else {
return false;
}
}
*/
function IsPC() {
var userAgentInfo = navigator.userAgent;
var Agents = ["Android", "iPhone",
"SymbianOS", "Windows Phone",
"iPad", "iPod"];
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
</script>
</body>
</html>