check-update.ts 4.9 KB
Newer Older
D
DCloud_LXH 已提交
1 2
import callCheckVersion, { UniUpgradeCenterResult } from "./call-check-version"
// #ifdef UNI-APP-X
D
DCloud_LXH 已提交
3
import { openSchema } from '@/uni_modules/uts-openSchema'
D
DCloud_LXH 已提交
4 5 6 7
// #endif

// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'
D
DCloud_LXH 已提交
8 9 10 11 12 13 14 15

export default function () : Promise<UniUpgradeCenterResult> {
	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 // 安装包下载地址
W
wanganxp 已提交
16

17 18 19 20 21
				// 此处逻辑仅为示例,可自行编写
				if (code > 0) {
					// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
					const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
					if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
W
wanganxp 已提交
22

23 24 25 26 27
					/**
					 * 提示升级一
					 * 使用 uni.showModal
					 */
					// return updateUseModal(uniUpgradeCenterResult)
W
wanganxp 已提交
28

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
					// #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
46

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
					/**
					 * 提示升级二
					 * 官方适配的升级弹窗,可自行替换资源适配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)
                }
W
wanganxp 已提交
69
          })
70
					// #endif
W
wanganxp 已提交
71

72 73 74 75 76 77 78 79 80 81 82
					return resolve(uniUpgradeCenterResult)
				} else if (code < 0) {
					console.error(message)
					return reject(uniUpgradeCenterResult)
				}
				return resolve(uniUpgradeCenterResult)
			}).catch((err) => {
				reject(err)
			})
		});
	}
W
wanganxp 已提交
83

D
DCloud_LXH 已提交
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
/**
 * 使用 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('iOS') : false;

	// #ifndef UNI-APP-X
	let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'
	// #endif
	// #ifdef UNI-APP-X
	let confirmText = '立即下载更新'
	// #endif
W
wanganxp 已提交
107

108 109 110 111 112 113 114
		return uni.showModal({
			title,
			content: contents,
			showCancel: !is_mandatory,
			confirmText,
			success: res => {
				if (res.cancel) return;
W
wanganxp 已提交
115

D
DCloud_LXH 已提交
116 117 118 119 120 121 122 123 124 125
			if (isiOS) {
				// iOS 平台跳转 AppStore
				// #ifndef UNI-APP-X
				plus.runtime.openURL(url);
				// #endif
				// #ifdef UNI-APP-X
				openSchema(url)
				// #endif
				return;
			}
W
wanganxp 已提交
126

127 128 129 130
				uni.showToast({
					title: '后台下载中……',
					duration: 1000
				});
W
wanganxp 已提交
131

D
DCloud_LXH 已提交
132 133 134 135 136 137 138 139 140
			// wgt 和 安卓下载更新
			uni.downloadFile({
				url,
				success: res => {
					if (res.statusCode !== 200) {
						console.error('下载安装包失败');
						return;
					}
					// 下载好直接安装,下次启动生效
141
					// uni-app x 项目没有 plus5+ 故使用条件编译
D
DCloud_LXH 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
					// #ifndef UNI-APP-X
					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
						});
					});
					// #endif

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
					// #ifdef UNI-APP-X
					uni.installApk({
						filePath: res.tempFilePath,
						success: () => {
							uni.showModal({
								title: '安装成功请手动重启'
							});
						},
						fail: err => {
							uni.showModal({
								title: '更新失败',
								content: err.errMsg,
								showCancel: false
							});
						}
					});
					// #endif
D
DCloud_LXH 已提交
187 188 189 190 191 192
				}
			});
		}
	});
	// #endif
}