最近项目出现一个热更新的问题,特此在这记录一下踩过的坑。
项目环境: LayaBox 1.8.5,Native v1.0.5,使用layadcc更新机制
问题描述: 项目原本在ios上有一个正常的版本在运行了,期间的热更新是没有任何问题的。后面又提审了一个版本,在这ios审核的期间,又热更了一些新的内容。审核通过之后,不去appstore主动更新是没问题的(提审只是换了图标),问题就在于,主动去appstore更新之后,新包的资源和代码会覆盖掉原来的,打开游戏就不再会热更,除非后端再有新的内容更新。
寻找问题: 在ios工程index.js文件里面,有个updateDcc方法。不难发现,整个资源包的校验码assetsid在提审期间热更之后,已经是最新的了,重新下载新包,assetsid并不会改变,所以新包直接就跳过热更了。
解决问题: 直接跳过判断校验码assetsid,每次都去下载dcc主文件filetable.bin,这样每次都能取到最新的资源和代码的校验值了。(直接屏蔽掉updateDcc方法case2的判断即可)
```case 2:
//if (!(curassets != assetsidStr)) return [3, 7];
log('need update;');
txtdcc = '';
return [4, asyncs.downloadSync(urlpath + 'update/filetable.bin?' + assetsidStr, true, null)];