当前位置:   article > 正文

iOS和Android手机浏览器链接打开app store或应用市场下载软件讲解_通过链接打开应用商店下载app

通过链接打开应用商店下载app

引言

当开发一个app出来后,通过分享引流用户去打开/下载该app软件,不同手机下载的地方不一样,比如:ios需要到苹果商店去下载,Android手机需要到各个不同的应用商店去下载(华为手机需要到华为应用商店下载,vivo手机需要到vivo手机的应用商店下载,oppo需到oppo的应用商店去下载),该怎么处理呢?

一.上架app

开发人员开发好app后,打包生成一个自己的apk(test.apk),然后把该apk上架到签约的手机应用商店

二.手机浏览器链接打开appstore或应用市场下载软件

用户通过分享链接,在手机浏览器中打开网页,网页上有两个按钮:打开app,下载app
当点击 '打开app'按钮时,拉起手机上安装的该app
当点击'下载app'按钮时,拉起对应手机的应用商店,下载该app

代码如下:

分享主页

  1. <?php
  2. use yii\helpers\Url;
  3. $this->title = '分享推广';
  4. ?>
  5. <div class="common">
  6. <div class="share-center">
  7. <div class="share-open">
  8. <a href="javascript:;" target="_blank" id="openapp">
  9. <img class="share-open-btn" src="/img/wap/btn_open.png" alt="打开app">
  10. </a>
  11. </div>
  12. <div class="share-dl">
  13. <a href="javascript:;" target="_blank" class="share-dl-apk">
  14. <img class="share-open-btn" src="/img/wap/btn_dl.png" alt="下载app">
  15. </a>
  16. </div>
  17. </div>
  18. </div>
  19. <script type="text/javascript">
  20. <?php $this->beginBlock('js_end') ?>
  21. $(function () {
  22. if (isIos()) {
  23. if (isWeibo() || is_weixin()) {//微博微信打不开APP,(所以要做区分,这里区分和在后面的fn方法中区分都行)直接将跳转地址设置为中转页
  24. //之所以这里区分出微信和微博,而不是直接通过延时任务的location.href直接跳转到App Store,
  25. //是因为跳转到中转页会提示用户在浏览器打开,可以打开指定页面
  26. $("#openapp").attr("href", "<?= $url; ?>"); //url中转页地址,后台传入
  27. } else {
  28. $("#openapp").attr("href", createUrl("dsblock://"+iosId)); //iosId
  29. }
  30. } else if (navigator.userAgent.match(/Android/i) != null) { // 安卓
  31. //判断是什么手机,并跳转到对应手机的应用商店
  32. type = initMobileType()
  33.                 //根据返回的手机类型,获取androidId
  34.                 if (type == "huawei") {
  35.                     androidId = 'com.xxx.app.HUAWEI'
  36.                 } else if (type == "oppo") {
  37. androidId = 'com.xxx.app.OPPO'
  38. }
  39. url = getMobileUrlByType(type, androidId)
  40. $(".share-dl-apk").attr("href", createUrl(url))
  41.                 //打开app: baidu://baiduopenwith app内核
  42. $("#openapp").attr("href", createUrl("baidu://baiduopenwith"));
  43. } else { //其他手机
  44. //下载页面:下载公司自己渠道的app(一般apk放在阿里云/腾讯云的对象存储中)
  45. $("#share-dl-apk").attr("href", "<?= $apk_url; ?>"); //阿里云/腾讯云的对象存储中上传的apk
  46. }
  47. });
  48. //通过不同安卓手机获取不同的跳转链接
  49. function getMobileUrlByType(type,androidId) {
  50. // androidId 如:com.xxx.app
  51. var url = '';
  52. if (type == 'oppo') { //oppo
  53. url = 'oppomarket://details?packagename=' + androidId
  54. } else if (type == 'huawei') { // huawei
  55. url = 'appmarket://details?id=' + androidId
  56. } else if (type == 'xiaomi') { // xiaomi
  57. url = 'mimarket://details?id=' + androidId
  58. } else if (type == 'vivo') { // vivo
  59. url = 'vivomarket://details?id=' + androidId
  60. } else if (type =='samsung') { // samsung
  61. url = 'samsungapps://ProductDetail/' + androidId
  62. } else { // other
  63. url = 'market://details?id=' + androidId;
  64. }
  65. return url;
  66. }
  67. //判断手机类型
  68. function initMobileType() {
  69. var sUserAgent = navigator.userAgent.toLowerCase();
  70. var isIphone = sUserAgent.match(/iphone/i) == "iphone";
  71. var isHuawei = sUserAgent.match(/huawei/i) == "huawei";
  72. var isHonor = sUserAgent.match(/honor/i) == "honor";
  73. var isOppo = sUserAgent.match(/oppo/i) == "oppo";
  74. var isOppoR15 = sUserAgent.match(/pacm00/i) == "pacm00";
  75. var isVivo = sUserAgent.match(/vivo/i) == "vivo";
  76. var isXiaomi = sUserAgent.match(/mi\s/i) == "mi ";
  77. var isXiaomi2s = sUserAgent.match(/mix\s/i) == "mix ";
  78. var isRedmi = sUserAgent.match(/redmi/i) == "redmi";
  79. var isSamsung = sUserAgent.match(/sm-/i) == "sm-";
  80. if (isIphone) {
  81. return 'iphone';
  82. } else if (isHuawei || isHonor) {
  83. return 'huawei';
  84. } else if (isOppo || isOppoR15) {
  85. return 'oppo';
  86. } else if (isVivo) {
  87. return 'vivo';
  88. } else if (isXiaomi || isRedmi || isXiaomi2s) {
  89. return 'xiaomi';
  90. } else if (isSamsung) {
  91. return 'samsung';
  92. } else {
  93. return 'default';
  94. }
  95. }
  96. //涉及到的相关方法
  97. function is_weixin() {
  98. var ua = navigator.userAgent.toLowerCase();
  99. if (ua.match(/MicroMessenger/i) == "micromessenger") {
  100. return true;
  101. } else {
  102. return false;
  103. }
  104. }
  105. function is_qqbrowser() {
  106. var ua = navigator.userAgent.toLowerCase();
  107. if (/mqqbrowser|qq/i.test(ua)) {
  108. return true;
  109. } else {
  110. return false;
  111. }
  112. }
  113. function isWeibo() {
  114. var ua = window.navigator.userAgent;
  115. return !!/__weibo__/.exec(ua);
  116. }
  117. function isIos() {
  118. return navigator.userAgent.match(/(iPhone|iPad|iPod|iOS)/i) != null;
  119. }
  120. function isSafari() {
  121. var ua = window.navigator.userAgent;
  122. return !!/Version[|\/]([\w.]+)(\s\w.+)?\s?Safari|like\sGecko\)\sMobile\/\w{3,}$/.exec(ua);
  123. }
  124. function createUrl(url, obj) {//拼接跳转链接及参数生成新的链接
  125. let params = [];
  126. for (let p in obj) {
  127. if (obj[p] != null && obj[p] != '') {
  128. params.push(p + '=' + obj[p])
  129. }
  130. }
  131. return url + '?' + params.join("&");
  132. }
  133. <?php $this->endBlock() ?>
  134. </script>
  135. <?php $this->registerJs($this->blocks['js_end'], \yii\web\View::POS_END); ?>

