uni-app安卓端强制更新apk包

前提概要

  • uni-app+vue3项目开发安卓端
  • 不使用uni自带的uni-upgrade-center,因为自带的免费地址只有30天。而且我是前端不想了解公司的服务器配置。
  • 使用uni-ui组件!我感觉还是u-view好用。

先脑袋想一下逻辑

  1. 判断,我现在的版本比较低需要更新。
  2. 显示,强制你更新apk
  3. 下载,下载apk
  4. 安装,安装apk

具体代码

1.判断,我现在的版本比较低需要更新。

js 复制代码
// #ifdef APP-PLUS
const {
    versionCode//获取当前apk的版本,当前的apk在manifest.json中配置的:具体如下图《应用版本》
} = plus.runtime;
uni.request({
    url: `/system/user/getAPPNewVersionVO/1`,
    success({
        data
    }) {//网络接口获取,最新的apk
        if (versionCode < parseInt(data.data.version)) {
            show.value = true//显示强制更新弹出框
            info.value = data.data
        }
    }
})
// #endif

2.显示,强制你更新apk

html 复制代码
<template>
    <uni-popup ref="popup" border-radius="18rpx" :is-mask-click="false">
            <view class="update-pop">
                    <view class="update-pop-content">
                            <view class="update-pop-versions">发现新版本<text
                                            style="font-size: 10.55rpx;padding-left: 7.5rpx;">V{{info.versionNum}}</text></view>
                            <view style="height:15rpx"></view>
                            <scroll-view class="versions-text" scroll-y>
                                    <text>{{info.releaseNote}}</text>
                            </scroll-view>
                    </view>
                    <image src="@/static/update-pop/r-img.png" mode="widthFix" class="r-img"></image>
                    <progress v-if="percent>0" style="margin-top: 18rpx;" :percent="percent" activeColor="#10AEFF" stroke-width="10" show-info
                            border-radius="5" />
                    <view class="update-btn" v-else @click="downLoadApk">立即更新</view>
            </view>
    </uni-popup>
</template>
<script setup>
    import {
        ref,
        watch,
        watchEffect
    } from 'vue'
    const show = ref(false)
    const popup = ref(null)
    const info = ref({})
    const percent = ref(0)
    watchEffect(() => {
        if (show.value) {
            popup.value?.open()
        } else {
            popup.value?.close()
        }
    })
</script>

3.下载,下载apk

js 复制代码
function downLoadFail() {
    uni.showModal({
        title: '下载失败',
        content: '是否重新下载:',
        success: (res) => {
            if (res.confirm) {
                downLoad();
            }
        }
    });
}

function downLoadApk() {
    //官方注释:下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。
    //fixme:‌**Android平台**‌:临时文件通常存储在设备的内部存储中,
    //具体路径为`/data/data/<应用包名>/cache`。这些文件在应用卸载后会被清除‌
    let downloadTask = uni.downloadFile({
        url: 'https://#%#@%@&#^%&#^@^#@&#/app.apk',
        success: (res) => {
            percent.value = 1
            if (res.statusCode == 200) {
                // #ifdef APP-PLUS
                uni.openDocument({//fixme:关注!4.安装,安装apk
                    filePath: res.tempFilePath,
                });
                // #endif
            } else {
                this.downLoadFail();
            }
        },
        fail: (res) => {
            console.log('失败!')
            this.downLoadFail();
        }
    })

    downloadTask.onProgressUpdate((res) => {//进度条
        if (percent.value != res.progress) {
            percent.value = parseInt(res.progress);
        }
    });
}

实现的样式

注意

好像并不能写在APP.vue中,不知道为啥!能写的话给我看看啊!

相关推荐
雪隐10 小时前
个人电脑玩AI-13让5060 Ti给你打工——我用 0.9B 小模型终结了"谁来记会议纪要"这个世纪难题
前端·人工智能·后端
橘子星10 小时前
我一个前端切图仔,凭什么能在浏览器里跑大模型?
前端·javascript·前端框架
70asunflower10 小时前
初学者理解 Web 工作原理(完全教程)
前端
爱勇宝10 小时前
《道德经》第 7 章:真正厉害的领导者,不抢主角
前端·后端·程序员
观远数据10 小时前
Excel到数据资产池:文件数据入湖的治理规范怎么建
前端·javascript·excel
CoderWeen10 小时前
我写了个能一步步点着看的 Dijkstra 可视化项目(Vue3 + Leaflet + Generator)
前端·javascript·vue.js
两点王爷11 小时前
一个快速加载面和多面数据的html测试页面(可以导出geojson数据文件)
前端·html·gis
热爱前端的小张11 小时前
第四章 接口和类型兼容性
前端
hunterandroid11 小时前
[鸿蒙从零到一] HarmonyOS 资源管理与多语言适配实战
前端
用户693717500138411 小时前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端