diff --git a/pages.json b/pages.json
index 0c14191fe827abb4c2293da084130d17794cb86b..c4149f257259f94e47cb2aba344cb8b8d259c616 100644
--- a/pages.json
+++ b/pages.json
@@ -1233,6 +1233,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 c9fb59063c9af4392b02362946a28fe8c176e20f..c694b947d24d26170c232e4a3d22f7c50d6b4a4d 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 01dd25b917d4979416c90b4dda7a73c068e554bb..2e87e6754f19b07a755584f610b962ee84a4575c 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 7654638001349355afdfb4d410395ca0f5887c28..65dabb1eeab1fe60b3941da3ae3928d791dcd1ef 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 76b1ffe5376603d86e7ac295e4d52e5d4ddf0284..319362facedd8ea2bd09357254ca328073723f87 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 4a0af00f4aa79b0eca2d69762fb8cac257b0c1e8..877d62a97f36edfccb809950f435a0a744dd4e0f 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 d8ecf2d2c89660640c89c50c335da213bd6bd708..81757dbabbb80ff36953810c33ac022bf94227e2 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
}
});
}