目前热更新地址必须写死在manifest文件里,这带来的问题是不能使用CDN并且不能在目标地址变动时动态切换目标地址,希望能把这个地址暴露出来,使其动态可配置
关于这个需求,麻烦给出更详细的例子说明下
这个我来描述一下吧, 这两天刚好在处理热更新的问题。
假设我们的热更新目录为:
http://xxx/hotfix/
依照官方教程, 我们现在的热更新流程是这样的。
1 . 发布客户端时,版本号为 1.1.0. 此时使用工具, 生成当前版本的脚本文件, 包含 version.manifest + project.manifest.
** 其热更新机制被隐藏在底层的 AssetsManagerEx中。 需要热更新时, 会首先对比本地的 version.manifest 与远端的 version.manifest. 而远端的version.manifest 的路径是什么呢? 其实,就是在此次生成的 project.manifest 中,也就是说,下一个 “热更新版本的地址” 已经被固定在了此次的版本中。 **
2 . 当我需要发布热更新时, 版本号为 1.2.0。 此时使用工具, 生成对应的脚本文件, 并上传至热更新目录:http://xxx/hotfix/
为了使下载体验更好, 我们往往会把 http://xxx/hotfix 加入CDN。 在游戏正式发布之前我们往往会做发布前的最后一次测试(针对线上版本),这时我们会更新CDN, 让1.2.0 版本生效。 但这问题来了, 因为我们是上线前的最后一次测试, 此时生效,无疑是把一个不稳定的版本发布给了用户(因为路径名是完全一致的); 而如果不更新CDN, 则无法进行这上线前的最后一次测试。
所以, 我期待的热更新路径是这样的一个结构:
http://xxx/hotfix/1.1.0/version.manifest
http://xxx/hotfix/1.1.0/project.manifest
http://xxx/hotfix/1.1.0/*
http://xxx/hotfix/1.2.0/version.manifest
http://xxx/hotfix/1.2.0/project.manifest
http://xxx/hotfix/1.2.0/*
我们的版本号, 是可以通过前期控制来获取到的, 但现在的问题就是刚才我加*说明的, 热更新版本的地址是写死在上一个版本的 project.manifest 中的, 我无法动态的设置最新版本的 version.manifest 的地址。
谢谢反馈,我考虑下这个需求,如果开放新的 API 应该会是 1.5 的内容
@cc2012520 @beijixing 可以这么做,找到包内的project.manifest文件,使用jsb.fileUtils.getStringFromFile和JSON.parse将manifest文件的内容转化为转化为一个字典,然后packageUrl就可以通过cdn地址+版本号进行设置了,最后使用JSON.stringify和jsb.fileUtils.writeStringToFile将改好的manifest文件再写回去,就OK了。
好的, 感谢, 我试验一下~
为了防止用户更新到不稳定的版本,我们是在内网架设了DNS来测试更新补丁的,建议你们也考虑这么做,我们之前就遇到部分国家的CDN没能及时同步而导致玩家还是更新到不稳定版本的问题。
@panda 这个函数为什么不干脆这么实现呢?
static int cmpVersion(const std::string& v1, const std::string& v2)
{
return strcmp(v1.c_str(), v2.c_str());
}
现在的实现,只识别了前4位,1.4.0.1 与 1.4.0.1.2 在它看来是相等的。。。
我们就是从你这个实现改过来的,这样的话
1.3 > 1.11
被很多人骂过了,现在的实现可以满足大多数需求了,如果还是不满足,可以看 tutorial 中的 JS compare handler:
这边热更有个问题蛮奇怪的, 假如一下子有100个更新包需要更新, 这时的更新就会出现异常, 更新进度没有了
不太明白你的意思
panda 你好,请教个问题 我从github下载了份Creator 热更新示例,用creator模拟器运行部了, log:Simulator: 1415:TypeError: this._am.setVerifyCallback is not a function
at a (D:\Project\tutorial-hot-update-master\library\bundle.project.js?009:NaN:0)
然后我构建原生android 装手机上 也是一片漆黑。是不是我哪里弄错了,望解答下。
需要用 1.4 版本才可以哦
最近在研究热更 根据你的示例代码 这个cc.sys.ENABLE_GC_FOR_NATIVE_OBJECTS 判断什么的呢?在网上没查到
mark
