你的位置:首页 > Java教程

[Java教程]使用扫描二维码打开app


应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转。

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

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

所以我们需要先判断一下终端。

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终端

 

之后最好是分别跳转到两个不同的页面去做操作,因为苹果需要在头部配置一个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里面就好了,不用直接打开,安卓的话需要直接打开。

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

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

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

但是我就感觉会出事,后来拿微信扫一扫就蒙逼了。安卓只会打开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>