uniapp如何实现最新发布apk版本检查和更新

前言:

我们要实现的用户进入apk首页之后,将安卓本机的apk版本和最新的apk版本对比,如果有更高级别的版本(版本号迭代的时候要逐渐增加,比如:本地100版本号(v1.0.0),最新的是102版本号(v1.0.2),那么就提示更新)要提示用户更新,去点击更新按钮下载最新的apk并且安装体验!目前这个仅仅针对apk(安卓轻应用,由于没有正式的安卓证书,没办法发布到安卓应用市场,但是发布的apk配合线上的接口服务也是可以在安卓上体验和使用的,首次点击下载链接或者将下载链接加入到草料二维码中扫码下载,记得用浏览器下载!!!)

正文:

一、首页版本检查并提示

首先uniapp跳过登录页面或者授权登录页面之后,就会进入首页,我们可以在App.vue中写入要检查版本号的相关提示操作。

<script>

    export default {
        // 此处globalData为了演示其作用,不是uView框架的一部分
        data() {
            return {
                version: 100, //注意你在uniapp中打包(原生app-云打包)时候的初始版本号
            }
        },

        methods: {
            
            androidCheckUpdate() {
                let _this = this;
                uni.request({
                    url: 'https://errong.com/smartAppversion.json?_t='+ new Date().getTime(), //这个是把你apk部署外网服务器的tomcat能访问下载的地址,具体你根据自己的来,然后smartAppversion.json是存放你最新版本好的下载地址啥的和apk关联起来,下面我会展示出代码
                    data: {},
                    header: {},
                    success: (res) => {
                        if (res.data.code === 0) {
                            if (res.data.version > _this.version) { // 如果最新版本大于现在已经安装的App的版本
                                // 新建下载任务
                                var dtask = plus.downloader.createDownload(res.data.url, {
                                    force: true
                                }, function(d, status) {
                                    // 下载完成
                                    if (status == 200) {
                                        uni.showModal({
                                            title: '下载完成,即将安装',
                                            showCancel: false,
                                            success: () => {
                                                // 由于install只能安装本地的地址,所以先把下载的地址在本地找到,再调用install
                                                plus.runtime.install(plus.io
                                                    .convertLocalFilesSystemURL(d
                                                        .filename), {},
                                                    function() {
                                                        console.log('success');
                                                        plus.runtime
                                                            .restart(); // 安装成功后重启
                                                    },
                                                    function(error) {
                                                        console.log(error.message);
                                                        uni.showToast({
                                                            title: "安装失败",
                                                            duration: 1500
                                                        })
                                                    })
                                            }
                                        })
                                    } else {
                                        uni.showToast({
                                            title: '更新失败',
                                            duration: 1500
                                        })
                                    }
                                })
                                dtask.start();
                            } else {
                                //如果是最新版本了,进入首页就会提示一下,建议屏蔽掉
                                uni.showModal({
                                     title: '当前已是最新版本',
                                     showCancel: false
                                })
                            }
                        }
                    }
                })
            }
        },

        onLaunch() {
            // #ifdef APP-PLUS
            plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
                this.version = wgtinfo.versionCode;
            })
            this.androidCheckUpdate(); // app中检测版本更新
            // #endif
            // 1.1.0版本之前关于http拦截器代码,已平滑移动到/common/http.interceptor.js中
            // 注意,需要在/main.js中实例化Vue之后引入如下(详见文档说明):
            // import httpInterceptor from '@/common/http.interceptor.js'
            // Vue.use(httpInterceptor, app)
            // process.env.VUE_APP_PLATFORM 为通过js判断平台名称的方法,结果分别如下:
            /**
             * h5,app-plus(nvue下也为app-plus),mp-weixin,mp-alipay......
             */
        }
    }
</script>

二、点击更新按钮检查版本和下载更新apk

这个针对的是用户点击按钮可以实现本地版本是不是最新的版本,如果是就不会下载最新的版本,并提示您的版本已经是最新的;如果不是就会下载安装更新你安卓本地的应用!

你可以在我的信息页面中加入一个按钮,用于检查更新旧版本,微信小程序中没啥必要:

<!-- #ifdef APP-PLUS -->
    <div class="section" @click="handleCheckVersion">
        <div>
            <u-icon name="checkmark-circle-fill" size="20" style="margin-right: 5px;"></u-icon>检查更新
        </div>
        <span><u-loading v-if="isCheckVersion" mode="flower"></u-loading></span>
    </div>
<!-- #endif -->

然后:

<script>
    export default {
        data() {
            return {
                innerVer: null,
                version: null,
                isCheckVersion: false,
            }
        },
        methods: {
            // 检查版本更新
            handleCheckVersion() {
                let _this = this;
                // #ifdef APP-PLUS 
                _this.isCheckVersion = true;
                plus.screen.lockOrientation('portrait-primary') // 竖屏锁定
                plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
                    _this.innerVer = widgetInfo.version;
                    _this.version = widgetInfo.versionCode;
                    uni.request({
                        url: 'https://errong.com/smartAppversion.json?_t='+ new Date().getTime(),  //版本检测
                        data: {},
                        header: {},
                        success: (result) => {
                            if (result.data.code === 0) {
                                setTimeout(() => {
                                    _this.isCheckVersion = false;
                                }, 1000);
                                console.log(result.data.version,_this.version);
                                if (result.data.version - _this.version > 0) { // 如果最新版本大于现在已经安装的App的版本
                                    uni.showModal({
                                        title: "更新提示",
                                        content: "发现新版本,请确认下载更新?",
                                        success: (res) => {
                                            if (res.confirm) {
                                                uni.showLoading({
                                                    title: '更新中...'
                                                });
                                                uni.downloadFile({
                                                    url: result.data.url,
                                                    success: (downloadResult) => {
                                                        uni.hideLoading();
                                                        if (downloadResult.statusCode === 200) {
                                                            plus.runtime.install(downloadResult.tempFilePath, {
                                                                force: true
                                                            }, function() {
                                                                console.log('App安装成功!');
                                                                uni.showToast('App安装成功!', 'success');
                                                                plus.runtime.restart();
                                                            }, function(e) {
                                                                console.log('App安装失败!');
                                                            })
                                                        }
                                                    }
                                                });
                                            }
                                        }
                                    })
                                } else {
                                    _this.$showToast("当前已是最新版本V" + _this.innerVer, "none");
                                }
                            }
                        }
                    })
                })
                // #endif
            },
        },
    }
</script>

三、服务器中tomcat部署文件

tomcat下载地址同级别直接丢入这两个文件:android_smartAppV1.0.apk、smartAppversion.json(和前面代码注意保持一致)

json文件的代码如下:

{
    "code": 0,
    "msg": "success",
    "version": 206,
    "url": "https://errong.com/android_smartAppV1.0.apk"
}

以上就是uniapp的安卓apk中检查更新的全部了!感觉有用的话可以点个关注+点赞+收藏!

猜你喜欢

转载自blog.csdn.net/XU441520/article/details/131018446