uni-app 是一款基于 Vue.js 的跨平台前端开发框架,支持将同一份代码编译生成多个平台可执行程序(如H5、小程序、App等),可方便地实现大型项目的开发、管理与维护。对于一个中大型项目的开发,增量更新是非常关键的功能,它能够大大缩短用户等待的时间,提高用户体验。本文将详细讲解如何在 uni-app 中实现增量更新功能的攻略。
第一步:使用uni-app自带的更新api
uni-app 自带了自动更新的 API,只需要按照需求传入 APP ID 和服务器端的更新地址即可,然后使用 uni-app 的 downloadFile 和 saveFile 方法,将最新的代码下载并保存到本地。以下是使用 uni-app 自带的更新api 的详细步骤:
1. 在 pages.json 中配置更新页面(可选项)
如果需要提供更新页面,可以在 pages.json 文件中增加以下内容,设置导航栏标题和该页面的 url:
{
"path": "pages/update/update",
"style": {
"navigationBarTitleText": "版本更新"
}
}
2. 在 app.vue 的 onLaunch 方法中调用更新方法
在 app.vue 组件中的 onLaunch 方法中调用 uni-app 自带的更新 API,将服务器端的 codeUrl 和 updateUrl 以及 APP 的 appid 参数传递给 uni-app,然后监听 uni.downloadFile 的进度,下载后的文件保存到 uni.saveFile 中,最后调用生命周期函数uni.reLaunch方法重启应用。
export default {
onLaunch() {
// 获取当前版本号
uni.getSystemInfo({
success: (res) => {
this.currentVersion = res.version;
}
});
// 使用 uni-app 自带的更新 API
uni.getUpdateManager().onUpdateReady(() => {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: (res) => {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
uni.getUpdateManager().applyUpdate();
//重启app
this.$abnormalShutdown();
// 重启应用
uni.reLaunch({
url: '/pages/index/index'
});
}
}
});
});
uni.getUpdateManager().onUpdateFailed(() => {
uni.showModal({
title: '已经有新版本了',
content: '新版本已经上线,请您删除当前小程序,重新搜索打开',
showCancel: false,
success: function(res) {
if (res.confirm) {
//调用微信 API,重启小程序
wx.getUpdateManager().applyUpdate();
}
}
});
});
uni.getUpdateManager().onUpdateDownloading((downloadRes) => {
// 下载 progress 更新
console.log('下载进度:' + downloadRes.progress);
console.log('已经下载的数据长度:' + downloadRes.totalBytesWritten);
console.log('预期需要下载的数据总长度:' + downloadRes.totalBytesExpectedToWrite);
});
},
},
在生产环境中,需要将服务器上的新版本代码的路径通过请求接口获得,然后在静态资源服务器上存好,这些操作都是服务端的任务。
第二步:使用wewebview加载外部服务器资源包
如果不使用uni-app自带的更新API,我们还可以通过加载外部下载的服务器资源包来实现增量更新功能,这里使用 wewebview 插件来实现。wewebview 插件是一个可以让小程序页面内部嵌入 webview 的插件,可以通过 webview 加载服务器上的资源包,达到增量更新的效果。以下是使用 wewebview 插件来实现增量更新的详细步骤:
1. 安装 wewebview
npm install vue-wewebview --save
2. 配置 vue-wewebview 插件
在 main.js 中引入 vue-wewebview 插件,并配置 wewebview:
import Vue from 'vue'
import App from './App'
import wewebview from 'vue-wewebview'
Vue.use(wewebview)
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
3. 在需要更新的页面中使用 webView 标签
在需要更新的页面中使用 webView 标签,通过动态设置 src 属性,实现加载服务器上的资源包,以下是一个示例:
<template>
<div class="webview-container">
<!-- 页面内容 -->
...........
<!-- wewebview 控件 -->
<webview :urls="webviewUrl" />
</div>
</template>
<script>
export default {
name: "Index",
data() {
return {
webviewUrl: ''
}
},
mounted() {
this.webviewUrl = 'http://www.staticstorage.com/app/public/update.zip';
},
}
</script>
<style scoped>
.webview-container {
width: 100%;
height: 100%;
}
.webview-container webview {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background: transparent;
}
</style>
以上示例代码中,this.webviewUrl设置为服务器上的资源包地址,具体的更新逻辑需要根据自己的实际情况来确定加载策略和资源包组织方式。
总结
以上就是在 uni-app 中实现增量更新功能的攻略介绍。如果使用 uni-app 自带的更新 API,只需要按照需求传入 APP ID 和服务器端的更新地址即可,最后下载并应用新版本代码,实现增量更新。如果需要实现更灵活的更新策略,可以通过在小程序页面中使用 webview 加载服务器上的资源包来实现增量更新。这两种方法各有各的优点和适用场景,可以根据自己的实际需求来选择使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uni-app如何实现增量更新功能 - Python技术站