uni-app标准热更新解决方案

【点赞收藏加关注,前端技术不迷路~】

一、理论分析

1.技术背景:

使用uni-app创建的跨平台应用,覆盖h5、android、ios、及其热更新wgt。基础的热更新解决方案更新类型仅有两种,强制更新和不强制更新,更新机制简陋,现需要在原更新实现的基础上,重构更新策略,优化更新机制

2.痛点:

        1)无法扩版本更新,若连发两版,高版本的不强制更新如果关掉,则低版本的强制更新也不会更新,

        2)更新页面交互不友好,更新频繁,等待时间过长。

        3)登录页面不检查更新,导致涉及到登录页面的改造更新异常,

        4)老版本缓存的大数据(如各类操作员列表),即使新版本页面更换了查询接口,关键字不变的情况下也不会重新查询…

3.解决方案:

        1)后端接口返回可更新版本数组,解决多版本更新的问题,

        2)更新类型增加静默更新,解决资源包后台下载的问题,

        3)更新页面优化,将更新过程转化成初始化过程,降低用户期待,缩短等待时长体感,

        4)增加清除环境配置,清除缓存数据,来处理老版本遗留问题

4.实现思路:

丰富版本信息传参控制具体动作分离下载安装动作供静默更新使用

二、具体实现

1.访问路径是否匹配检查

检查当前环境中WEBURL环境参数,如果storage中记录的webUrl值与更新后的环境地址值匹配则不处理,

否则:

        1.如果WEBURL.type不属于dev、test、pre或prod,则重置成prod

        2.重置Vue.prototype.ENV为当前WEBURL.type,WEBURL.webUrl为当前版本环境配置中对应的值

        3.如果重置了WEBURL.type,则需要切换到当前环境下的最新更新包checkUpdate(false,true,true)

        4.如果没有重置,当需要登出的时候,需要执行登出操作

uni.removeStorageSync('USER_DATA);

uni.removeStorageSync('mes-token);

clearAllCookie();

uni.reLaunch({

    url:"/pages/login/login"

});

        * 每次进入首页、登录页均需检查,如不匹配需要重置处理

2.切换环境同步切换版本(开发、测试、预生产、正式环境切换)

因版本更新基本原则是只可升不可降,所以当在登录页切换环境时,需要切换到目标环境下的最新版本,来保证各环境的正常运转。当查询最新版本接口,传入的当前版本为空或不传时,后台只需要返回最新的版本即可。

3.更新检查

在检查app无更新后,检查是否有wgt版本更新:

1) 传入当前版本,后台按照逻辑,返回目前可以更新的版本,具体规则如下:

        1.所有可更新版本均须高于当前版本,

        2.强制更新版本:版本最高的更新类型为强制更新的版本只能有0或1个

        3.不强制更新版本:版本最高的更新类型为不强制更新,且版本高于【2】的版本,只能有0或1个,

        4.静默次更新版本:版本最高的更新类型为静默次更新,且版本高于【2】的版本,只能有0或1个,

        5.返回结果为数组,按照版本从高到低排列

        6.版本信息包括:版本主信息+是否清除环境配置:上一个可更新版本到本版本的字段汇总(有一个版本是1,值就是1)+清除缓存关键字:上一个可更新版本到本版本的字段汇总(值拼接,用逗号分割)+历史版本更新内容:当前版本到本版本的更新说明汇总(为各版本号和对应更新说明的对象的数组)

2) 若当前版本为空,或者不传,则直接返回当前环境的最新版本

3) 如果已忽略版本包含本次不强制更新版本号,则直接舍弃不强制更新版本

4.确定具体更新版本

具体更新版本包括3个:基础版本可选版本次更新版本

wgt版本更新检查接口返回的结果,若有已缓存版本,需要进行以下过滤:

        1.如果有最强更新版本,最强更新版本和已缓存版本哪个版本更高,哪个版本就为基础版本,舍弃另一个较低的版本

        2.如果没有最强更新版本,则直接设置已缓存版本为基础版本

        3.如果有不强制更新版本,且版本大于已缓存版本,则保留不强制更新版本为可选版本,否则可选版本为空

        4.如果有静默次更新版本,且版本大于已缓存版本,则保留静默次更新版本为次更新版本

如果具体更新版本只有一个次更新版本,则直接开启次更新静默下载,并退出更新流程

如果具体更新版本基础版本和可选版本至少有一个不为空,则跳转至标准更新流程

5.标准更新流程

如果有可选版本,则弹框供用户选择是更新可选版本,还是忽略可选版本

        选择更新可选版本:开启更新可选更新版本流程:

        忽略可选版本:将可选版本版本号存入已忽略版本缓存,若有基础版本则更新基础版本,若无,且没有次更新版本则退出更新流程;若有次更新版本,则开启次更新缓存流程,然后退出更新流程。

6.更新流程优化

弱化更新概念,改为获取补丁、初始化信息、环境配置、即将完成等阶段,降低每一个阶段的响应时间,来提高用户的容忍度

7.滞后处理

标准版本更新后:

        若所更新版本是否清除环境配置为1,则设置WEBURL中的webUrl为null

uni.setStorageSync(VEBURL',{type:weburl_data.type;

        若清除缓存关键字不为空,则按逗号分割,然后逐个删除缓存:

uni.removeStorageSync(dataKey);

如果有静默次更新版本,则开启次更新缓存流程,然后退出更新流程

三、热更新流程图

uniapp-wgt热更新流程图

 四、代码实现

具体实现代码有待梳理,择日补上,感兴趣的筒子们先收藏哈~

具体代码已经补上了哈,感兴趣的筒子们请移步:

uni-app标准热更新(wgt)解决方案-具体代码实现-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值