问题描述
我们游戏集成了华为游戏防沉迷功能,提交审核,被驳回:“您的游戏未限制向未成年提供服务的时间”。
我们游戏是设置自动登录的,即进入游戏主动调用一次华为登录接口,登录成功后直接进入游戏。我自己测试防沉迷是生效的,即未成年人帐号登录成功后,可以弹出防沉迷弹窗,此时可以阻拦未成年玩家进入游戏。
在华为运营的引导下,找到审核提供具体的复现场景:
在互动中心进行反馈,注明您的问题及需求即可。
反馈入口:登陆AGC-所有页面右上角小铃铛处。
审核测试步骤是,进入游戏时,在登录欢迎栏弹出之前(或者防沉迷弹窗弹出之前),将游戏切到后台,在手机界面上弹出华为登录欢迎栏之后,再切回到游戏,此时界面上没有华为防沉迷弹窗,而是直接进入游戏了,像是切后台的时候把那个防沉迷弹窗给卡掉了,以致绕过防沉迷。
问题分析
我先按照华为官方文档检查我们的代码是否有漏洞,集成防沉迷需要注意以下几点:
在初始化接口中注册实现防沉迷回调OnExit();
登录成功后调用getCurrentPlayer/getGamePlayer接口获取玩家信息,否则防沉迷不生效。
检查代码,以上两点都符合要求。
然后代码调测发现,切后台场景下,不弹出防沉迷弹窗,没办法走到初始化时注册好的退出游戏的逻辑,以致防沉迷无法拦截未成年进入游戏。
联系华为技术支持(可提单联系)帮忙解决问题。技术回复,游戏切到后台,此时因为已经获取不到activity,所以无法拉起防沉迷弹窗,不能再通过弹窗控制玩家退出游戏了。
华为要求,在调用登录接口(silentSignIn或signInIntent)成功后,要调用getCurrentPlayer/getGamePlayer接口获取玩家信息playerID/openID,获取成功后,才可进入游戏。在审核测试的场景下,切换前后台操作,调用getCurrentPlayer/getGamePlayer接口,是拿不到playId/openId的,游戏要禁止玩家进入。
总结就是:控制玩家进入游戏,是要通过能否获取到playId/openId来判断,而不是仅依据防沉迷弹框。
问题解决
根据技术回复,我们在getCurrentPlayer接口失败回调中提示用户获取玩家信息失败,并添加禁止玩家进入游戏的逻辑,问题解决。