| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /**
- * 小程序新版本强制更新(微信官方 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: '我知道了'
- })
- })
- }
|