skyouc
2024-12-21 c9c263dc43ad90f95f24a036cee9e6b47afb596c
uni_modules/uni-upgrade-center-app/utils/check-update.js
@@ -1,155 +1,155 @@
import callCheckVersion from './call-check-version'
// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
export default function() {
   // #ifdef APP-PLUS
   return new Promise((resolve, reject) => {
      callCheckVersion().then(async (e) => {
         if (!e.result) return;
         const {
            code,
            message,
            is_silently, // 是否静默更新
            url, // 安装包下载地址
            platform, // 安装包平台
            type // 安装包类型
         } = e.result;
         // 此处逻辑仅为实例,可自行编写
         if (code > 0) {
            // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
            const {
               fileList
            } = await uniCloud.getTempFileURL({
               fileList: [url]
            });
            if (fileList[0].tempFileURL)
               e.result.url = fileList[0].tempFileURL;
            resolve(e)
            // 静默更新,只有wgt有
            if (is_silently) {
               uni.downloadFile({
                  url: e.result.url,
                  success: res => {
                     if (res.statusCode == 200) {
                        // 下载好直接安装,下次启动生效
                        plus.runtime.install(res.tempFilePath, {
                           force: false
                        });
                     }
                  }
               });
               return;
            }
            /**
             * 提示升级一
             * 使用 uni.showModal
             */
            // return updateUseModal(e.result)
            /**
             * 提示升级二
             * 官方适配的升级弹窗,可自行替换资源适配UI风格
             */
            uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
            uni.navigateTo({
               url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
               fail: (err) => {
                  console.error('更新弹框跳转失败', err)
                  uni.removeStorageSync(PACKAGE_INFO_KEY)
               }
            })
         } else if (code < 0) {
            // TODO 云函数报错处理
            console.error(message)
            reject(e)
         }
      }).catch(err => {
         // TODO 云函数报错处理
         console.error(err.message)
         reject(err)
      })
   });
   // #endif
}
/**
 * 使用 uni.showModal 升级
 */
function updateUseModal(packageInfo) {
   const {
      title, // 标题
      contents, // 升级内容
      is_mandatory, // 是否强制更新
      url, // 安装包下载地址
      platform, // 安装包平台
      type // 安装包类型
   } = packageInfo;
   let isWGT = type === 'wgt'
   let isiOS = !isWGT ? platform.includes('iOS') : false;
   let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
   return uni.showModal({
      title,
      content: contents,
      showCancel: !is_mandatory,
      confirmText,
      success: res => {
         if (res.cancel) return;
         // 安装包下载
         if (isiOS) {
            plus.runtime.openURL(url);
            return;
         }
         uni.showToast({
            title: '后台下载中……',
            duration: 1000
         });
         // wgt 和 安卓下载更新
         downloadTask = uni.downloadFile({
            url,
            success: res => {
               if (res.statusCode !== 200) {
                  console.error('下载安装包失败', err);
                  return;
               }
               // 下载好直接安装,下次启动生效
               plus.runtime.install(res.tempFilePath, {
                  force: false
               }, () => {
                  if (is_mandatory) {
                     //更新完重启app
                     plus.runtime.restart();
                     return;
                  }
                  uni.showModal({
                     title: '安装成功是否重启?',
                     success: res => {
                        if (res.confirm) {
                           //更新完重启app
                           plus.runtime.restart();
                        }
                     }
                  });
               }, err => {
                  uni.showModal({
                     title: '更新失败',
                     content: err
                        .message,
                     showCancel: false
                  });
               });
            }
         });
      }
   });
}
import callCheckVersion from './call-check-version'
// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
export default function() {
   // #ifdef APP-PLUS
   return new Promise((resolve, reject) => {
      callCheckVersion().then(async (e) => {
         if (!e.result) return;
         const {
            code,
            message,
            is_silently, // 是否静默更新
            url, // 安装包下载地址
            platform, // 安装包平台
            type // 安装包类型
         } = e.result;
         // 此处逻辑仅为实例,可自行编写
         if (code > 0) {
            // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
            const {
               fileList
            } = await uniCloud.getTempFileURL({
               fileList: [url]
            });
            if (fileList[0].tempFileURL)
               e.result.url = fileList[0].tempFileURL;
            resolve(e)
            // 静默更新,只有wgt有
            if (is_silently) {
               uni.downloadFile({
                  url: e.result.url,
                  success: res => {
                     if (res.statusCode == 200) {
                        // 下载好直接安装,下次启动生效
                        plus.runtime.install(res.tempFilePath, {
                           force: false
                        });
                     }
                  }
               });
               return;
            }
            /**
             * 提示升级一
             * 使用 uni.showModal
             */
            // return updateUseModal(e.result)
            /**
             * 提示升级二
             * 官方适配的升级弹窗,可自行替换资源适配UI风格
             */
            uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
            uni.navigateTo({
               url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
               fail: (err) => {
                  console.error('更新弹框跳转失败', err)
                  uni.removeStorageSync(PACKAGE_INFO_KEY)
               }
            })
         } else if (code < 0) {
            // TODO 云函数报错处理
            console.error(message)
            reject(e)
         }
      }).catch(err => {
         // TODO 云函数报错处理
         console.error(err.message)
         reject(err)
      })
   });
   // #endif
}
/**
 * 使用 uni.showModal 升级
 */
function updateUseModal(packageInfo) {
   const {
      title, // 标题
      contents, // 升级内容
      is_mandatory, // 是否强制更新
      url, // 安装包下载地址
      platform, // 安装包平台
      type // 安装包类型
   } = packageInfo;
   let isWGT = type === 'wgt'
   let isiOS = !isWGT ? platform.includes('iOS') : false;
   let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
   return uni.showModal({
      title,
      content: contents,
      showCancel: !is_mandatory,
      confirmText,
      success: res => {
         if (res.cancel) return;
         // 安装包下载
         if (isiOS) {
            plus.runtime.openURL(url);
            return;
         }
         uni.showToast({
            title: '后台下载中……',
            duration: 1000
         });
         // wgt 和 安卓下载更新
         downloadTask = uni.downloadFile({
            url,
            success: res => {
               if (res.statusCode !== 200) {
                  console.error('下载安装包失败', err);
                  return;
               }
               // 下载好直接安装,下次启动生效
               plus.runtime.install(res.tempFilePath, {
                  force: false
               }, () => {
                  if (is_mandatory) {
                     //更新完重启app
                     plus.runtime.restart();
                     return;
                  }
                  uni.showModal({
                     title: '安装成功是否重启?',
                     success: res => {
                        if (res.confirm) {
                           //更新完重启app
                           plus.runtime.restart();
                        }
                     }
                  });
               }, err => {
                  uni.showModal({
                     title: '更新失败',
                     content: err
                        .message,
                     showCancel: false
                  });
               });
            }
         });
      }
   });
}