目录

1. 场景介绍

事件上报为开发者提供了收集玩家在游戏过程中产生的特定数据,上报并存储至华为游戏服务器,随后在AppGallery Connect上进行归纳分析的能力。

开发者可以自由决策需要上报玩家的哪些事件数据,比如:玩家付费达到一定金额,玩家进入特定游戏场景,玩家通过某关卡等。

开发者可以根据事件上报的数据针对性的对游戏进行改进,比如玩家购买某个游戏道具的上报人数远低于预期,那么开发者可以适当调整该游戏道具费用和趣味性。

一个事件包含的基本属性如下表。

属性

说明

事件ID

在配置事件时由AppGallery Connect生成,用于唯一标识一个事件。

事件名称

事件的名称,在配置事件时由开发者自行定义。

事件描述

对事件的具体描述信息,通常情况下描述事件的具体含义。

事件类型

用于定义该事件的类型,当前支持3种事件类型。

  • 货币消耗:代表消耗货币的事件,例如“花费金币”。

  • 货币产出:代表产生了货币的事件,例如“赚取金币”。

  • 无:除了货币相关事件的其他事件。

事件数值

事件的具体数值,无法在配置事件时设置,需要开发者在上报事件时传入。

事件数值记录了事件的实际数据,例如“花费金币”事件传入事件数值“500”,表示玩家花费了500金币。

事件数值支持两种类型:数字和时间,可在配置事件时设置。数字数值还可以额外定义数字的小数位数及单位。上报事件的数值后AppGallery Connect会自动根据数值的类型转化为对应的单位。

事件图标

事件在游戏中展示的图标,图标大小必须为512x512 px,图标文件必须为png或jpg文件,图标中建议不要包含任何本地化的文字。

初始状态

配置事件时由开发者自行定义事件是“显示”还是“隐藏”状态,开发者可根据此属性确定是否向用户展示该事件。

列表顺序

当前事件在所有事件中排列的顺序,由您在配置事件时指定。

2. 前提条件

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

3. 初始化EventsClient实例


在使用事件接口的能力前需要先调用Games.getEventsClient()获取EventsClient实例。示例代码如下:

  1. EventsClient client = Games.getEventsClient(this, mAuthHuaweiId);

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

4. 上报玩家的事件数据

应用可以在用户触发游戏事件时调用EventsClient.grow方法向华为游戏服务器上报事件数据,传入eventId和growAmount。

上报事件的示例代码如下:

  1. client.grow(eventId, growAmount);

5. 获取事件数据


开发者可以在游戏中向用户展示事件的数据。

● 如果用户需要查看所有事件数据,应用可以调用EventsClient.getEventList方法。

● 如果用户只需查看某些特定的事件,应用可以调用EventsClient.getEventListByIds方法,在方法中传入包含指定事件ID的数组。

两种方法均可以通过boolean类型的forceReload参数指定是从华为游戏服务端还是从应用客户端本地缓存中查询数据。

获取所有事件数据的示例代码如下:

  1. Task<List<Event>> task = client.getEventList(forceReload);

获取特定事件数据的示例代码如下:

  1. Task<List<Event>> task = client.getEventListByIds(forceReload, eventIds);

事件结果数据返回的示例代码如下:

  1. task.addOnSuccessListener(new OnSuccessListener<List<Event>>() {
  2.         @Override
  3.         public void onSuccess(List<Event> data) {
  4.            if (data == null) {
  5.                Log.w("Event", "event is null");
  6.                return;
  7.            }
  8.            for (Event event : data) {
  9.                Log.i("Event", "event id:" + event.getEventId());
  10.            }
  11.        }
  12.    }).addOnFailureListener(new OnFailureListener() {
  13.        @Override
  14.        public void onFailure(Exception e) {
  15.            if (e instanceof ApiException) {
  16.                String result = "rtnCode:"
  17. + ((ApiException) e).getStatusCode();
  18.                Log.e("Event", result);
  19.            }
  20.        }
  21.    });