uniapp實(shí)現(xiàn)熱更新

 ## 前端
/**
 * 判斷應(yīng)用升級(jí)模塊,從url地址下載升級(jí)描述文件到本地local路徑
 * 升級(jí)文件為JSON格式數(shù)據(jù),如下:
{
  "appid":"HelloH5",
  action: "all", // 整包更新 = all ,應(yīng)用資源獨(dú)立升級(jí) = sth
  "iOS":{
    "version":"iOS新版本號(hào),如:1.0.0",
    "note":"iOS新版本描述信息,多行使用\n分割",
    "url":"Appstore路徑,如:itms-apps://itunes.apple.com/cn/app/hello-h5+/id682211190?l=zh&mt=8"
  },
  "Android":{
    "version":"Android新版本號(hào),如:1.0.1",
    "note":"Android新版本描述信息,多行使用\n分割",
    "url":"apk文件下載地址,如:http://www.dcloud.io/helloh5p/HelloH5.apk"
  }
}
 */
export function checkUpdate (checkUrl, wgtUrl) {
  // 鎖定屏幕方向
  plus.screen.lockOrientation('portrait-primary')
  plus.runtime.getProperty(plus.runtime.appid,inf=>{
      console.log(JSON.stringify(inf));
      //存儲(chǔ)版本號(hào)到本地
      // localStorage.version =  inf.version;
      // 檢測(cè)升級(jí)
      uni.request({
        url: checkUrl, // 檢查更新的服務(wù)器地址
        data: {
          appid:inf.appid,
          version: inf.version ,
          imei: plus.device.imei
        },
        method: "GET",
        success: res => {
          console.log('success',JSON.stringify(res.data.isUpdate) )
          if (res.statusCode == 200 && res.data.isUpdate) {
            const openUrl = plus.os.name === 'iOS' ? res.data.iOS : res.data.Android // 下載文件地址 ios以"itms-apps://"開頭,后面跟appstore上應(yīng)用地址。
            // 提醒用戶更新
            uni.showModal({
              title: '更新提示',
              content: res.data.note ? res.data.note : '是否選擇更新',
              success: showResult => {
                if (showResult.confirm) {
                  if (res.action === 'all') {
                    // 整包更新
                    // plus.runtime.openURL(openUrl)
                    updateAppAll(openUrl.url)
                  } else {
                    // 應(yīng)用資源獨(dú)立升級(jí)
                    downWgt(wgtUrl) // 下載升級(jí)包
                  }
                }
              }
            })
          }
        },
        fail:(err) => {
            console.log(JSON.stringify(err));
        }
      })
  })
  
}
 
/** 整包更新 */
function updateAppAll (openUrl) {
  if (plus.os.name === 'iOS') {
    plus.runtime.openURL(openUrl)
  } else {
    var dtask = plus.downloader.createDownload(openUrl, {}, function (d, status) {
      if (status === 200) {
      // 下載成功
        var path = d.filename
        console.log(d.filename)
        plus.runtime.install(path) // 安裝下載的apk文件
      } else {
      // 下載失敗
        alert('Download failed: ' + status)
      }
    })
    dtask.start()
  }
}
 
/** App資源在線升級(jí)更新 */
// 下載wgt文件
function downWgt (wgtUrl) {
  plus.nativeUI.showWaiting('下載更新文件...')
  console.log(wgtUrl);
  plus.downloader.createDownload(wgtUrl, { filename: '_doc/update/' }, function (d, status) {
    if (status == 200) {
      console.log('下載更新文件成功:' + d.filename)
      installWgt(d.filename) // 安裝wgt包
    } else {
        console.log(JSON.stringify(status) );
      console.log('下載更新文件失敗!')
      plus.nativeUI.alert('下載更新文件失??!')
    }
    plus.nativeUI.closeWaiting()
  }).start()
}
// 更新應(yīng)用資源包(wgt文件)
function installWgt (path) {
  plus.nativeUI.showWaiting('安裝更新文件...')
  plus.runtime.install(path, {}, function () {
    plus.nativeUI.closeWaiting()
    console.log('安裝更新文件成功!')
    plus.nativeUI.alert('應(yīng)用資源更新完成!', function () {
      plus.runtime.restart()
    })
  }, function (e) {
    plus.nativeUI.closeWaiting()
    console.log('安裝更新文件失敗[' + e.code + ']:' + e.message)
    plus.nativeUI.alert('安裝更新文件失敗[' + e.code + ']:' + e.message)
  })
}

后端(node.js koa2)

router.get('/app_update', async (ctx, next) => {
    let {
        appid,
        version,
        imei
    } = ctx.query
    let app_date ={};
    if (version < "1.0.1") {
         app_date = {
            "isUpdate": true,
            "appid": appid,
            "action": "sth", // 整包更新 = all ,應(yīng)用資源獨(dú)立升級(jí) = sth
            "iOS": {
                "version": "iOS新版本號(hào),如:1.0.0",
                "note": "iOS新版本描述信息,多行使用\n分割",
                "url": "Appstore路徑,如:itms-apps://itunes.apple.com/cn/app/hello-h5+/id682211190?l=zh&mt=8"
            },
            "Android": {
                "version": "Android新版本號(hào),如:1.0.1",
                "note": "Android新版本描述信息,多行使用\n分割",
                "url": "apk文件下載地址,如:http://www.dcloud.io/helloh5p/HelloH5.apk"
            }
        }
    } else {
         app_date = {
            "isUpdate":false,
        }
    }
    ctx.body = app_date
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容