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