使用扫描二维码打开app

应该很多人遇到过这种需求,扫描二维码打开app若是用户没有这个app则提示它跳转。javascript

用网页直接来调用app是不打可能的,必须原生那边先作一些配置。html

首先,安卓和苹果的调用方法是不一样的。java

因此咱们须要先判断一下终端。android

var u = navigator.userAgent,
app = navigator.appVersion;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端ios

 

以后最好是分别跳转到两个不一样的页面去作操做,由于苹果须要在头部配置一个app-id<meta name='apple-itunes-app' content='app-id=1115968341'>浏览器

下面是苹果的代码微信

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name='apple-itunes-app' content='app-id=1115968341'>
		<title></title>
		
	</head>
	<body>
		<a href="https://itunes.apple.com/cn/app/yi-fang-kuai-le-xue-tang/id1115968341?mt=8" id="openApp">点击打开</a>
		
		<script type="text/javascript">  
			//苹果
		    document.getElementById('openApp').onclick = function(e){  
		        // 经过iframe的方式试图打开APP,若是能正常打开,会直接切换到APP,并自动阻止a标签的默认行为  
		        // 不然打开a标签的href连接  
		        var ifr = document.createElement('iframe');  
		        ifr.src = 'iosefunbox://';  
		        ifr.style.display = 'none';  
		        document.body.appendChild(ifr);  
		        window.setTimeout(function(){  
		            document.body.removeChild(ifr);  
		        },3000)  
		    };
		   
		</script>
	</body>
</html>

 

这里的ifr.src就是你去打开app的协议路径,安卓和苹果是不同的。


若是是安卓机的话就简单了
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
	</head>
	<body>
		
		<a href="http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile" id="openApp">点击打开</a>
		<script type="text/javascript">
			
			//安卓
//			/**/window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile";
	         
	            // 经过iframe的方式试图打开APP,若是能正常打开,会直接切换到APP,并自动阻止a标签的默认行为  
	            // 不然打开a标签的href连接  
	            var ifr = document.createElement('iframe');  
	            ifr.src = 'efunbox://efunbox.app/efunbox/open';  
	            ifr.style.display = 'none';  
	            document.body.appendChild(ifr);  
	            window.setTimeout(function(){  
	                document.body.removeChild(ifr);  
	            },3000);
	        
		</script>
	</body>
</html>

这是咱们原先的需求,后来变了,说苹果直接跳转到appstore里面就行了,不用直接打开,安卓的话须要直接打开。app

这样我就直接把它们集合在一个网页就行。jsp

我上面的a连接是直接跳转到腾讯应用宝里面。scala

用网页扫描访问的话是没问题的,

可是我就感受会出事,后来拿微信扫一扫就蒙逼了。安卓只会打开a连接,跳转不进app,由于被微信拦截掉了,苹果也同样,解决的方案只能是点击右上角,提示用户在浏览器打开就没问题。这种方法是无奈之举,但后来针对苹果机找到了一个解决它的方案就是,a连接的跳转直接跳腾讯应用宝上架的连接,而后微信内部会处理帮你自动跳转到appstore里面。

最后是整合了一下的代码。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body id="body">
		<script type="text/javascript">
			var u = navigator.userAgent,
			app = navigator.appVersion;
			var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器
			var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
			if(isIOS){
				window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile";	
			}
			if(isAndroid){
				alert("请点击右上角在浏览器打开");
				window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.edufound.mobile";
	            var ifr = document.createElement('iframe');  
	            ifr.src = 'efunbox://efunbox.app/efunbox/open';  
	            ifr.style.display = 'none';  
	            document.body.appendChild(ifr);  
	            window.setTimeout(function(){  
	                document.body.removeChild(ifr);  
	            },3000);
			}
		</script>
	</body>
</html>