vue项目,PDA嵌入安卓,实现app热更新

1、服务器发送通知的方式
当有新版本时,由服务器向所有用户发送通知,提醒用户进行更新。
好处:用户下载应用之后,即使一次也没使用过,也可以接收到通知,然后进行版本更新。
坏处:
1)可能用户已经更新了新版本,可还是收到了有新版本的提示。
2)如果用户关闭了接收push通知,那么即使服务器push了一个新版本提示,用户也收不到。
2.本地通知的方式。
在pda登陆页面或者是设置一个定时器,间隔时间去查询用户当前版本,监测到版本不一致时提醒用户更新
方法:服务器提供一个访问现有版本的接口, 本地代码可以每隔一段时间,去访问服务器获取当前应用的版本,如果有更新,则弹出对话框提醒用户进行更新
坏处:可能不能及时更新版本。
3.服务器提供一个接口,访问接口(在使用应用中间(比如进入某个模块,这个模块调用此接口))进行提醒更新, 从接口获取的最新版本号与上次存储在本地的当前版本进行比较,不一致则提醒用户更新
好处:及时。用户可以很及时的更新新版本。
坏处:是用户在使用app期间收到提示

方法4没有进行实践操作,暂且仅当记录
4、另外,友盟有自动提醒的功能,利用友盟推送可以实现版本更新

目前PDA的版本更新用的是类似方法3
大致实现思路:
步骤一:获取当前安卓上所安装的软件版本号
步骤二:调用接口获取当前最新版本号
步骤三:当前版本号是否与最新版版本号一致,不一致进行版本下载安装更新

data () {
    return {
      currentVersion: '', // 安卓上当前软的版本号
      lateVer: '', // 最新版本号
      wgtUrl: '', // 下载地址
      percentageNum: 0, //下载进度条
      show: false, // 下载时可根据需求添加进度条样式 控制进度条显隐
    }
},
 mounted () {
    setTimeout(() => { // 根据代码实际情况确认是否添加延迟
      // 获取设备唯一标识码 浏览器运行时注释掉plus部分【浏览器中无plus会报错阻滞代码向下执行】
      // 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断
      if (window.plus) {
        // 在这里调用5+ API
        this.plusready()
      } else { // 兼容老版本的plusready事件
        document.addEventListener('plusready', this.plusready(), false)
      }
    })
},
methods: {
    plusready () {
      // 获取软件版本号
      plus.runtime.getProperty(plus.runtime.appid, (inf) => {
        console.info('当前版本号:' + inf.version)
        // 获取当前版本号逻辑操作
      })
    },
    // 当前安装软件的版本与最新版本不同时确定下载
    // 在App中检测版本更新首先判断版本号是否是最新的,不是最新则执行版本更新功能。
    // 实现方式主要通过plus.downloader.createDownload下载apk包,
    // 下载完成后通过plus.runtime.install来进行安装,在下载时给下载任务设置一个监听根据状态实时更新下载进度
    downLoad () {
      // plus.nativeUI.showWaiting("新版本更新中,请耐心等待~");
      let dtask = plus.downloader.createDownload('http://实际下载地址', {}, (d, status) => {
        if (status == 200) {
          console.log('下载更新成功:' + d.filename)
          // 安装wgt资源包
          this.installWgt(d.filename)
        } else {
          console.log('下载更新失败!')
          plus.nativeUI.toast('下载更新失败!')
        }
        plus.nativeUI.closeWaiting()
      })
      dtask.start()
      // 下载时实时显示下载进度
      let prg = 0
      dtask.addEventListener('statechanged', (task, status) => {
        // 给下载任务设置一个监听 并根据状态  做操作
        switch (task.state) {
          case 1:
            // '正在下载';
            break
          case 2:
            // '已连接到服务器';
            break
          case 3:
            prg = parseInt(
              (parseFloat(task.downloadedSize) /
                parseFloat(task.totalSize)) *
              100
            )
            this.percentageNum = prg // 赋值给进度条组件
            break
          case 4:
            this.show = false // 进度隐藏
            break
        }
      })
    },
    // installWgt()这个方法在一切准备就绪后安装App
    installWgt (path) {
      // 安装更新
      plus.nativeUI.showWaiting('Install updates')
      plus.runtime.install(path, {}, () => {
        plus.nativeUI.closeWaiting()
        console.log('安装更新成功!')
        plus.nativeUI.alert('安装更新成功!', () => {
          plus.runtime.restart() // 安装成功后重启应用
        })
      }, (e) => {
        plus.nativeUI.closeWaiting()
        console.log('安装更新失败![' + e.code + ']:' + e.message)
        plus.nativeUI.toast('安装更新失败!')
      })
    },
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值