目录

1. 场景介绍

玩家信息统计是指开发者可以从华为游戏服务器获取当前玩家在游戏中的多种统计信息,帮助开发者更深度了解玩家的游戏习惯,以便根据玩家的游戏进度、支付能力等构建更适合该玩家的游戏体验。例如,开发者获知某用户之前很长时间都未登录过游戏,那么此时给与一个较好的回流奖励,会是吸引他后续留下来的好手段。

开发者可以统计的玩家信息包括以下几种。

        1:无消费

        2:10美元以下

        3:10美元以上(含10美元),50美元以下

        4:50美元以上(含50美元),300美元以下

        5:300美元以上(含300美元),1000美元以下

        6:1000美元以上。

2. 前提条件

说明:
用户打开游戏服务授权后,建议您在游戏中提供取消游戏服务授权的功能,可调用GamesClient.cancelGameService方法实现。

3. 初始化GamePlayerStatisticsClient实例

 

在使用玩家信息统计接口的能力前都需要先调用Games.getGamePlayerStatsClient获取GamePlayerStatisticsClient实例。

  1. GamePlayerStatisticsClient playerStatsClient = Games.getGamePlayerStatsClient(this, mAuthHuaweiId);

接口中传入的mAuthHuaweiId对象在用户登录游戏时获取,如果当前华为帐号登录状态已失效,则需要调用HuaweiIdAuthService.getSignInIntent方法再次登录或调用HuaweiIdAuthService.silentSignIn方法静默授权获取AuthHuaweiId。

4. 获取玩家统计信息

开发者可以调用GamePlayerStatisticsClient.getGamePlayerStatistics方法获取玩家统计信息。获取当前玩家统计信息后即可根据玩家的游戏状态制定对应的互动策略。

  1. Task<GamePlayerStatistics> task = playerStatsClient.getGamePlayerStatistics(ISREALTIME);
  2. task.addOnSuccessListener(new OnSuccessListener<GamePlayerStatistics>() {
  3.    @Override
  4.    public void onSuccess(GamePlayerStatistics gamePlayerStatistics) {
  5.        if (gamePlayerStatistics == null) {
  6.            showLog("playerStatsAnnotatedData is null, inner error");
  7.            return;
  8.        }
  9.        StringBuilder sb = new StringBuilder();
  10.        sb.append("IsRealTime:" + ISREALTIME);
  11.        sb.append("\n---AverageSessionLength: " + gamePlayerStatistics.getAverageOnLineMinutes() + "\n---");
  12.        sb.append("DaysSinceLastPlayed: " + gamePlayerStatistics.getDaysFromLastGame() + "\n---");
  13.        sb.append("NumberOfPurchases: " + gamePlayerStatistics.getPaymentTimes() + "\n---");
  14.        sb.append("NumberOfSessions: " + gamePlayerStatistics.getOnlineTimes() + "\n---");
  15.        sb.append("TotalPurchasesAmountRange: " + gamePlayerStatistics.getTotalPurchasesAmountRange());
  16.        showLog(sb.toString());
  17.    }
  18. }).addOnFailureListener(new OnFailureListener() {
  19.    @Override
  20.    public void onFailure(Exception e) {
  21.        if (e instanceof ApiException) {
  22.            String result = "rtnCode:" + ((ApiException) e).getStatusCode();
  23.            showLog(result);
  24.        }
  25.    }
  26. });