123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- import callCheckVersion, { UniUpgradeCenterResult } from "./call-check-version"
- import { platform_iOS } from './utils'
- // #ifdef UNI-APP-X
- import { openSchema } from '@/uni_modules/uts-openSchema'
- // #endif
- // 推荐再App.vue中使用
- const PACKAGE_INFO_KEY = '__package_info__'
- // #ifdef APP-HARMONY
- export default function (component?: any) : Promise<UniUpgradeCenterResult> {
- // #endif
- // #ifndef APP-HARMONY
- export default function () : Promise<UniUpgradeCenterResult> {
- // #endif
- return new Promise<UniUpgradeCenterResult>((resolve, reject) => {
- callCheckVersion().then(async (uniUpgradeCenterResult) => {
- // NOTE uni-app x 3.96 解构有问题
- const code = uniUpgradeCenterResult.code
- const message = uniUpgradeCenterResult.message
- const url = uniUpgradeCenterResult.url // 安装包下载地址
- // 此处逻辑仅为示例,可自行编写
- if (code > 0) {
- // 腾讯云获取下载链接
- if (/^cloud:\/\//.test(url)) {
- const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
- if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
- }
- /**
- * 提示升级一
- * 使用 uni.showModal
- */
- // return updateUseModal(uniUpgradeCenterResult)
- // #ifndef UNI-APP-X
- // 静默更新,只有wgt有
- if (uniUpgradeCenterResult.is_silently) {
- uni.downloadFile({
- url,
- success: res => {
- if (res.statusCode == 200) {
- // 下载好直接安装,下次启动生效
- plus.runtime.install(res.tempFilePath, {
- force: false
- });
- }
- }
- });
- return;
- }
- // #endif
- /**
- * 提示升级二
- * 官方适配的升级弹窗,可自行替换资源适配UI风格
- */
- // #ifndef UNI-APP-X
- // #ifdef APP-PLUS
- uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
- 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)
- }
- })
- // #endif
- // #ifdef APP-HARMONY
- if (component) {
- component.show(true, uniUpgradeCenterResult)
- } else {
- reject({
- code: -1,
- message: '在 HarmonyOS Next 平台请传递组件使用'
- })
- }
- // #endif
- // #endif
- // #ifdef UNI-APP-X
- uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
- uni.openDialogPage({
- url: `/uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
- disableEscBack: true,
- fail: (err) => {
- console.error('更新弹框跳转失败', err)
- uni.removeStorageSync(PACKAGE_INFO_KEY)
- }
- })
- // #endif
- return resolve(uniUpgradeCenterResult)
- } else if (code < 0) {
- console.error(message)
- return reject(uniUpgradeCenterResult)
- }
- return resolve(uniUpgradeCenterResult)
- }).catch((err) => {
- reject(err)
- })
- });
- }
- /**
- * 使用 uni.showModal 升级
- */
- function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
- // #ifdef APP
- const {
- title, // 标题
- contents, // 升级内容
- is_mandatory, // 是否强制更新
- url, // 安装包下载地址
- type,
- platform
- } = packageInfo;
- let isWGT = type === 'wgt'
- let isiOS = !isWGT ? platform.includes(platform_iOS) : false;
- // #ifndef UNI-APP-X
- let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
- // #endif
- // #ifdef UNI-APP-X
- let confirmText = '立即下载更新'
- // #endif
- return uni.showModal({
- title,
- content: contents,
- showCancel: !is_mandatory,
- confirmText,
- success: res => {
- if (res.cancel) return;
- if (isiOS) {
- // iOS 平台跳转 AppStore
- // #ifndef UNI-APP-X
- plus.runtime.openURL(url);
- // #endif
- // #ifdef UNI-APP-X
- openSchema(url)
- // #endif
- return;
- }
- uni.showToast({
- title: '后台下载中……',
- duration: 1000
- });
- // wgt 和 安卓下载更新
- uni.downloadFile({
- url,
- success: res => {
- if (res.statusCode !== 200) {
- console.error('下载安装包失败');
- return;
- }
- // 下载好直接安装,下次启动生效
- // uni-app x 项目没有 plus5+ 故使用条件编译
- // #ifndef UNI-APP-X
- plus.runtime.install(res.tempFilePath, {
- force: false
- }, () => {
- if (is_mandatory) {
- //更新完重启app
- // #ifdef APP-PLUS
- plus.runtime.restart();
- // #endif
- // #ifdef APP-HARMONY
- uni.showModal({
- title: '安装成功',
- content: '请手动重启应用',
- showCancel: false,
- success: res => {
- plus.runtime.quit();
- }
- });
- // #endif
- return;
- }
- uni.showModal({
- title: '安装成功是否重启?',
- success: res => {
- if (res.confirm) {
- //更新完重启app
- // #ifdef APP-PLUS
- plus.runtime.restart();
- // #endif
- // #ifdef APP-HARMONY
- plus.runtime.quit();
- // #endif
- }
- }
- });
- }, err => {
- uni.showModal({
- title: '更新失败',
- content: err
- .message,
- showCancel: false
- });
- });
- // #endif
- // #ifdef UNI-APP-X
- uni.installApk({
- filePath: res.tempFilePath,
- success: () => {
- uni.showModal({
- title: '安装成功请手动重启'
- });
- },
- fail: err => {
- uni.showModal({
- title: '更新失败',
- content: err.errMsg,
- showCancel: false
- });
- }
- });
- // #endif
- }
- });
- }
- });
- // #endif
- }
|