手机下载APP (uniapp/vue)

一、uniapp

javascript 复制代码
<template>
  <view class="content">
    <view class="appName">{{ formData.appName }}</view>
    <view class="appInfo">{{ formData.appInfo }}</view>
    <image class="logo" :src="formData.icon"></image>
    <!-- <view class="text-area">
      <text class="title">{{ formData.appName }}</text>
    </view> -->

    <view class="download_button" @click="downloadApp('ios')">
      <view class="download_box"
        ><image
          src="/static/icon/ios.png"
          style="margin: 0 10px; width: 25px; height: 25px"
          mode="aspectFill"
        ></image>
        iPhone 下载
      </view>
    </view>
    <view class="download_button" @click="downloadApp('android')">
      <view class="download_box"
        ><image
          style="margin: 0 10px; width: 25px; height: 25px"
          src="/static/icon/android.png"
          mode="aspectFill"
        ></image>
        安卓 下载
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      title: "Hello",
      platform: null,
      formData: {},
      formList: [],
    };
  },
  onLoad(options) {
    this.getPlatform();
    if (options.params) {
      const params = JSON.parse(decodeURIComponent(options.params));
      // 现在 params 变量包含了您传递的参数对象
      this.formData = params;
      this.formList = JSON.parse(JSON.stringify(params));
    }
    this.formData.come = 0;
    this.init();
  },
  methods: {
    //判断是否微信登陆
    isWeiXinLogin() {
      var ua = window.navigator.userAgent.toLowerCase();
      console.log(ua); //mozilla/5.0 (iphone; cpu iphone os 9_1 like mac os x) applewebkit/601.1.46 (khtml, like gecko)version/9.0 mobile/13b143 safari/601.1
      if (ua.match(/MicroMessenger/i) == "micromessenger") {
        return true;
      } else {
        return false;
      }
    },

    downloadApp(platform) {
        if (this.isWeiXinLogin()) {
          uni.showToast({
            icon: "none",
            title: "点击右上角 ··· 在浏览器中打开下载",
            duration: 3000,
          });
          return;
        }

      if (platform == "ios") {
        var appleId = "appid";
       
        plus.runtime.launchApplication({
          action: `itms-apps://itunes.apple.com/cn/app/id${appleId}`,
        });
      } else if (platform == "android") {
        var downloadUrl = `apk下载地址`;
        var urlStr = downloadUrl;
        // #ifdef APP-PLUS
        uni.showLoading({ title: "下载中,请稍后..." });
        uni.downloadFile({
          url: downloadUrl,
          success: (res) => {
            if (res.statusCode === 200) {
              uni.hideLoading();
              uni.showToast({ title: "下载成功", icon: "success" });
              uni.saveFile({
                tempFilePath: res.tempFilePath,
                success: function (res) {
                  uni.openDocument({
                    filePath: res.savedFilePath,
                    success: function (res) {
                      console.log(res, "打开安装包");
                    },
                  });
                },
                fail: (err) => {
                  console.log(err, "打开安装包-失败");
                },
              });
            }
          },
          fail: (err) => {
            console.log(err, "下载失败");
            uni.hideLoading();
            uni.showToast({
              title: "下载失败,请检查网络",
              icon: "none",
              duration: 1500,
            });
          },
        });
        return;
        // #endif

        // #ifdef H5
        window.open(urlStr);
        // #endif
      }
    },
    init() {
      if (this.formData) {
      
		 
		this.formData.appName = "XXX";
		this.formData.icon = "/static/icon/app1.png";
		this.formData.appInfo =
		  "xxx是一款....";
		this.formData.apkUrl =
		  "https://a.app.qq.com/o/simple.jsp?pkgname=XXX"; // 应用宝
		 
		 }
    },
    getPlatform() {
      var that = this;
      uni.getSystemInfo({
        success: function (res) {
          console.log(res.platform);
          that.platform = res.platform;

          // Vue.prototype.iosHidden = true;
        },
      });
    },
  },
};
</script>

<style>
.content {
  width: 100vw;
  height: 100vh;
  padding: 40px 20px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  box-sizing: border-box;
  /* justify-content: center;  */
}

.logo {
  height: 200rpx;
  width: 200rpx;
  margin-top: 160rpx;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 80rpx;
}

.text-area {
  display: flex;
  justify-content: center;
}

.title {
  font-size: 36rpx;
  color: #8f8f94;
}

