checkAppUpdate.js 2.1 KB

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