Como o uniapp implementa a verificação e atualização da versão apk do lançamento mais recente

Prefácio:

O que queremos alcançar é que, depois que o usuário entrar na página inicial do apk, compare a versão apk da máquina nativa do Android com a versão apk mais recente. 0.0), o número da versão mais recente é 102 (v1.0.2) e solicite a atualização) Para solicitar que o usuário atualize, clique no botão atualizar para baixar o apk mais recente e instalar a experiência! No momento, isso é apenas para apk (aplicativo leve do Android, porque não há certificado oficial do Android, não há como lançá-lo no mercado de aplicativos Android, mas o apk lançado também pode ser experimentado e usado no Android com serviços de interface online , clique no link de download pela primeira vez ou adicione o link de download ao código QR do forage para digitalizar o código para download, lembre-se de fazer o download com um navegador!!!)

texto:

1. Verificação e solicitação da versão da página inicial

Primeiro, depois que o uniapp pular a página de login ou a página de login de autorização, ele entrará na página inicial. Podemos escrever prompts relevantes para verificar o número da versão no 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>

2. Clique no botão atualizar para verificar a versão e baixar o apk atualizado

Isso visa saber se a versão local é a versão mais recente quando o usuário clica no botão. Se for, não fará o download da versão mais recente e solicitará que sua versão já seja a mais recente; se não for, fará o download e a instalação e atualize seu aplicativo local Android!

Você pode adicionar um botão à minha página de informações para verificar e atualizar a versão antiga, o que não é necessário no miniaplicativo WeChat:

<!-- #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 -->

Então:

<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>

3. Arquivo de implantação do Tomcat no servidor

O endereço de download do tomcat é inserido diretamente nesses dois arquivos no mesmo nível: android_smartAppV1.0.apk, smartAppversion.json (mantenha a consistência com o código anterior)

O código do arquivo json é o seguinte:

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

O texto acima é sobre como verificar se há atualizações no apk Android do uniapp! Se achar útil, pode seguir + curtir + marcar!

おすすめ

転載: blog.csdn.net/XU441520/article/details/131018446