.appName {
  text-align: center;
  font-size: 20px;
  margin-bottom: 20px;
}
.appInfo {
  font-size: 14px;
  line-height: 20px;
  text-align: center;
}
.download_button {
  width: 180px;
  line-height: 45px;
  margin-bottom: 20px;
  background-color: #3ab3ae;
  color: #fff;
  border-radius: 45px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.download_box {
  display: flex;
  align-items: center;
  image {
  }
  /* justify-content: space-around; */
}
</style>

二、原生js 引入vue.js

javascript 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>APP</title>
    <script src="./js/vue.js"></script>

    <link rel="stylesheet" href="./css/element-ui.css">
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>

    <script>
        var viewWidth = window.screen.width;
        if (viewWidth < 768) {
            //document.write('<meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1.0, maximum-scale=1, user-scalable=no, minimal-ui">'); 
        } else {
            document.write('<style>@media screen and (min-width: 768px) and (max-width: 1199px) {html {zoom: 0.8;}}</style>');
        } 
    </script>

</head>
<style>
    html,
    body {
        /* width: 100vw;
        max-height: 100vh; */
        /* overflow: hidden; */
        touch-action: manipulation;
    }

    .open {
        /* position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        top: 0; */
    }

    .content {
        /* width: 100%; */
        /* height: 100vh; */
        padding: 40px 20px 0;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        align-items: center;
        box-sizing: border-box;
        /* justify-content: center;  */
    }

    .logo {
        height: 20rem;
        width: 20rem;
        margin-top: 10rem;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 10rem;
    }

    .text-area {
        display: flex;
        justify-content: center;
    }

    .title {
        font-size: 8rem;
        color: #8f8f94;
    }

    .appName {
        text-align: center;
        font-size: 5rem;
        margin-bottom: 2rem;
        margin-top: 4rem;
    }

    .appInfo {
        font-size: 2.5rem;
        line-height: 4rem;
        text-align: center;
    }

    .download_button {
        width: 30rem;
        line-height: 6rem;
        margin-top: 6rem;
        margin-bottom: 4rem;
        background-color: #3ab3ae;
        color: #fff;
        border-radius: 4.5rem;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .download_box {
        display: flex;
        align-items: center;
        font-size: 2.5rem;



        /* justify-content: space-around; */
    }

    .el-dialog {
        background-color: transparent !important;
        box-shadow: none !important;
        -webkit-box-shadow: none !important;
        margin-top: 5vh !important;
        margin: 0 50px !important;
        display: flex !important;
        align-items: flex-end !important;
        justify-content: flex-end !important;
        width: auto !important;
    }
</style>

<body>
    <div id="app">

        <el-dialog title="" :visible.sync="isWeiXin" :show-close="false" :close-on-click-modal="false"
            style="background-color: transparent !important;">
            <img src="./images/icon/open.png" alt="" class="open">
        </el-dialog>


        <div class="content" :style="isWeiXin?'opacity:0.2;':'opacity:1;'">

            <div class="appName">{{ formData.appName }}</div>
            <div class="appInfo">{{ formData.appInfo }}</div>
            <img class="logo" :src="formData.icon"></img>
          

            <div class="download_button" v-if="platform=='ios'" @click="downloadApp('ios')">
                <div class="download_box">
                    立即下载
                
                </div>
            </div>
            <div class="download_button" v-if="platform=='android'" @click="downloadApp('android')">
                <div class="download_box">
                    立即下载
                   
                </div>
            </div>
            <div class="download_button" v-if="platform=='pc'" @click="downloadApp('pc')">
                <div class="download_box">
                    立即下载
               
                </div>
            </div>
        </div>
    </div>
    <script src="./js/jquery.min.js"></script>
    <script>
        document.addEventListener('touchstart', function (event) {
            // 当触摸点超过1个时,你阻止了默认行为。
            // 只有在用户试图进行缩放(通常需要两个触摸点)或其他需要多点触控的操作时,才会阻止默认行为。单点触控的操作,如点击、滑动等,不会被影响。
            if (event.touches.length > 1) {
                event.preventDefault();
            }
        }, { passive: false });

        var app = new Vue({
            el: '#app',
            data: {
                title: "Hello",
                platform: null,
                isWeiXin: false,
                formData: {},
                formList: [],
            }, created(options) {
                this.isWeiXinLogin();
                this.getPlatform();

                this.formData.come = 2;//0 疯子读书 1吴门医述 2众秒之门
                this.init();
            },
            methods: {
                //判断是否微信登陆
                isWeiXinLogin() {

                    var ua = window.navigator.userAgent.toLowerCase();
                    // 通过正则表达式匹配ua中是否含有MicroMessenger字符串
                    if (ua.match(/MicroMessenger/i) == 'micromessenger') {
                        this.isWeiXin = true;
                    } else {
                        this.isWeiXin = false;
                    }


                },
                async downloadApp(platform) {

                   
                    if (platform == "ios") {

                      
                        var appStoreUrl = "itms-apps://itunes.apple.com/cn/app/id" + this.formData.appleId;

                        // 跳转到App Store
                        window.location.href = appStoreUrl;

                    } else if (platform == "android") {

                        var src = 'apk下载地址';
                        if (src != '') {
                            var form = document.createElement('form');
                            form.action = src;



                            document.getElementsByTagName('body')[0].appendChild(form);
                            form.submit();
                        } else {
                            window.location.href = this.formData.apkUrl
                        }


                    }

                    else if (platform == "pc") {
                        console.log('platform at line 269:', platform)

                        var src = 'apk下载地址';

                        window.open(src);
                    }
                },
                init() {
                    if (this.formData) {
                        this.formData.appName = "XXX";
		this.formData.icon = "/static/icon/app1.png";
		this.formData.appInfo =
		  "xxx是一款....";
		this.formData.apkUrl =
		  "https://a.app.qq.com/o/simple.jsp?pkgname=XXX"; // 应用宝
		    }
                },
                getPlatform() {
                    var that = this;
                    const userAgent = navigator.userAgent;

                    if (userAgent.match(/Android/i)) {
                        that.platform = 'android'
                    } else if (userAgent.match(/iPhone/i)) {
                        that.platform = 'ios'
                    }
                    if (!window.navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)) {
                        console.log('pc')
                        that.platform = 'pc'
                    }
                   
                },
            },
        });
    </script>
</body>

</html>
相关推荐
ggdpzhk2 小时前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
活宝小娜6 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点6 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow6 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o6 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
Random_index6 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
刚刚好ā7 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
会发光的猪。9 小时前
css使用弹性盒,让每个子元素平均等分父元素的4/1大小
前端·javascript·vue.js
天下代码客10 小时前
【vue】vue中.sync修饰符如何使用--详细代码对比
前端·javascript·vue.js
周全全10 小时前
Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现
java·vue.js·spring boot·安全·php