使用uni-app实现云打包和热更新
云打包
启动HBuilderX,然后点击“运行”–>“原生APP-云打包”,弹出如下页面:
如果你要同时发布Android和iOS,那么需要都需要配置其内容。需要注意的是,一般我们都需要将广告联盟给取消掉。
我使用的开发工具为mac。现在假设你也是使用mac作为开发工具,同时也已经有了Android和iOS相关的证书文件,如果没有,可以按照上面的提示,一步步的配置。
配置Android
选中你的jks证书,填上证书的别名和私钥密码,完成入下图:
配置iOS
选中你本地的发布证书(.p12)及对应的发布描述文件(.mobileprovision),配置后如下图:
修改包名
还有关键一步,修改包名,则大功告成!下面分别是修改Android和iOS的APP包名:
最后点击打包耐心等待即可.得到apk和ipa包后,将apk上传到对应的Android市场,iOS则需要上传到appstore,此处不做演示。
uni-app热更新
热更新不像发布那样复杂,不过首先,你需要更新 manifest.json 中的版本号和版本名称配置。比如之前是 4.3.0,那么新版本应该是 4.3.1 或 4.4.0 这样。应用版本号之前是600,现在可以是601.总之,每次发布版本时两者都必须大于上一次的值.
然后点击发行中的资源升级包:
选择你要生成的.wgt文件路径:
然后等待控制台的输出,导出成功后就得到了对应的.wgt文件。得到文件后,可以将文件存放在服务器,我这边是把资源包放到了七牛。然后与后台约定检测升级的接口,每次程序启动则请求接口,做检测更新即可。
下面是检测热更新资源操作和更新APP包的业务逻辑:
onShow() {
if (!this.isNew) { //isNew:标识APP启动才会检测,切换页面再次调用onShow不做检测
this.isNewVersion()
}
},
// 获取最新版本
isNewVersion() {
// 调用检测自己的检测接口
this.$api.getNewVersion().then(res => {
if (res.is_newest) { //没有最新版本
this.isNew = true
} else { //有最新版本
// #ifdef APP-PLUS
if (res.is_update_now) { //最新版本是热更新资源
if (res.down_link !== 'none') {
//下载热更新资源
this.checkUpdate(res.down_link)
}
} else { //最新版本是新版本的安装包,则需要去appstore或者应用商店下载新包。
if (uni.getSystemInfoSync().platform == "ios") {
tip.showModal('请前往App Store下载最新版本', false)
} else {
tip.showModal('发现新版本', false).then(res => {
if (res) {
plus.webview.open('https://fir.im/XXXXXXXXXXXXX')
}
})
}
}
// #endif
}
})
},
// 下载最新资源包
checkUpdate(url) {
plus.nativeUI.showWaiting('下载更新...')
plus.downloader.createDownload(url, {filename:'_doc/update/'}, (d, status) => {
if (status === 200) {
this.installWgt(d.filename)
} else {
plus.nativeUI.alert('下载更新失败!')
}
plus.nativeUI.closeWaiting()
}).start()
},
// 更新应用资源包
installWgt(path) {
plus.nativeUI.showWaiting('安装资源文件中...')
plus.runtime.install(path, {}, () => {
plus.nativeUI.closeWaiting()
plus.nativeUI.alert('应用资源更新完成!', () => {
plus.runtime.restart()
})
}, (e) => {
plus.nativeUI.closeWaiting()
plus.nativeUI.alert('资源更新失败,原因:' + e.message)
})
},