+
95
-

回答

uniapp更新有两种

整包更新,即常规的整个App安装包重新下载安装。

资源热更新,只对app里面的js等前端代码进行更新,无需重新安装。

整包更新就是启动时请求后台更新接口,将本APP的版本号发送给后台,后台对比有更新就会给出更新的地址

onLaunch: function () {  
    //#ifdef APP-PLUS  
    var server = "https://www.example.com/update"; //检查更新地址  
    var req = { //升级检测数据  
        "appid": plus.runtime.appid,  
        "version": plus.runtime.version  
    };  
    uni.request({  
        url: server,  
        data: req,  
        success: (res) => {  
            if (res.statusCode == 200 && res.data.status === 1) {  
                uni.showModal({ //提醒用户更新  
                    title: "更新提示",  
                    content: res.data.note,  
                    success: (res) => {  
                        if (res.confirm) {  
                            plus.runtime.openURL(res.data.url);  
                        }  
                    }  
                })  
            }  
        }  
    })  
    //#endif  
}

后台

if (plus.os.name=="Android") {  
    appurl = "market://details?id=io.dcloud.hellouniapp"; //这个是通用应用市场,如果想指定某个应用商店,需要单独查这个应用商店的包名或scheme及参数  ,或者直接apk的下载地址
}  
else{  
    appurl = "itms-apps://itunes.apple.com/cn/app/hello-uni-app/id1117078253";  
}

如果是wgt更新

制作wgt包,hbuilder发行-》原生app-制作应用wgt包,然后将wgt包放在自己的服务器后,把访问url地址记下来

800_auto

app端调用安装wgt包

 uni.showModal({
    title: "系统提示",
    content: `当前版本号为(当前版本号),邀您更新版本(最新版本号)`,
    success: (res) => {
      //用户确认更新
      if (res.confirm) {
        //使用下载api(uni.downloadFile)
        let uploadTask = uni.downloadFile({
          url: 'wgt包下载地址',
          success: (downloadResult) => {
            //使用安装wgtapi(plus.runtime.install)
            plus.runtime.install(
              downloadResult.tempFilePath, {
              force: true
            },
              function () {
                uni.showModal({
                  title: '系统提示',
                  content: '新版本已经更新完成,需要重启应用',
                  showCancel: false,
                  //用户点击确认重启
                  success: function (
                    res) {
                    if (res
                      .confirm) {
                      调用重启api(plus.runtime
                        .restart)
                      plus.runtime
                        .restart();
                    } else if (res
                      .cancel) {
                      console
                        .log(
                          '用户点击取消'
                        );
                    }
                  }
                });
              }
            )

          }
        });

        //在这里监听用户下载进度
        uploadTask.onProgressUpdate((res) => {
          this.pro = res.progress;
          console.log(this.pro);
          if (this.pro == 100) {
            this.isDown = false;
          }
        })

      }
    }
  });

网友回复

我知道答案,我要回答