1. 问题描述
如果你在使用uniapp 开发应用过程中,发现更新了已经发布的 uniapp 版本之后,打包后的app没有更新,界面也没有刷新,这个问题该怎么办呢?
2. 可能原因
2.1 缓存问题
按照正常的流程,我们是通过在manifest.json 中配置版本号,在APP启动时,下载和比较新的包然后进行更新,但是在 IOS 中,APP从后台唤醒时,如果检测到已经加载了对应的包,就不会再进行更新。因此出现此类问题后,第一步需要检查缓存。
2.2 是否有新版本
如果app没有出现更新,是否有新的包可以更新呢?是否因为网络的原因,uniapp 框架和手机的之间没有成功比对版本号?需要确认是否有新版本发布和可以下载。
2.3 检查热更新的代码
我们在代码中可能使用热更新的方式来动态更新如js文件,但是热更新的功能不支持更新 manifest.json 配置文件,因此版本号应该是写死到配置文件中,如果是手动读取或通过某些方式读取版本号的,可能会导致版本号不匹配
3. 解决方法
3.1 热更新代码问题处理
我们需要确认你的代码是否正确,特别是是否正确的更新了版本号,例如:
// myMod 的修改和 uni.updateApp 保持一致,其中manifestUrl是你的manifest.json的URL地址;
// manifest.json 会被下载并保存到本地;
const myMod = uni.upxdate.createUpdater({
// 修改manifestUrl的值,即可重复下载、冷更新
manifestUrl: 'https://yourserver.com/yourpath/manifest.json',
success: () => { },
fail: () => { }
});
myMod.checkUpdate();
3.2 清除缓存
在ios中,我们可以使用类似如下的方法自动清理缓存:
const clearCache = () => {
const sdPath = plus.io.convertLocalFileSystemURL('_doc');
const clearDir = [`${sdPath}download/uni-app`];
plus.io.resolveLocalFileSystemURL(sdPath, function(entry) {
entry.getDirectory('download/uni-app', {create: false}, function(dirEntry) {
dirEntry.removeRecursively(function() {
console.log('清理成功');
});
});
});
};
在安卓中我们可以通过前往手机应用管理界面,并且选择相应的应用,在 “存储与内存” 中清理缓存
4. 结论
总而言之,uniapp 版本更新没有刷新页面可能是因为缓存问题、是否有新版本,或者热更新代码问题,我们需要通过检查代码并清除缓存来解决此问题,正确的解决此类问题,需要具备一定的uniapp和vue.js开发技能,如果遇到困难或不确定是否有问题时,可以参考官方文档或在官方论坛中寻找帮助。