/** * 小程序自动更新管理器 * 基于微信官方UpdateManager API实现 * 文档:https://developers.weixin.qq.com/miniprogram/dev/api/base/update/UpdateManager.html */ let updateRetryCount = 0; // 更新重试次数 const MAX_RETRY_COUNT = 3; // 最大重试次数 export default () => { // 检查是否支持UpdateManager if (!wx.canIUse('getUpdateManager')) { console.warn('当前微信版本过低,无法使用 UpdateManager'); return; } const updateManager = wx.getUpdateManager(); // 监听检查更新结果 updateManager.onCheckForUpdate(function (res) { console.log('检查更新结果:', res); if (res.hasUpdate) { console.log('发现新版本,开始下载...'); // 显示下载提示 wx.showToast({ title: '发现新版本,正在下载...', icon: 'loading', duration: 2000, mask: true }); } else { console.log('当前已是最新版本'); } }); // 监听新版本下载完成 updateManager.onUpdateReady(function () { console.log('新版本下载完成,准备更新'); wx.hideToast(); // 隐藏下载提示 wx.showModal({ title: '更新提示', content: '新版本已准备就绪,立即重启应用以获得更好的体验?', confirmText: '立即更新', cancelText: '稍后更新', confirmColor: '#576B95', success(res) { if (res.confirm) { console.log('用户确认更新,开始应用新版本'); // 显示更新中提示 wx.showLoading({ title: '更新中...', mask: true }); try { // 应用新版本并重启 updateManager.applyUpdate(); } catch (error) { console.error('应用更新失败:', error); wx.hideLoading(); wx.showToast({ title: '更新失败,请稍后重试', icon: 'error' }); } } else { console.log('用户选择稍后更新'); // 可以在这里设置定时提醒或其他逻辑 setTimeout(() => { wx.showToast({ title: '建议及时更新以获得最佳体验', icon: 'none', duration: 3000 }); }, 30000); // 30秒后提醒 } }, fail(error) { console.error('显示更新弹窗失败:', error); } }); }); // 监听新版本下载失败 updateManager.onUpdateFailed(function (error) { console.error('新版本下载失败:', error); updateRetryCount++; wx.hideToast(); // 隐藏下载提示 if (updateRetryCount < MAX_RETRY_COUNT) { console.log(`第${updateRetryCount}次重试下载更新`); wx.showModal({ title: '下载失败', content: `新版本下载失败,是否重试?(${updateRetryCount}/${MAX_RETRY_COUNT})`, confirmText: '重试', cancelText: '取消', success(res) { if (res.confirm) { // 重新检查更新 setTimeout(() => { console.log('重新检查更新...'); // 这里可以添加重新检查更新的逻辑 // 注意:微信会自动检查更新,开发者无需主动触发 }, 2000); } else { console.log('用户取消重试'); updateRetryCount = 0; // 重置重试次数 } } }); } else { console.error('更新重试次数已达上限'); updateRetryCount = 0; // 重置重试次数 wx.showModal({ title: '更新失败', content: '新版本下载多次失败,请检查网络连接或稍后再试', showCancel: false, confirmText: '知道了', success() { console.log('用户确认更新失败提示'); } }); } }); console.log('UpdateManager 初始化完成'); };