游戏已上架,重新发布新版本并在华为后台设置强制更新,新版本发布后强制更新不起作用
场景描述
游戏已上架,因需求更新,我们想让已安装游戏的玩家强制更新游戏,但是发布新版本后,强制更新不起作用,更新弹窗弹出后用户点击“退出应用”,仍然能进入游戏。

问题分析
我重新参考了华为官方指导文档:游戏升级,文档总结为两点:
- 如果游戏选择了强制升级,代码中必须要设置 AppUpdateClient.showUpdateDialog 的参数 mustBtnOne为true,否则将导致无法准确弹出强制升级窗口。
- 游戏版本发布时,在 AppGallery Connect 后台中勾选“是否强制更新”。

对此,我自检后发现后台选择了强制更新,但是 AppUpdateClient.showUpdateDialog 的参数 mustBtnOne,我传的是 false。但是我仍有一点不解,既然 SDK 做的升级弹窗中有“退出应用”的按钮,为什么点击之后,实际没有退出呢?
带着疑问,我联系了华为技术支持(可提单联系)。技术回复说现网文档中有个说明漏掉了(后续文档中会添加优化):
根据文档的代码,检测到新版本后运行到 onUpdateInfo 方法处,返回带有应用信息的 intent 后,获取 intent 携带的 compulsoryUpdateCancel 字段,该字段即为游戏的新版本在提交发布时后台是否勾选了强制更新。若为 false,表示没有勾选强制更新,这时候不用做处理。若为 true,表示勾选了强制更新,需要开发者自行处理退出游戏逻辑,这样就能达到让玩家强更更新的目的。

像我们的游戏,就是因为这边没有自己做退出处理,所以才导致点击了“退出应用”还是进入了游戏。
另外,华为技术支持还向我延伸说明了游戏升级提示框里按钮的区别。
1. 若 AppUpdateClient.showUpdateDialog 方法的参数 mustBtnOne 设置为 true,后台勾选“强制更新”,此时更新框里只有“立即更新”一个按钮,实现强制更新的目的。

2. 若 AppUpdateClient.showUpdateDialog 方法的参数 mustBtnOne 设置为 true,后台没有勾选“强制更新”,此时更新框里有“以后再说”和“立即更新”两个按钮,这种场景是非强制更新的。

3. 若 AppUpdateClient.showUpdateDialog 方法的参数 mustBtnOne 设置为 false,后台勾选“强制更新”,此时更新框里有“退出应用”和“立即更新”两个按钮,这种场景需要开发者自行做退出游戏逻辑(就是我们游戏这个案例),实现强制更新的目的。
4. 若 AppUpdateClient.showUpdateDialog 方法的参数 mustBtnOne 设置为 false,后台也没有勾选“强制更新”,此时更新框里有“以后再说”和“立即更新”两个按钮,这种场景也是非强制更新的。
问题解决
综上,我可以把 AppUpdateClient.showUpdateDialog 方法的参数 mustBtnOne 设置改为 true 或者添加判断 compulsoryUpdateCancel 字段以处理退出游戏的逻辑,重新出包提交审核后,问题解决。
浙公网安备 33010602011771号