/** * 小程序新版本强制更新(微信官方 UpdateManager 机制) * * 说明: * - 微信冷启动时会自动检查代码包版本并静默下载新版本,下载完成后才触发 onUpdateReady; * - applyUpdate() 会立即重启小程序并应用新包,这是微信生态下「强制更新」的标准手段; * - 不依赖 manifest.json 的 versionName/versionCode,版本判断由微信后台代码包版本自动完成; * - onUpdateReady 仅在体验版/正式版触发,开发版(envVersion=develop)不会触发,属微信正常行为。 * * 文档:docs/superpowers/specs/2026-11-03-miniapp-force-update.md */ export function checkAppUpdate() { // 能力探测:部分基础库/平台不支持 if (typeof uni.getUpdateManager !== 'function') { console.warn('[update] 当前环境不支持 getUpdateManager,跳过更新检测') return } var manager try { manager = uni.getUpdateManager() } catch (e) { console.warn('[update] 获取 UpdateManager 失败,跳过更新检测', e) return } if (!manager) return manager.onCheckForUpdate(function (res) { // res.hasUpdate:仅用于日志,无新版本时不需要任何交互 console.log('[update] 检查更新:', res && res.hasUpdate ? '有新版本' : '已是最新') }) manager.onUpdateReady(function () { // 新版本下载完毕 → 强制弹窗(无取消按钮)→ 用户点确定即重启应用新包 uni.showModal({ title: '发现新版本', content: '小程序已发布新版本,点击「立即更新」后即可使用最新功能。', showCancel: false, confirmText: '立即更新', success: function () { manager.applyUpdate() } }) }) manager.onUpdateFailed(function () { // 下载失败(弱网/存储不足/被微信拒):仅提示,不阻塞主流程 uni.showModal({ title: '更新失败', content: '新版本下载失败,请检查网络后删除小程序重新进入。', showCancel: false, confirmText: '我知道了' }) }) }