1. 程式人生 > >掃描二維碼自動識別手機系統(Android/IOS)跳轉不同頁面

掃描二維碼自動識別手機系統(Android/IOS)跳轉不同頁面

移動網際網路發展迅速,各種APP的開發都太瘋狂了,一般稍大點兒的應用,都會準備多個版本,比如:iPhone版、iPad版、Android版,我們姑且稱之為終端適配

業務做的再大點兒的,APP還會考慮覆蓋到多個國家,比如:中文版、英文版、日文版、韓文版等,我們可稱之為APP國際化

還有更拽的,針對不同渠道(流量來源)也提供不同的版本,比如:百度版、Google版、阿里版、騰訊版,等,我們可稱之為:多渠道適配

但是對於應用提供方,一定希望入口只有一個:在二維碼瘋狂流行的年代,必然是已掃描二維碼直接下載來的最快最便捷,所以怎樣讓這張二維碼承載這麼豐富的資訊量呢?之前給PM做過好幾個這樣的二維碼,後來發現這種需求還不少,估計FEer都會遇到,所以乾脆寫成一篇文章,將解決方案(程式碼)share出來,供需要者使用!

其實所謂的解決方案,就是做一個HTML靜態頁面,所有邏輯控制都在該頁面進行,比如判斷終端、判斷語言、判斷渠道等;然後通過該HTML頁面對應的URL生成一張二維碼即可!

    一、針對“終端適配”&“APP國際化”

  1. <!DOCTYPE HTML>
  2. <htmllang="zh-CN">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>手機APP下載頁面:根據終端辨別下載地址</title>
  6. <scripttype="text/javascript">
  7. // 獲取終端的相關資訊
  8. varTerminal
    ={
  9. // 辨別移動終端型別
  10.             platform :function(){
  11. var u = navigator.userAgent, app = navigator.appVersion;
  12. return{
  13. // android終端或者uc瀏覽器
  14.                     android: u.indexOf('Android')>-1|| u.indexOf('Linux')>-1,
  15. // 是否為iPhone或者QQHD瀏覽器
  16.                     iPhone: u.indexOf('iPhone')>-1,
  17. // 是否iPad
  18.                     iPad
    : u.indexOf('iPad')>-1
  19. };
  20. }(),
  21. // 辨別移動終端的語言:zh-cn、en-us、ko-kr、ja-jp...
  22.             language :(navigator.browserLanguage || navigator.language).toLowerCase()
  23. }
  24. // 根據不同的終端,跳轉到不同的地址
  25. var theUrl ='http://www.XXX.com';
  26. if(Terminal.platform.android){
  27.             theUrl ='你的Android APP對應下載地址:apk檔案地址';
  28. }elseif(Terminal.platform.iPhone){
  29.             theUrl ='你的iPhone APP對應下載地址:APP Store地址';
  30. }elseif(Terminal.platform.iPad){
  31. // 還可以通過language,區分開多國語言版
  32. switch(Terminal.language){
  33. case'en-us':
  34.                     theUrl ='你的iPad APP(英文版)對應下載地址:APP Store地址';
  35. break;
  36. case'ko-kr':
  37.                     theUrl ='你的iPad APP(韓語版)對應下載地址:APP Store地址';
  38. break;
  39. case'ja-jp':
  40.                     theUrl ='你的iPad APP(日文版)對應下載地址:APP Store地址';
  41. break;
  42. default:
  43.                     theUrl ='你的iPad APP(中文版-預設)對應下載地址:APP Store地址';
  44. }
  45. }
  46.         location.href = theUrl;
  47. </script>
  48. </head>
  49. <body>
  50. <!--
  51.     -->
  52. </body>
  53. </html>

假設如上HTML靜態檔案對應的URL為:http://www.XXX.com/app-install/terminal-language.html

那麼就可以通過該URL生成一張二維碼,掃面該二維碼後,具體的下載地址,會由terminal-language.html自動識別並前往。

   二、針對“多渠道適配”

  1. <!DOCTYPE HTML>
  2. <htmllang="zh-CN">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>手機APP下載頁面:根據渠道辨別下載地址</title>
  6. <scripttype="text/javascript">
  7. // 如果要分渠道,也是可以的,渠道區分:?from=xx
  8. varFrom=(function(){
  9. var searchInfo = location.search.substr(1).split('&'),item,from;
  10. for(var i=0,len=searchInfo.length;len >1&& i<len;i++){
  11. item = searchInfo[i].split('=');
  12. if(item[0]=='from'){
  13. from = item[1];
  14. break;
  15. }
  16. }
  17. return from;
  18. })();
  19. // 根據不同渠道,去向不同的下載地址
  20. var theUrl ='http://www.XXX.com';
  21. switch(From){
  22. case'baidu':
  23. theUrl ='你的APP:針對 baidu 的定製版';
  24. break;
  25. case'google':
  26. theUrl ='你的APP:針對 google 的定製版';
  27. break;
  28. default:
  29. theUrl ='你的APP:官方 版';
  30. break;
  31. }
  32. location.href = theUrl;
  33. </script>
  34. </head>
  35. <body>
  36. <!--
  37. -->
  38. </body>
  39. </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。

三、這三種也可以結合起來使用,同時對終端、語言、渠道進行識別:

  1. <!DOCTYPE HTML>
  2. <htmllang="zh-CN">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>手機APP下載頁面:根據終端&渠道辨別下載地址</title>
  6. <scripttype="text/javascript">
  7. // 獲取終端的相關資訊
  8. varTerminal={
  9. // 辨別移動終端型別
  10. platform :function(){
  11. var u = navigator.userAgent, app = navigator.appVersion;
  12. return{
  13. // android終端或者uc瀏覽器
  14. android: u.indexOf('Android')>-1|| u.indexOf('Linux')>-1,
  15. // 是否為iPhone或者QQHD瀏覽器
  16. iPhone: u.indexOf('iPhone')>-1,
  17. // 是否iPad
  18. iPad: u.indexOf('iPad')>-1
  19. };
  20. }(),
  21. // 辨別移動終端的語言:zh-cn、en-us、ko-kr、ja-jp...
  22. language :(navigator.browserLanguage || navigator.language).toLowerCase()
  23. }
  24. // 如果要分渠道,也是可以的,渠道區分:?from=xx
  25. varFrom=(function(){
  26. var searchInfo = location.search.substr(1).split('&'),item,from;
  27. for(var i=0,len=searchInfo.length;len >1&& i<len;i++){
  28. item = searchInfo[i].split('=');
  29. if(item[0]=='from'){
  30. from = item[1];
  31. break;
  32. }
  33. }
  34. return from;
  35. })();
  36. // 根據不同的終端,跳轉到不同的地址
  37. var theUrl ='http://www.XXX.com';
  38. // android系統APP
  39. if(Terminal.platform.android){
  40. // 這裡區分渠道
  41. switch(From){
  42. case'baidu':
  43. theUrl ='你的APP:baidu定製版';
  44. break;
  45. case'google':
  46. theUrl ='你的APP:google定製版';
  47. break;
  48. default:
  49. theUrl ='你的APP:官方版'
  50. }
  51. }
  52. location.href = theUrl;
  53. </script>
  54. </head>
  55. <body>
  56. <!--
  57. -->
  58. </body>
  59. </html>