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('安装更新失败!')
- })
- },
- }