热更新是App开发者常用的更新方式,指用户安装应用后打开时触发的即时更新,通过动态下发代码绕过审核机制实现快速修复BUG或发布功能。
wgt打包
1、修改版本号:
2、打包wgt
热更新文件打包流程:选择制作应用wgt包 -> 选择安卓/IOS
3、打包成功标志
搭建本地测试服务(注意:需要在局域网内,即手机、电脑连同一wifi)
1、新建文件夹
新建一个任意名字的文件夹,这里起名为serve,并把打包的文件重命名放进刚刚命名的文件夹
1、使用node搭建本地服务
在当前文件夹下打开CMD并使用使用命令:npx http-server -p 9527 -c-1
这样起了一个本地的服务,就可以进行本地测试了。
静默更新
即不提醒用户重新安装APP的方案:
在App.vue中onLaunch生命周期中写入
let wgtPath = uni.getStorageSync('silent_wgt_path') || ''
if (!wgtPath) {
uni.downloadFile({
url: 'http://192.168.31.80:9527/102.wgt',
success: (res) => {
let path = res.tempFilePath
// 只记录路径,**不 install**
uni.setStorageSync('silent_wgt_path', path);
console.log('[Mock] 已标记,请杀进程再进');
}
})
} else {
plus.runtime.install(wgtPath, {force: false}, () => {
console.log('[Silent] 安装成功,准备重启')
uni.clearStorageSync()
plus.runtime.restart() // 立即重启,用户无感知
}, e => {
console.error('[Silent] 安装失败', e)
uni.clearStorageSync()
})
}
这种写法将会正在用户杀死APP进程后下一次打开时自动静默更新成最新的包。
强制提醒用户更新
uni.downloadFile({
url: "http://192.168.31.80:9527/102.wgt",
success: (res) => {
let path = res.tempFilePath;
// 只记录路径,**不 install**
uni.showModal({
title: "发现新版本",
content: "优化体验,建议立即升级",
confirmText: "立即安装",
cancelText: "以后再说",
success: (res) => {
if (res.confirm) {
plus.runtime.install(
res.tempFilePath,
{
force: false,
},
() => {
plus.runtime.restart();
},
(e) => {
uni.showToast({
title: "安装失败:" + e.message,
icon: "none",
});
}
);
}
},
});
},
});