中转页

  1. <?php
  2. use yii\helpers\Url;
  3. $this->registerJsFile('/js/jquery-1.4.1.min.js', ['depends' => ['frontend\assets\WapAppAsset'], 'position' => $this::POS_HEAD]);
  4. $this->registerJsFile('/js/clipboard-1.7.1.min.js', ['depends' => ['frontend\assets\WapAppAsset'], 'position' => $this::POS_HEAD]);
  5. $this->title = '分享推广 | 下载';
  6. ?>
  7. <style>
  8. .share-top {
  9. float: left;
  10. width: 400px;
  11. height: 400px;
  12. text-align: center;
  13. }
  14. .share-center {
  15. margin-left: 10%;
  16. height: 750px;
  17. }
  18. .share-btn {
  19. float: left;
  20. width: 40%;
  21. height: 8%;
  22. position: relative;
  23. }
  24. </style>
  25. <div class="common">
  26. <div class="share-top" id="tip">
  27. 已安装,在浏览器打开
  28. </div>
  29. <div class="share-center">
  30. <div class="share-dl">
  31. <a class="open-button download-button" id="install">
  32. <img src="/img/wap/btn_dl.png" class="share-btn" alt="下载app">
  33. </a>
  34. </div>
  35. <div class="share-open">
  36. <a class="open-button" id="open">
  37. <img src="/img/wap/btn_open.png" class="share-btn" alt="打开app">
  38. </a>
  39. </div>
  40. </div>
  41. </div>
  42. <script type="text/javascript">
  43. <?php $this->beginBlock('js_end') ?>
  44. $(function () {
  45. if (is_weixin() || isWeibo()) {
  46. showDiv("#tip", true);
  47. showDiv("#open", false);
  48. } else {
  49. showDiv("#tip", false);
  50. showDiv("#open", true);
  51. }
  52. if (isIos()) {//iOS
  53. $("#open").attr("href", "dsblockchain://" );
  54. $("#install").attr("href", "App Store推广链接");
  55. } else {//安卓
  56. //打开app:baidu://baiduopenwith app内核
  57. $("#open").attr("href", "baidu://baiduopenwith");
  58. if (is_weixin()) {//微信无法下载,打开应用宝推广页
  59. $("#install").attr("href", "应用宝推广链接");
  60. } else {
  61.     //判断是什么手机,并跳转到对应手机的应用商店
  62.     type = initMobileType()
  63.                 //根据返回的手机类型,获取androidId
  64. if (type == "huawei") {
  65. androidId = 'com.xxx.app.HUAWEI'
  66. } else if (type == "oppo") {
  67. androidId = 'com.xxx.app.OPPO'
  68. }
  69. url = getMobileUrlByType(type, androidId)
  70.     if (!url) {
  71.     url = "<?= $apk_url; ?>"; //阿里云/腾讯云的对象存储中上传的apk
  72.     }
  73. $("#install").attr("href", url);
  74. }
  75. }
  76. });
  77. //通过不同安卓手机获取不同的跳转链接
  78. function getMobileUrlByType(type) {
  79. // androidId 如:com.xxx.app
  80. var url = '';
  81. if (type == 'oppo') { //oppo
  82. url = 'oppomarket://details?packagename='
  83. } else if (type == 'huawei') { // huawei
  84. url = 'appmarket://details?id=com.bzyl.mahjongtown.HUAWEI'
  85. } else if (type == 'xiaomi') { // xiaomi
  86. url = 'mimarket://details?id='
  87. } else if (type == 'vivo') { // vivo
  88. url = 'vivomarket://details?id='
  89. } else if (type =='samsung') { // samsung
  90. url = 'samsungapps://ProductDetail/'
  91. } else { // other
  92. url = '';
  93. }
  94. return url;
  95. }
  96. //判断手机类型
  97. function initMobileType() {
  98. var sUserAgent = navigator.userAgent.toLowerCase();
  99. var isIphone = sUserAgent.match(/iphone/i) == "iphone";
  100. var isHuawei = sUserAgent.match(/huawei/i) == "huawei";
  101. var isHonor = sUserAgent.match(/honor/i) == "honor";
  102. var isOppo = sUserAgent.match(/oppo/i) == "oppo";
  103. var isOppoR15 = sUserAgent.match(/pacm00/i) == "pacm00";
  104. var isVivo = sUserAgent.match(/vivo/i) == "vivo";
  105. var isXiaomi = sUserAgent.match(/mi\s/i) == "mi ";
  106. var isXiaomi2s = sUserAgent.match(/mix\s/i) == "mix ";
  107. var isRedmi = sUserAgent.match(/redmi/i) == "redmi";
  108. var isSamsung = sUserAgent.match(/sm-/i) == "sm-";
  109. if (isIphone) {
  110. return 'iphone';
  111. } else if (isHuawei || isHonor) {
  112. return 'huawei';
  113. } else if (isOppo || isOppoR15) {
  114. return 'oppo';
  115. } else if (isVivo) {
  116. return 'vivo';
  117. } else if (isXiaomi || isRedmi || isXiaomi2s) {
  118. return 'xiaomi';
  119. } else if (isSamsung) {
  120. return 'samsung';
  121. } else {
  122. return 'default';
  123. }
  124. }
  125. function createUrl(url, obj) {//拼接跳转链接及参数生成新的链接
  126. let params = [];
  127. for (let p in obj) {
  128. if (obj[p] != null && obj[p] != '') {
  129. params.push(p + '=' + obj[p])
  130. }
  131. }
  132. return url + '?' + params.join("&");
  133. }
  134. function isIos() {
  135. return navigator.userAgent.match(/(iPhone|iPad|iPod|iOS)/i) != null;
  136. }
  137. //涉及到的相关方法
  138. function is_weixin() {
  139. var ua = navigator.userAgent.toLowerCase();
  140. if (ua.match(/MicroMessenger/i) == "micromessenger") {
  141. return true;
  142. } else {
  143. return false;
  144. }
  145. }
  146. function isWeibo() {
  147. var ua = window.navigator.userAgent;
  148. return !!/__weibo__/.exec(ua);
  149. }
  150. function showDiv(divName, isShow) {
  151. if (isShow) {
  152. $(divName).show();
  153. } else {
  154. $(divName).hide();
  155. }
  156. }
  157. <?php $this->endBlock() ?>
  158. </script>
  159. <?php $this->registerJs($this->blocks['js_end'], \yii\web\View::POS_END); ?>
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号