From a0394b8b3ed1f454ea8f1cc0da288f129259e5f6 Mon Sep 17 00:00:00 2001
From: DCloud_LXH <283700113@qq.com>
Date: Wed, 30 Oct 2024 15:22:57 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E5=8D=87=E7=BA=A7=E4=B8=AD=E5=BF=83):=20?=
=?UTF-8?q?=E5=8D=87=E7=BA=A7=E8=87=B3=200.9.0=20=E4=BD=BF=E7=94=A8=20dial?=
=?UTF-8?q?ogPage=20=E5=AE=9E=E7=8E=B0=E9=9C=80=E8=A6=81=20HBuilderX=204.3?=
=?UTF-8?q?1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pages.json | 9 +
pages/tabBar/component.uvue | 20 +-
.../uni-upgrade-center-app/changelog.md | 2 +
.../uni-upgrade-center-app/package.json | 2 +-
.../uni-app-x/upgrade-popup.uvue} | 1005 +++++++++--------
.../utils/call-check-version.ts | 30 +-
.../utils/check-update.ts | 179 +--
7 files changed, 629 insertions(+), 618 deletions(-)
rename uni_modules/uni-upgrade-center-app/{components/uni-upgrade-center-app/uni-upgrade-center-app.uvue => pages/uni-app-x/upgrade-popup.uvue} (60%)
diff --git a/pages.json b/pages.json
index 75a12f70..798f570b 100644
--- a/pages.json
+++ b/pages.json
@@ -1259,6 +1259,15 @@
}
},
// #endif
+ // #ifdef APP-ANDROID || APP-IOS
+ {
+ "path" : "uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ },
+ // #endif
{
"path": "pages/tabBar/CSS",
"style": {
diff --git a/pages/tabBar/component.uvue b/pages/tabBar/component.uvue
index c9fb5906..c694b947 100644
--- a/pages/tabBar/component.uvue
+++ b/pages/tabBar/component.uvue
@@ -39,10 +39,6 @@
-
-
-
-
@@ -80,19 +76,7 @@
} else {
uni.navigateTo({ url })
}
- },
- // #ifdef UNI-APP-X && APP
- upgradePopupShow() {
- console.log('upgradePopup show');
- if (!this.pageHiden) {
- uni.hideTabBar()?.catch(_ => { })
- }
- }
- , upgradePopupClose() {
- console.log('upgradePopup close');
- uni.showTabBar()?.catch(_ => { })
}
- // #endif
},
// #ifdef WEB
watch: {
@@ -118,11 +102,11 @@
if (res.needAuthorization) {
uni.onPrivacyAuthorizationChange((res) => {
if (!res.needAuthorization) {
- checkUpdate(this.$refs['upgradePopup'] as UniUpgradeCenterAppComponentPublicInstance)
+ checkUpdate()
}
})
} else {
- checkUpdate(this.$refs['upgradePopup'] as UniUpgradeCenterAppComponentPublicInstance)
+ checkUpdate()
}
}
})
diff --git a/uni_modules/uni-upgrade-center-app/changelog.md b/uni_modules/uni-upgrade-center-app/changelog.md
index 01dd25b9..2e87e675 100644
--- a/uni_modules/uni-upgrade-center-app/changelog.md
+++ b/uni_modules/uni-upgrade-center-app/changelog.md
@@ -1,3 +1,5 @@
+## 0.9.0(2024-10-30)
+- **重要更新** 在 uni-app x 项目中弃用之前弹窗方案使用[dialogPage](https://doc.dcloud.net.cn/uni-app-x/api/dialog-page.html)实现,需要 `HBuilderX 4.31+`
## 0.8.5(2024-10-26)
- 优化 去除不必要代码
## 0.8.4(2024-10-26)
diff --git a/uni_modules/uni-upgrade-center-app/package.json b/uni_modules/uni-upgrade-center-app/package.json
index 76546380..65dabb1e 100644
--- a/uni_modules/uni-upgrade-center-app/package.json
+++ b/uni_modules/uni-upgrade-center-app/package.json
@@ -1,7 +1,7 @@
{
"id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App",
- "version": "0.8.5",
+ "version": "0.9.0",
"description": "uni升级中心 - 客户端检查更新",
"keywords": [
"uniCloud",
diff --git a/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue b/uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup.uvue
similarity index 60%
rename from uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue
rename to uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup.uvue
index 76b1ffe5..319362fa 100644
--- a/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue
+++ b/uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup.uvue
@@ -1,496 +1,511 @@
-
-
-
-
-
- {{title}}
-
-
-
-
-
-
-
- {{subTitle}}
- v{{version}}
-
-
-
-
- {{contents}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ return false
+ },
+ methods: {
+ jumpToAppStore() {
+ openSchema(this.url)
+ },
+ show(localPackageInfo : UniUpgradeCenterResult | null) {
+ if (localPackageInfo === null) return;
+
+ for (let key in localPackageInfo) {
+ if (requiredKey.indexOf(key) != -1 && localPackageInfo[key] === null) {
+ console.error(`参数 ${key} 必填,请检查后重试`)
+ this.closePopup()
+ return;
+ }
+ }
+
+ this.title = localPackageInfo.title
+ this.url = localPackageInfo.url
+ this.contents = localPackageInfo.contents
+ this.is_mandatory = localPackageInfo.is_mandatory
+ this.platform = localPackageInfo.platform
+ this.version = localPackageInfo.version
+ this.store_list = localPackageInfo.store_list
+ },
+ askAbortDownload() {
+ uni.showModal({
+ title: '是否取消下载?',
+ cancelText: '否',
+ confirmText: '是',
+ success: res => {
+ if (res.confirm) {
+ if (downloadTask !== null) downloadTask!.abort()
+ this.closePopup()
+ }
+ }
+ });
+ },
+ closeUpdate() {
+ if (this.downloading && !this.needNotificationProgress) {
+ this.askAbortDownload()
+ return;
+ }
+
+ this.closePopup()
+ },
+ closePopup() {
+ this.downloadSuccess = false
+ this.downloading = false
+ this.downLoadPercent = 0
+ this.downloadedSize = 0
+ this.packageFileSize = 0
+ this.tempFilePath = ''
+
+ this.installing = false
+ this.installed = false
+
+ uni.closeDialogPage({
+ dialogPage: this.$page
+ })
+ },
+ updateApp() {
+ const checkStoreScheme = this.checkStoreScheme()
+ if (checkStoreScheme !== null) {
+ checkStoreScheme
+ .then(_ => { })
+ .catch(() => { this.downloadPackage() })
+ .finally(() => {
+ openSchemePromise = null
+ })
+ } else { this.downloadPackage() }
+ },
+ // 跳转应用商店
+ checkStoreScheme() : Promise | null {
+ if (this.store_list !== null) {
+ const storeList : StoreListItem[] = this.store_list!.filter((item : StoreListItem) : boolean => item.enable)
+ if (storeList.length > 0) {
+ if (openSchemePromise === null) {
+ openSchemePromise = Promise.reject() as Promise
+ }
+ storeList
+ .sort((cur : StoreListItem, next : StoreListItem) : number => next.priority - cur.priority)
+ .map((item : StoreListItem) : string => item.scheme)
+ .reduce((promise : Promise, cur : string) : Promise => {
+ openSchemePromise = promise.catch(() : Promise => openSchema(cur))
+ return openSchemePromise!
+ }, openSchemePromise!)
+ return openSchemePromise!
+ }
+ }
+
+ return null
+ },
+ downloadPackage() {
+ //下载包
+ downloadTask = uni.downloadFile({
+ url: this.url,
+ success: res => {
+ if (res.statusCode == 200) {
+ this.tempFilePath = res.tempFilePath
+ this.downLoadComplete()
+ }
+ },
+ fail: err => {
+ console.log('downloadFile err: ', err);
+ }
+ });
+ if (downloadTask !== null) {
+ this.downloading = true;
+ if (this.needNotificationProgress) {
+ this.closePopup()
+ }
+ downloadTask!.onProgressUpdate(res => {
+ this.downLoadPercent = parseFloat(res.progress.toFixed(0));
+ this.downloadedSize = parseFloat((res.totalBytesWritten / Math.pow(1024, 2)).toFixed(2));
+ this.packageFileSize = parseFloat((res.totalBytesExpectedToWrite / Math.pow(1024, 2)).toFixed(2));
+
+ if (this.needNotificationProgress) {
+ createNotificationProgress({
+ title: "升级中心正在下载安装包……",
+ content: `${this.downLoadPercent}%`,
+ progress: this.downLoadPercent,
+ onClick: () => {
+ if (!this.downloadSuccess) {
+ this.askAbortDownload()
+ }
+ }
+ } as CreateNotificationProgressOptions)
+ }
+ });
+ }
+ },
+ downLoadComplete() {
+ this.downloadSuccess = true;
+ this.downloading = false;
+
+ this.downLoadPercent = 0
+ this.downloadedSize = 0
+ this.packageFileSize = 0
+
+ downloadTask = null;
+
+ if (this.needNotificationProgress) {
+ finishNotificationProgress({
+ title: "安装升级包",
+ content: "下载完成",
+ onClick() { }
+ } as FinishNotificationProgressOptions)
+
+ this.installPackage();
+ return
+ }
+
+ // 强制更新,直接安装
+ if (this.is_mandatory) {
+ this.installPackage();
+ }
+ },
+ installPackage() {
+ this.installing = true;
+ // #ifdef APP
+ uni.installApk({
+ filePath: this.tempFilePath,
+ success: _ => {
+ this.installing = false;
+ this.installed = true;
+ },
+ fail: err => {
+ console.error('installApk fail', err);
+ // 安装失败需要重新下载安装包
+ this.installing = false;
+ this.installed = false;
+
+ uni.showModal({
+ title: '更新失败,请重新下载',
+ content: `uni.installApk 错误码 ${err.errCode}`,
+ showCancel: false
+ });
+ }
+ });
+
+ // 安装跳出覆盖安装,此处直接返回上一页
+ if (!this.is_mandatory) {
+ uni.navigateBack()
+ }
+ // #endif
+ }
+ }
+ }
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts b/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts
index 4a0af00f..877d62a9 100644
--- a/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts
+++ b/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts
@@ -26,7 +26,7 @@ export type UniUpgradeCenterResult = {
type : string // "native_app" | "wgt"
store_list : StoreListItem[] | null
- min_uni_version : string | null // 升级 wgt 的最低 uni-app 版本
+ min_uni_version : string | null // 升级 wgt 的最低 uni-app 版本
}
export default function () : Promise {
@@ -80,20 +80,20 @@ export default function () : Promise {
const code = res.result['code']
const codeIsNumber = ['Int', 'Long', 'number'].includes(typeof code)
if (codeIsNumber) {
- if ((code as number) == 0) {
- reject({
- code: res.result['code'],
- message: res.result['message']
- })
- } else if ((code as number) < 0) {
- reject({
- code: res.result['code'],
- message: res.result['message']
- })
- } else {
- const result = JSON.parse(JSON.stringify(res.result)) as UniUpgradeCenterResult
- resolve(result)
- }
+ if ((code as number) == 0) {
+ reject({
+ code: res.result['code'],
+ message: res.result['message']
+ })
+ } else if ((code as number) < 0) {
+ reject({
+ code: res.result['code'],
+ message: res.result['message']
+ })
+ } else {
+ const result = JSON.parse(JSON.stringify(res.result)) as UniUpgradeCenterResult
+ resolve(result)
+ }
}
}).catch((err : any | null) => {
const error = err as UniCloudError
diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update.ts b/uni_modules/uni-upgrade-center-app/utils/check-update.ts
index d8ecf2d2..81757dba 100644
--- a/uni_modules/uni-upgrade-center-app/utils/check-update.ts
+++ b/uni_modules/uni-upgrade-center-app/utils/check-update.ts
@@ -6,13 +6,7 @@ import { openSchema } from '@/uni_modules/uts-openSchema'
// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
-// uni-app 项目无法从 vue 中导出 ComponentPublicInstance 类型,故使用条件编译
-// #ifdef UNI-APP-X
-export default function (component : ComponentPublicInstance | null = null) : Promise {
-// #endif
-// #ifndef UNI-APP-X
export default function () : Promise {
-// #endif
return new Promise((resolve, reject) => {
callCheckVersion().then(async (uniUpgradeCenterResult) => {
// NOTE uni-app x 3.96 解构有问题
@@ -20,65 +14,72 @@ export default function () : Promise {
const message = uniUpgradeCenterResult.message
const url = uniUpgradeCenterResult.url // 安装包下载地址
- // 此处逻辑仅为示例,可自行编写
- if (code > 0) {
- // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
- const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
- if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
+ // 此处逻辑仅为示例,可自行编写
+ if (code > 0) {
+ // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
+ 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)
+ /**
+ * 提示升级一
+ * 使用 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
+ // #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
- 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)
- }
+ /**
+ * 提示升级二
+ * 官方适配的升级弹窗,可自行替换资源适配UI风格
+ */
+ uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
+ // #ifndef UNI-APP-X
+ 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 UNI-APP-X
+ 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
- // #ifdef UNI-APP-X
- component?.$callMethod('show', true, uniUpgradeCenterResult)
- // #endif
+ // #endif
- return resolve(uniUpgradeCenterResult)
- } else if (code < 0) {
- console.error(message)
- return reject(uniUpgradeCenterResult)
- }
- return resolve(uniUpgradeCenterResult)
- }).catch((err) => {
- reject(err)
- })
- });
- }
+ return resolve(uniUpgradeCenterResult)
+ } else if (code < 0) {
+ console.error(message)
+ return reject(uniUpgradeCenterResult)
+ }
+ return resolve(uniUpgradeCenterResult)
+ }).catch((err) => {
+ reject(err)
+ })
+ });
+ }
/**
* 使用 uni.showModal 升级
@@ -104,13 +105,13 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
let confirmText = '立即下载更新'
// #endif
- return uni.showModal({
- title,
- content: contents,
- showCancel: !is_mandatory,
- confirmText,
- success: res => {
- if (res.cancel) return;
+ return uni.showModal({
+ title,
+ content: contents,
+ showCancel: !is_mandatory,
+ confirmText,
+ success: res => {
+ if (res.cancel) return;
if (isiOS) {
// iOS 平台跳转 AppStore
@@ -123,10 +124,10 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
return;
}
- uni.showToast({
- title: '后台下载中……',
- duration: 1000
- });
+ uni.showToast({
+ title: '后台下载中……',
+ duration: 1000
+ });
// wgt 和 安卓下载更新
uni.downloadFile({
@@ -137,7 +138,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
return;
}
// 下载好直接安装,下次启动生效
- // uni-app x 项目没有 plus5+ 故使用条件编译
+ // uni-app x 项目没有 plus5+ 故使用条件编译
// #ifndef UNI-APP-X
plus.runtime.install(res.tempFilePath, {
force: false
@@ -166,23 +167,23 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
});
// #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
+ // #ifdef UNI-APP-X
+ uni.installApk({
+ filePath: res.tempFilePath,
+ success: () => {
+ uni.showModal({
+ title: '安装成功请手动重启'
+ });
+ },
+ fail: err => {
+ uni.showModal({
+ title: '更新失败',
+ content: err.errMsg,
+ showCancel: false
+ });
+ }
+ });
+ // #endif
}
});
}
--
GitLab