掃描二維碼自動識別手機系統(Android/IOS)跳轉不同頁面
移動網際網路發展迅速,各種APP的開發都太瘋狂了,一般稍大點兒的應用,都會準備多個版本,比如:iPhone版、iPad版、Android版,我們姑且稱之為:終端適配。
業務做的再大點兒的,APP還會考慮覆蓋到多個國家,比如:中文版、英文版、日文版、韓文版等,我們可稱之為:APP國際化。
還有更拽的,針對不同渠道(流量來源)也提供不同的版本,比如:百度版、Google版、阿里版、騰訊版,等,我們可稱之為:多渠道適配。
但是對於應用提供方,一定希望入口只有一個:在二維碼瘋狂流行的年代,必然是已掃描二維碼直接下載來的最快最便捷,所以怎樣讓這張二維碼承載這麼豐富的資訊量呢?之前給PM做過好幾個這樣的二維碼,後來發現這種需求還不少,估計FEer都會遇到,所以乾脆寫成一篇文章,將解決方案(程式碼)share出來,供需要者使用!
其實所謂的解決方案,就是做一個HTML靜態頁面,所有邏輯控制都在該頁面進行,比如判斷終端、判斷語言、判斷渠道等;然後通過該HTML頁面對應的URL生成一張二維碼即可!
一、針對“終端適配”&“APP國際化”
- <!DOCTYPE HTML>
- <htmllang="zh-CN">
- <head>
- <metacharset="UTF-8">
- <title>手機APP下載頁面:根據終端辨別下載地址</title>
- <scripttype="text/javascript">
- // 獲取終端的相關資訊
- varTerminal
- // 辨別移動終端型別
- platform :function(){
- var u = navigator.userAgent, app = navigator.appVersion;
- return{
- // android終端或者uc瀏覽器
- android: u.indexOf('Android')>-1|| u.indexOf('Linux')>-1,
- // 是否為iPhone或者QQHD瀏覽器
- iPhone: u.indexOf('iPhone')>-1,
- // 是否iPad
- iPad
- };
- }(),
- // 辨別移動終端的語言:zh-cn、en-us、ko-kr、ja-jp...
- language :(navigator.browserLanguage || navigator.language).toLowerCase()
- }
- // 根據不同的終端,跳轉到不同的地址
- var theUrl ='http://www.XXX.com';
- if(Terminal.platform.android){
- theUrl ='你的Android APP對應下載地址:apk檔案地址';
- }elseif(Terminal.platform.iPhone){
- theUrl ='你的iPhone APP對應下載地址:APP Store地址';
- }elseif(Terminal.platform.iPad){
- // 還可以通過language,區分開多國語言版
- switch(Terminal.language){
- case'en-us':
- theUrl ='你的iPad APP(英文版)對應下載地址:APP Store地址';
- break;
- case'ko-kr':
- theUrl ='你的iPad APP(韓語版)對應下載地址:APP Store地址';
- break;
- case'ja-jp':
- theUrl ='你的iPad APP(日文版)對應下載地址:APP Store地址';
- break;
- default:
- theUrl ='你的iPad APP(中文版-預設)對應下載地址:APP Store地址';
- }
- }
- location.href = theUrl;
- </script>
- </head>
- <body>
- <!--
- -->
- </body>
- </html>
假設如上HTML靜態檔案對應的URL為:http://www.XXX.com/app-install/terminal-language.html
那麼就可以通過該URL生成一張二維碼,掃面該二維碼後,具體的下載地址,會由terminal-language.html自動識別並前往。
二、針對“多渠道適配”
- <!DOCTYPE HTML>
- <htmllang="zh-CN">
- <head>
- <metacharset="UTF-8">
- <title>手機APP下載頁面:根據渠道辨別下載地址</title>
- <scripttype="text/javascript">
- // 如果要分渠道,也是可以的,渠道區分:?from=xx
- varFrom=(function(){
- var searchInfo = location.search.substr(1).split('&'),item,from;
- for(var i=0,len=searchInfo.length;len >1&& i<len;i++){
- item = searchInfo[i].split('=');
- if(item[0]=='from'){
- from = item[1];
- break;
- }
- }
- return from;
- })();
- // 根據不同渠道,去向不同的下載地址
- var theUrl ='http://www.XXX.com';
- switch(From){
- case'baidu':
- theUrl ='你的APP:針對 baidu 的定製版';
- break;
- case'google':
- theUrl ='你的APP:針對 google 的定製版';
- break;
- default:
- theUrl ='你的APP:官方 版';
- break;
- }
- location.href = theUrl;
- </script>
- </head>
- <body>
- <!--
- -->
- </body>
- </html>
對於上面這種多渠道適配的,會稍微複雜一些,假設如上HTML檔案的地址為:http://www.XXX.com/app-install/channel.html
那麼對於不同的渠道,咱們就需要生成不同的二維碼。也許此時你會不理解,渠道在哪兒體現?I Tell U:
假設我們的APP官網(推廣頁面)為:http://www.baidu.com/app ,那麼咱們的運營PM可能會將該URL後面加上不同引數,然後在各大網站進行推廣,比如:
在百度貼吧推廣:http://www.XXX.com/app?from=baidu
在新浪微博推廣:http://www.XXX.com/app?from=sina
在騰訊微博推廣:http://www.XXX.com/app?from=qq
上面的from引數,就是渠道,針對上面的三個渠道,咱們就需要用如下三個URL來生成二維碼:
來源網站為百度:http://www.XXX.com/app-install/channel.html?from=baidu
來源網站為新浪:http://www.XXX.com/app-install/channel.html?from=sina
來源網站為騰訊:http://www.XXX.com/app-install/channel.html?from=qq
並且需要在APP官網(http://www.XXX.com/app)顯示二維碼的地方,通過from引數載入不同渠道的二維碼,這樣,掃描該二維碼後,便會得到該渠道定製版本的APP。
三、這三種也可以結合起來使用,同時對終端、語言、渠道進行識別:
- <!DOCTYPE HTML>
- <htmllang="zh-CN">
- <head>
- <metacharset="UTF-8">
- <title>手機APP下載頁面:根據終端&渠道辨別下載地址</title>
- <scripttype="text/javascript">
- // 獲取終端的相關資訊
- varTerminal={
- // 辨別移動終端型別
- platform :function(){
- var u = navigator.userAgent, app = navigator.appVersion;
- return{
- // android終端或者uc瀏覽器
- android: u.indexOf('Android')>-1|| u.indexOf('Linux')>-1,
- // 是否為iPhone或者QQHD瀏覽器
- iPhone: u.indexOf('iPhone')>-1,
- // 是否iPad
- iPad: u.indexOf('iPad')>-1
- };
- }(),
- // 辨別移動終端的語言:zh-cn、en-us、ko-kr、ja-jp...
- language :(navigator.browserLanguage || navigator.language).toLowerCase()
- }
- // 如果要分渠道,也是可以的,渠道區分:?from=xx
- varFrom=(function(){
- var searchInfo = location.search.substr(1).split('&'),item,from;
- for(var i=0,len=searchInfo.length;len >1&& i<len;i++){
- item = searchInfo[i].split('=');
- if(item[0]=='from'){
- from = item[1];
- break;
- }
- }
- return from;
- })();
- // 根據不同的終端,跳轉到不同的地址
- var theUrl ='http://www.XXX.com';
- // android系統APP
- if(Terminal.platform.android){
- // 這裡區分渠道
- switch(From){
- case'baidu':
- theUrl ='你的APP:baidu定製版';
- break;
- case'google':
- theUrl ='你的APP:google定製版';
- break;
- default:
- theUrl ='你的APP:官方版'
- }
- }
- location.href = theUrl;
- </script>
- </head>
- <body>
- <!--
- -->
- </body>
- </html>