使用掃描二維碼打開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>
相關文章
相關標籤/搜索