玩家信息统计是指开发者可以从华为游戏服务器获取当前玩家在游戏中的多种统计信息,帮助开发者更深度了解玩家的游戏习惯,以便根据玩家的游戏进度、支付能力等构建更适合该玩家的游戏体验。例如,开发者获知某用户之前很长时间都未登录过游戏,那么此时给与一个较好的回流奖励,会是吸引他后续留下来的好手段。
开发者可以统计的玩家信息包括以下几种。
在线时长:玩家在12个月内的平均在线游戏时长,以分钟为单位。
距离上次上线的时间:玩家上次上线距离现在的天数,最多只统计12个月内的数据。
支付次数:玩家在12个月内游戏内付费总次数。
支付总额区间:当前玩家12个月内总付费额度的区间,以美元为单位。使用1到6的数字表示。
1:无消费
2:10美元以下
3:10美元以上(含10美元),50美元以下
4:50美元以上(含50美元),300美元以下
5:300美元以上(含300美元),1000美元以下
6:1000美元以上。
在线次数:玩家12个月内登录游戏的总次数。
获取当前玩家的统计信息时玩家的华为帐号必须为登录状态。
用户必须打开华为应用市场(10.3及以上版本)中的游戏服务开关才能使用玩家信息统计功能。如果用户没有开启游戏服务开关,当游戏调用玩家信息统计相关接口时HMS SDK会自动拉起华为应用市场的游戏服务开关页面引导用户打开开关,如果用户未打开游戏服务开关,将返回7018错误码,游戏需要主动提示用户到华为应用市场“我的-设置-游戏服务”页面中开启游戏服务开关。

在使用玩家信息统计接口的能力前都需要先调用Games.getGamePlayerStatsClient获取GamePlayerStatisticsClient实例。
- GamePlayerStatisticsClient playerStatsClient = Games.getGamePlayerStatsClient(this, mAuthHuaweiId);
接口中传入的mAuthHuaweiId对象在用户登录游戏时获取,如果当前华为帐号登录状态已失效,则需要调用HuaweiIdAuthService.getSignInIntent方法再次登录或调用HuaweiIdAuthService.silentSignIn方法静默授权获取AuthHuaweiId。

开发者可以调用GamePlayerStatisticsClient.getGamePlayerStatistics方法获取玩家统计信息。获取当前玩家统计信息后即可根据玩家的游戏状态制定对应的互动策略。
- Task<GamePlayerStatistics> task = playerStatsClient.getGamePlayerStatistics(ISREALTIME);
- task.addOnSuccessListener(new OnSuccessListener<GamePlayerStatistics>() {
- @Override
- public void onSuccess(GamePlayerStatistics gamePlayerStatistics) {
- if (gamePlayerStatistics == null) {
- showLog("playerStatsAnnotatedData is null, inner error");
- return;
- }
- StringBuilder sb = new StringBuilder();
- sb.append("IsRealTime:" + ISREALTIME);
- sb.append("\n---AverageSessionLength: " + gamePlayerStatistics.getAverageOnLineMinutes() + "\n---");
- sb.append("DaysSinceLastPlayed: " + gamePlayerStatistics.getDaysFromLastGame() + "\n---");
- sb.append("NumberOfPurchases: " + gamePlayerStatistics.getPaymentTimes() + "\n---");
- sb.append("NumberOfSessions: " + gamePlayerStatistics.getOnlineTimes() + "\n---");
- sb.append("TotalPurchasesAmountRange: " + gamePlayerStatistics.getTotalPurchasesAmountRange());
- showLog(sb.toString());
- }
- }).addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(Exception e) {
- if (e instanceof ApiException) {
- String result = "rtnCode:" + ((ApiException) e).getStatusCode();
- showLog(result);
- }
- }
- });