python网站开发前端,中国兰州网招聘,sem竞价推广代运营,网站如何做生僻词引流整包更新与热更新的区别
① 整包更新是指下载完整 apk 文件进行覆盖安装
② 热更新是指把 app 有改动的地方打包进 wgt 文件#xff0c;只更新 wgt 文件中的内容#xff0c;不进行整包安装#xff0c;在用户视角也叫做省流量更新
版本号规则约束
建议严格遵循 Semantic …整包更新与热更新的区别
① 整包更新是指下载完整 apk 文件进行覆盖安装
② 热更新是指把 app 有改动的地方打包进 wgt 文件只更新 wgt 文件中的内容不进行整包安装在用户视角也叫做省流量更新
版本号规则约束
建议严格遵循 Semantic Versioning 2.0.0 语义化版本规范。
主版本号不兼容的 API 修改。 次版本号向下兼容的功能性新增。 修订号向下兼容的问题修正。
实现的原理
① 开发后台版本管理功能每次发版上传 android 安装包记录版本号、是热更新还是整包更新、是否强制更新等。
② 每次打开 app(onLaunch生命周期)的时候通过接口请求最新版本信息再获取当前安装包信息对比版本号。
③ 如果版本号不一致且接口获取的版本号大于当前应用的版本号则进行整包更新或热更新。
④ IOS 并不存在下载安装包覆盖安装这种操作所以在 IOS 平台需要跳转到 App Store 进行更新。
onLaunch() {this.upgradeAPP(); // APP版本升级
},
在 methods 中
/* APP版本升级 */
upgradeAPP() {// #ifdef APP-PLUS// 只在正式环境下启用避免更新影响开发和测试环境(这步取决于你的需求)if (process.env.NODE_ENV production) {// 获取 app 运行信息plus.runtime.getProperty(plus.runtime.appid, widgetInfo {// 通过接口获取最新版本信息getVersion({ platform: 1 }).then(res {if (!res) return;// 版本号得到的是类似 7.0.1 的字符串把它去除.并转为纯数字const appCode parseInt(res.app_code.split(.).join());const version parseInt(widgetInfo.version.split(.).join());// 只有接口版本号 当前包版本号才进行更新if (appCode version res.type 0) {this.updateHot(res.download_url); // 热更新下载更新文件(这一步可以先显示更新提示的 ui用户点击更新后再下载更新)} else if (appCode version res.type 1) {this.updatePackage(res.download_url); // 整包更新(这一步可以先显示更新提示的 ui用户点击更新后再下载更新)}});});}// #endif
},
/* 整包更新 */
updatePackage(url) {// IOS 平台不允许这样更新所以我们需要跳转到 appstore 进行更新if (uni.getSystemInfoSync().platform ios) {plus.runtime.launchApplication({ action: itms-apps://xxx }); // 调用第三方程序(链接可以通过接口获取)} else {// 构建了下载任务但此时并未开始下载const dtask plus.downloader.createDownload(url, {}, (downloadResult, status) {if (status 200) {plus.runtime.install(downloadResult.filename,{ force: false },() {plus.runtime.restart(); // 安装成功后重启},() {uni.showToast({ icon: none, title: 下载更新失败 });});}});dtask.start(); // 执行安装包下载开始下载任务}
},
/* 热更新 */
updateHot(url) {uni.downloadFile({url,success: downloadResult {if (downloadResult.statusCode 200) {// 下载更新文件成功后进行安装force.是否强制安装(如果将要安装应用的版本号不高于现有应用的版本号则终止安装并返回安装失败)plus.runtime.install(downloadResult.tempFilePath, { force: false }, () {uni.showToast({ title: 更新完毕即将重启, icon: none, position: bottom, mask: true });setTimeout(() {plus.runtime.restart(); // 安装完成后重启应用}, 2000);});}}});
}
参考uniapp开发APP强制更新和热更新