From fad4a70301eb9ada1230282ee2b93c95751901b2 Mon Sep 17 00:00:00 2001 From: gongxh Date: Thu, 8 May 2025 15:01:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcdn=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=A3=80=E6=B5=8B=E4=B8=8D=E5=88=B0=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98;=E5=8F=91=E5=B8=831.0.32?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ package.json | 2 +- src/hotupdate/HotUpdate.ts | 16 +++++++++++++--- src/net/nettools/ReadNetFile.ts | 8 ++------ src/tool/Utils.ts | 30 ++++++++++++++++++++++++++++++ 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79e01ff..d5ec9d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,3 +12,5 @@ - 调整微信和抖音小游戏广告实现 ## 1.0.31 - 修改资源加载器,自定义加载批次,支持按加载批次释放资源,详情见 [资源管理](./docs/Asset.md) +## 1.0.32 +- 修复热更新manifest文件cdn缓存导致检测不到更新的问题 diff --git a/package.json b/package.json index 8952bdb..5eb9b57 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kunpocc", - "version": "1.0.31", + "version": "1.0.32", "description": "基于creator3.0+的kunpocc库", "main": "./dist/kunpocc.cjs", "module": "./dist/kunpocc.mjs", diff --git a/src/hotupdate/HotUpdate.ts b/src/hotupdate/HotUpdate.ts index e3cbadc..46bc9a3 100644 --- a/src/hotupdate/HotUpdate.ts +++ b/src/hotupdate/HotUpdate.ts @@ -8,6 +8,7 @@ import { game, native, sys } from "cc"; import { ICheckUpdatePromiseResult, IPromiseResult } from "../interface/PromiseResult"; import { ReadNetFile } from "../net/nettools/ReadNetFile"; import { debug, warn } from "../tool/log"; +import { Time } from "../tool/Time"; import { Utils } from "../tool/Utils"; import { HotUpdateManager } from "./HotUpdateManager"; @@ -222,7 +223,16 @@ export class HotUpdate { reject({ code: HotUpdateCode.LoadManifestFailed, message: "读取本地project.manifest文件失败" }); return; } - let content = native.fileUtils.getStringFromFile(HotUpdateManager.getInstance().manifestUrl); + let writablePath = HotUpdateManager.getInstance().writablePath; + // 本地内容 + let content = ""; + let cacheManifestPath = writablePath + "project.manifest"; + if (native.fileUtils.isFileExist(cacheManifestPath)) { + content = native.fileUtils.getStringFromFile(cacheManifestPath); + } else { + let manifestUrl = HotUpdateManager.getInstance().manifestUrl; + content = native.fileUtils.getStringFromFile(manifestUrl); + } if (content) { resolve({ code: HotUpdateCode.Succeed, message: "读取本地project.manifest文件成功", manifest: JSON.parse(content) }); } else { @@ -262,8 +272,8 @@ export class HotUpdate { resolve({ code: HotUpdateCode.LatestVersion, message: "已是最新版本" }); } else { // 替换manifest中的内容 - manifest.remoteManifestUrl = versionManifest.remoteManifestUrl; - manifest.remoteVersionUrl = versionManifest.remoteVersionUrl; + manifest.remoteManifestUrl = Utils.addUrlParam(versionManifest.remoteManifestUrl, "timeStamp", `${Time.now()}`); + manifest.remoteVersionUrl = Utils.addUrlParam(versionManifest.remoteVersionUrl, "timeStamp", `${Time.now()}`); manifest.packageUrl = versionManifest.packageUrl; // 注册本地manifest根目录 diff --git a/src/net/nettools/ReadNetFile.ts b/src/net/nettools/ReadNetFile.ts index 9b436b1..dd83a75 100644 --- a/src/net/nettools/ReadNetFile.ts +++ b/src/net/nettools/ReadNetFile.ts @@ -5,18 +5,14 @@ */ import { Time } from "../../tool/Time"; +import { Utils } from "../../tool/Utils"; import { HttpManager } from "../http/HttpManager"; import { IHttpResponse } from "../http/IHttpResponse"; export class ReadNetFile { constructor(res: { url: string, timeout: number, responseType: "text" | "json" | "arraybuffer", onComplete: (data: any) => void, onError: (code: number, message: string) => void }) { // 地址上带时间戳参数 确保每次请求都到服务器上请求最新配置,而不是拿到上次请求的缓存数据 - let url = res.url; - if (url.indexOf("?") > -1) { - url += `&timeStamp=${Time.now()}`; - } else { - url += `?timeStamp=${Time.now()}`; - } + let url = Utils.addUrlParam(res.url, "timeStamp", `${Time.now()}`); HttpManager.get(url, null, res.responseType, { onComplete: (response: IHttpResponse) => { res.onComplete(response.data); diff --git a/src/tool/Utils.ts b/src/tool/Utils.ts index 47a5386..135f4dc 100644 --- a/src/tool/Utils.ts +++ b/src/tool/Utils.ts @@ -47,4 +47,34 @@ export class Utils { return false; } } + + /** + * 获取url参数 + * @param url + */ + public static getUrlParam(url: string): { url: string, params: { [key: string]: string } } { + let result = { url: "", params: {} as { [key: string]: string } }; + let urlArr = url.split('?'); + result.url = urlArr[0]; + if (urlArr.length > 1) { + let paramsArr = urlArr[1].split("&"); + for (let i = 0; i < paramsArr.length; i++) { + let item = paramsArr[i]; + let [key, value] = item.split("="); + result.params[key] = value; + } + } + return result; + } + + /** + * 给url添加参数 + * @param url + * @returns 新的url + */ + public static addUrlParam(url: string, key: string, value: string): string { + let urlData = this.getUrlParam(url); + urlData.params[key] = value; + return urlData.url + "?" + Object.entries(urlData.params).map(([key, value]) => `${key}=${value}`).join("&"); + } } \ No newline at end of file