|
@@ -0,0 +1,62 @@
|
|
|
+ import { CapacitorUpdater } from "@capgo/capacitor-updater";
|
|
|
+import { App } from "@capacitor/app";
|
|
|
+import semver from "semver";
|
|
|
+import { showDialog } from "vant";
|
|
|
+
|
|
|
+const HOST = "https://nim.angeltokens.io/updates/down/";
|
|
|
+const UPDATE_URL = HOST + "update.json";
|
|
|
+
|
|
|
+// 检查并更新
|
|
|
+export async function checkAndUpdate() {
|
|
|
+ // 判断是web 还是 ios
|
|
|
+ if (Capacitor.getPlatform() === "web") {
|
|
|
+ console.log("web 端不支持更新");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1. 拉取元数据
|
|
|
+ const meta = await fetch(UPDATE_URL).then((r) => r.json());
|
|
|
+ console.log("2. 基本校验", meta);
|
|
|
+
|
|
|
+ // 通知
|
|
|
+ if (meta.mandatory) {
|
|
|
+ showDialog({
|
|
|
+ title: meta.notificationTitle,
|
|
|
+ message: meta.notificationBody,
|
|
|
+ }).then(async () => {});
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 基本校验
|
|
|
+ const current = await CapacitorUpdater.current();
|
|
|
+ const { version } = await App.getInfo();
|
|
|
+
|
|
|
+ if (
|
|
|
+ current.bundle.version != "builtin" &&
|
|
|
+ semver.lt(current.bundle.version, meta.version)
|
|
|
+ ) {
|
|
|
+ console.log("无新版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (version && semver.lt(version, meta.minBinaryVersion)) {
|
|
|
+ console.log("壳子太旧");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 4. 下载(带进度)
|
|
|
+ const update = await CapacitorUpdater.download({
|
|
|
+ url: `${HOST}v${meta.version}.zip`,
|
|
|
+ version: meta.version,
|
|
|
+ checksum: meta.checksum,
|
|
|
+ });
|
|
|
+
|
|
|
+ // 通知
|
|
|
+ showDialog({
|
|
|
+ title: `v ${meta.version} 已發布`,
|
|
|
+ confirmButtonText: "立即體驗",
|
|
|
+ message: meta.upDataDescription,
|
|
|
+ }).then(async () => {
|
|
|
+ // 重启
|
|
|
+ await CapacitorUpdater.set(update);
|
|
|
+ console.log("✅ 已切换到新版本,准备重启");
|
|
|
+ await App.exitApp(); // 冷启动加载新 bundle
|
|
|
+ });
|
|
|
+}
|