uniapp整包更新

原创
06/28 13:43
阅读数 515

uniapp整包更新

更新时间:2020-06-28 13:42

一.需求场景

App用户想在系统发布新版本之后,自动更新到最新的版本.

二.解决方案

1.解决思路

1.1用户在进入app时,提示用户更新到最新版本.

1.2android用户确定更新到最新版,则自动下载最版本的安装包;

1.3android用户下载完最新的安装包之后,跳转到安装界面;

1.4iOS用户确定更新到最新版本,则跳转到App Store下载更新页面;

2.修改App.vue中的代码

2.1在onShow方法中添加如下代码:

    // #ifdef APP-PLUS
    updateApp(this.$api.HOST, this.$api.UPDATEDAPP);
    // #endif

说明:

1.这里需要用到条件编译,因为只有app版本才会有自动更新的功能.

2.调用的方法传入两个参数,第一个是主机地址,第二个是更新接口,这两个参数可以合成一个.

2.2在<script></script>添加app更新方法和app下载方法

更新方法:

    /**
     * Title: 更新app
     * Description: 更新,下载新版本app
     * Param: 无
     * Return: 无
     */
    function updateApp(HOST, URL) {
        let oldVersion = plus.runtime.version;
        plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
            uni.request({
                url: HOST + URL,
                success(res) {
                    let newVersion = res.data.data.version;
                    if (newVersion > oldVersion) {
                        if (plus.os.name == "Android") {
                            uni.showModal({
                                title: "温馨提示",
                                content: "检测到新版本,是否更新?",
                                confirmText: "立即更新",
                                cancelText: "下次再说",
                                success(res) {
                                    if (res.confirm == true) {
                                        downloadApp(HOST);
                                    }
                                }
                            });
                        } else {
                            uni.showToast({
                                title: "新版本已发布,请到App Store下载最新版",
                                icon: "none",
                                duration: 3000
                            });
                        }
                    }
                }
            });
        });
    }

下载方法:

    /**
     * Title: 下载app
     * Description: 更新,下载新版本app
     * Param: 无
     * Return: 无
     */
    function downloadApp(HOST) {
        uni.showLoading({
            title: "正在下载中,预计1-3分钟,请稍后..."
        });
        const downloadTask = uni.downloadFile({
            url: HOST + "apk/e10adc3949ba59abbe56e057f20f883e.apk",
            success(res) {
                uni.hideLoading();
                uni.showToast({
                    title: "下载完成"
                });
                setTimeout(function() {
                    plus.runtime.openFile(
                        res.tempFilePath
                    );
                }, 2000);
            }
        });
    }

说明:

1.更新方法和下载方法都要放在条件编译中,// #ifdef APP-PLUS  // #endif.

2.这里的iOS仅给出了更新提示,可以根据自己的需要修改成跳转到App Store商店的地址.

3.这里之所以使用的uni.showLoading的进度提示,是因为调用h5+的原生进度条真机实测过于卡顿,效果很差.

以上就是uniapp整包更新的解决方案.

 

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部