当前位置: 首页 > news >正文

小程序发布后,不能强更的情况下,怎么通知到用户需要去更新?

哈喽,我想和大家分享一下我在开发记账小程序时遇到的一个问题,以及我找到的解决办法。

这个记账小程序从一开始,我就特别在意用户的隐私,所以把记账数据都存到了本地缓存里,还做了个手动备份的功能。但系统嘛,总是要升级的,有时候就得强制更新。这一强制更新,麻烦就来了,缓存没了,用户辛辛苦苦记的账也全没了,这可太糟糕了。

问题来了,我怎么通知用户要去更新呢?

后来我琢磨出了一个办法。每次发布新版本的时候,我就把当前的版本号带上去。等用户打开页面,就让小程序去调后台接口,获取那些落后的版本信息,然后把更新消息告诉用户。

看最终结果:

 

由于更新前要备份数据,我还专门做了一个视频教程,点击按钮就能跳转到哔哩哔哩查看。

ok,先看看前端代码。我定义了一个 version 常量,用来表示当前版本,现在是 7 。然后有个 getDelayVersion 函数,专门去获取落后版本记录。它用 uni.request 去调后台接口,把当前版本号 version 和用户的 openid 传过去。要是接口调用成功,状态码是 200 ,就把返回的数据存到 delayVersions.value 里;要是失败了,就在控制台打印错误信息,还会给用户弹出一个提示框,说查询最新版本失败。

/** 当前版本 */
const version = 7;
// ------------------------
// 获取落后的版本记录
// ------------------------
const getDelayVersion = async () => {try {const apiRes = await uni.request({url: api + '/getDelayVersion', // 替换为实际接口method: 'GET',data: { version,openid: openId.value}});if (apiRes.statusCode === 200) {delayVersions.value = apiRes.data.data} else {throw new Error('查询最新版本失败');}} catch (error) {console.error('查询最新版本失败:', error);uni.showToast({ title: '查询最新版本失败', icon: 'none' });}
}

后台代码也不复杂。用 @RequestMapping 定义了一个 /getDelayVersion 的接口,接收前端传过来的 version 和 openid 。如果 openid 不为空,就去数据库里查对应的用户信息,把用户的版本号更新一下。然后再从 app_info 表里查出版本号大于传过来的 version 的所有记录,封装成响应数据返回给前端。

@RequestMapping("/getDelayVersion")
public WxResponse<List<AppInfo>> getDelayVersion(String version,String openid) throws IOException {WxResponse<List<AppInfo>> wxResponse = new WxResponse();wxResponse.setStatusCode(BusinessStatusEnum.SUCCESS.getCode());if(StrUtil.isNotBlank(openid)) {UserInfo userInfo = userInfoMapper.selectOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getOpenId, openid));userInfo.setVersion(version);userInfoMapper.update(userInfo,new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getOpenId,openid));log.info(StrUtil.format("{} 当前版本{}记录OK",openid,version));}List<AppInfo> appInfoList = appInfoMapper.selectList(new LambdaQueryWrapper<AppInfo>().gt(AppInfo::getVersion, version));wxResponse.setData(appInfoList);return wxResponse;
}

最后说说这个 app_info 表的结构,就两列, version 存版本号, content 存一些相关内容,表的注释写的是“小程序版本表”。

CREATE TABLE `app_info` (`version` varchar(100) DEFAULT NULL,`content` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序版本表';

目前这个办法还挺好用的,能通知到用户去更新,大家要是在开发过程中遇到类似的情况,也可以在评论区一起聊聊是怎么解决的。

http://www.xdnf.cn/news/171937.html

相关文章:

  • 图论---最大流(Dinic)
  • Golang 类型方法
  • 【2025最近Java面试八股】Spring中循环依赖的问题?怎么解决的?
  • 层级时间轮的 Golang 实现原理与实践
  • 环境DNA宏条形码技术,鱼类检测引物如何选择?
  • 基于知识库的客户服务工具
  • Unity Post Processing 小记 【使用泛光实现灯光亮度效果】
  • 2P4M-ASEMI机器人功率器件专用2P4M
  • ShardingSphere-Proxy数据隔离方案:不同用户操作不同的数据库
  • C#进阶学习(十五)关于特性的认识
  • Android10.0 Android.bp文件详解,以及内置app编写Android.bp文件
  • Spring 与 ActiveMQ 的深度集成实践(四)
  • 【大模型】图像生成 - Stable Diffusion 深度解析:原理、应用与实战指南
  • 基于STM32、HAL库的ADS1220IRVAR模数转换器ADC驱动程序设计
  • 服务器备份,服务器想要备份文件内容有哪些方法?
  • 【技术派后端篇】技术派并发访问性能优化
  • 多级缓存入门:Caffeine、Lua、OpenResty、Canal
  • 【上位机——MFC】文档
  • C语言结构体赋值与深拷贝
  • django admin 设置字段不可编辑
  • YOLO目标检测之模型剪枝
  • Go RPC 服务方法签名的要求
  • 有关爬虫中数据库的封装——单线程爬虫
  • Tauri窗口与界面管理:打造专业桌面应用体验 (入门系列五)
  • 【Fifty Project - D18】
  • 【2025 最新前沿 MCP 教程 06】构建你的第一个 MCP 服务器:分步指南(源码讲解)
  • 多节管件连接套总成弯扭复合旋转疲劳试验系统
  • PostSwigger Web 安全学习:CSRF漏洞2
  • 现代多核调度器的本质 调度三重奏
  • Github 热点项目 rowboat 一句话生成多AI智能体!5分钟搭建企业级智能工作流系统