Files
ai_dianshang/miniprogram/common/updateManager.js

134 lines
3.9 KiB
JavaScript
Raw Normal View History

2025-11-17 13:32:54 +08:00
/**
* 小程序自动更新管理器
* 基于微信官方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 初始化完成');
};