问题形容

咱们游戏集成了华为游戏防沉迷性能,提交审核,被驳回:“您的游戏未限度向未成年提供服务的工夫”。

咱们游戏是设置主动登录的,即进入游戏被动调用一次华为登录接口,登录胜利后间接进入游戏。我本人测试防沉迷是失效的,即未成年人帐号登录胜利后,能够弹出防沉迷弹窗,此时能够拦截未成年玩家进入游戏。

在华为经营的疏导下,找到审核提供具体的复现场景:

在互动核心进行反馈,注明您的问题及需要即可。

反馈入口:登陆AGC-所有页面右上角小铃铛处。

审核测试步骤是,进入游戏时,在登录欢送栏弹出之前(或者防沉迷弹窗弹出之前),将游戏切到后盾,在手机界面上弹出华为登录欢送栏之后,再切回到游戏,此时界面上没有华为防沉迷弹窗,而是间接进入游戏了,像是切后盾的时候把那个防沉迷弹窗给卡掉了,以至绕过防沉迷。

问题剖析

我先依照华为官网文档查看咱们的代码是否有破绽,集成防沉迷须要留神以下几点:

在初始化接口中注册实现防沉迷回调OnExit();
登录胜利后调用getCurrentPlayer/getGamePlayer接口获取玩家信息,否则防沉迷不失效。

查看代码,以上两点都符合要求。

而后代码调测发现,切后盾场景下,不弹出防沉迷弹窗,没方法走到初始化时注册好的退出游戏的逻辑,以至防沉迷无奈拦挡未成年进入游戏。

分割华为技术反对(可提单分割)帮忙解决问题。技术回复,游戏切到后盾,此时因为曾经获取不到activity,所以无奈拉起防沉迷弹窗,不能再通过弹窗管制玩家退出游戏了。

华为要求,在调用登录接口(silentSignIn或signInIntent)胜利后,要调用getCurrentPlayer/getGamePlayer接口获取玩家信息playerID/openID,获取胜利后,才可进入游戏。在审核测试的场景下,切换前后台操作,调用getCurrentPlayer/getGamePlayer接口,是拿不到playId/openId的,游戏要禁止玩家进入。

总结就是:管制玩家进入游戏,是要通过是否获取到playId/openId来判断,而不是仅根据防沉迷弹框。

问题解决

依据技术回复,咱们在getCurrentPlayer接口失败回调中提醒用户获取玩家信息失败,并增加禁止玩家进入游戏的逻辑,问题解决。