使用uni-app实现云打包和热更新

使用uni-app实现云打包和热更新

云打包

启动HBuilderX,然后点击“运行”–>“原生APP-云打包”,弹出如下页面:

image

如果你要同时发布Android和iOS,那么需要都需要配置其内容。需要注意的是,一般我们都需要将广告联盟给取消掉。

我使用的开发工具为mac。现在假设你也是使用mac作为开发工具,同时也已经有了Android和iOS相关的证书文件,如果没有,可以按照上面的提示,一步步的配置。

配置Android

选中你的jks证书,填上证书的别名和私钥密码,完成入下图:

Android配置

配置iOS

选中你本地的发布证书(.p12)及对应的发布描述文件(.mobileprovision),配置后如下图:

iOS

修改包名

还有关键一步,修改包名,则大功告成!下面分别是修改Android和iOS的APP包名:

修改Android包名

修改iOS包名

最后点击打包耐心等待即可.得到apk和ipa包后,将apk上传到对应的Android市场,iOS则需要上传到appstore,此处不做演示。

uni-app热更新

热更新不像发布那样复杂,不过首先,你需要更新 manifest.json 中的版本号和版本名称配置。比如之前是 4.3.0,那么新版本应该是 4.3.1 或 4.4.0 这样。应用版本号之前是600,现在可以是601.总之,每次发布版本时两者都必须大于上一次的值.

image

然后点击发行中的资源升级包:

image

选择你要生成的.wgt文件路径:

image

然后等待控制台的输出,导出成功后就得到了对应的.wgt文件。得到文件后,可以将文件存放在服务器,我这边是把资源包放到了七牛。然后与后台约定检测升级的接口,每次程序启动则请求接口,做检测更新即可。

image

下面是检测热更新资源操作和更新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)
                })
            },

   转载规则


《使用uni-app实现云打包和热更新》 刘星星 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
在uni-app中使用微信登录总结 在uni-app中使用微信登录总结
在uni-app中使用微信登录总结最近开发了一款使用uni-app框架的小程序,名字叫“花果鲜inside”(因为是针对公司业务的小程序,注册后需要后台审核,所以只能游客浏览哈)。现将开发问题中涉及到的微信授权登录业务总结一下. 登录
2019-09-01
下一篇 
Promise的总结与使用 Promise的总结与使用
promise的使用总结promise的详细语法请参考MDN 我们知道,一个promise有3种状态:pending(初始状态,既不是成功,也不是失败状态)、fulfilled(意味着操作成功完成)、rejected(味着操作失败)
2019-08-16
  目录