Android 游戏中的事件
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
在弃用 Google 登录 API 后,我们将于 2026 年移除 games v1 SDK。2025 年 2 月之后,您将无法在 Google Play 上发布新集成了 games v1 SDK 的游戏。我们建议您改用 games v2 SDK。
虽然采用旧版游戏 v1 集成的现有游戏仍可在未来几年内正常运行,但我们建议您从 2025 年 6 月开始迁移到 v2。
本指南介绍了如何使用 Play 游戏服务 v1 SDK。如需了解最新的 SDK 版本,请参阅 v2 文档。
本指南介绍了如何使用 Google Play 游戏服务提供的 Events API 收集玩家游戏数据以进行游戏分析。这些 API 可在 com.google.android.gms.games.event
和 com.google.android.gms.games
中找到。
准备工作
请阅读事件游戏概念(如果您尚未执行此操作)。
开始使用 Events API 进行编码之前,请执行以下操作:
获取事件客户端
如需开始使用 Events API,您的游戏必须先获取一个 EventsClient
对象。为此,您可以调用 Games.getEventsClient()
方法,并传入 activity 和当前播放器的 GoogleSignInAccount
。如需了解如何检索玩家的账号信息,请参阅 Android 游戏中的登录功能。
提交事件
您可以在游戏中添加代码,以便在发生与您游戏相关的事件时发送通知给 Google Play 游戏服务。
如需发送事件更新,请调用 EventsClient.increment()
,并包含 eventId
值和 incrementAmount
(等于或大于 0 的整数)。
- 您首次在 Google Play 管理中心内定义事件时会生成
eventId
,它用于在您的游戏中唯一标识此事件。
- 您可以使用
incrementAmount
输入指定玩家完成某个游戏专属目标的量化进度。例如,如果您的游戏想要跟踪的事件是“打败 500 只凸眼怪”,则 incrementAmount
值可以是玩家在单场战斗中杀死的怪物数量。
下例展示了如何提交增量为 1 的事件:
public void submitEvent(String eventId) {
Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(this))
.increment(eventId, 1);
}
检索事件
您可以通过调用 EventsClient.load()
检索 Google 服务器中为您的游戏存储的所有事件数据。在方法调用中,传入布尔值以指示 Google Play 游戏服务是否应清除用户设备本地缓存的数据。
如需检索您在 Google Play 管理中心内定义的特定事件的数据,请调用 EventsClient.loadByIds()
,并在输入参数中传入事件 ID 数组。
以下代码段展示了如何在 Google Play 游戏服务中查询您的游戏的所有事件列表:
public void loadEvents() {
Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(this))
.load(true)
.addOnCompleteListener(new OnCompleteListener<AnnotatedData<EventBuffer>>() {
@Override
public void onComplete(@NonNull Task<AnnotatedData<EventBuffer>> task) {
if (task.isSuccessful()) {
// Process all the events.
for (Event event : task.getResult().get()) {
Log.d(TAG, "loaded event " + event.getName());
}
} else {
// Handle Error
Exception exception = task.getException();
int statusCode = CommonStatusCodes.DEVELOPER_ERROR;
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
statusCode = apiException.getStatusCode();
}
showError(statusCode);
}
}
});
}
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-27。
[null,null,["最后更新时间 (UTC):2025-07-27。"],[],[],null,["# Events in Android games\n\nFollowing the deprecation of the\n[Google Sign-In](https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html)\nAPI, we are removing the games v1 SDK in 2026. After February 2025, you will be unable to publish\ntitles that are newly integrated with games v1 SDK, on Google Play. We recommend that you use the\ngames v2 SDK instead. \n\nWhile existing titles with the previous games v1 integrations continue to function for a\ncouple of years, you are encouraged to\n[migrate to v2](/games/pgs/android/migrate-to-v2)\nstarting June 2025. \n\nThis guide is for using the Play Games Services v1 SDK. For information\non the latest SDK version, see the\n[v2 documentation](/games/pgs/android/events).\n\nThis guide shows you how to collect player gameplay data for game analytics using the events APIs\nprovided by Google Play Games Services. The APIs can be found in the\n[`com.google.android.gms.games.event`](https://developers.google.com/android/reference/com/google/android/gms/games/event/package-summary)\nand [`com.google.android.gms.games`](https://developers.google.com/android/reference/com/google/android/gms/games/package-summary).\n\nBefore you begin\n----------------\n\nIf you haven't already done so, you might find it helpful to review the\n[events game concepts](/games/pgs/events).\n\nBefore you start to code using the events APIs:\n\n- Define the events for your game in the [Google Play Console](https://play.google.com/apps/publish/).\n- Follow the [sign-in checklist recommendations](/games/pgs/v1/quality#sign-in).\n\nGet the events client\n---------------------\n\nTo start using the events APIs, your game must first obtain an\n[`EventsClient`](https://developers.google.com/android/reference/com/google/android/gms/games/EventsClient) object. You can do this by calling the\n[`Games.getEventsClient()`](https://developers.google.com/android/reference/com/google/android/gms/games/Games.html#getEventsClient(android.app.Activity,%20com.google.android.gms.auth.api.signin.GoogleSignInAccount)) method and passing in the\nactivity and the [`GoogleSignInAccount`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount) for the current player. To learn how to\nretrieve the player account information, see\n[Sign-in in Android Games](/games/pgs/v1/android/signin).\n| **Note:** The [`EventsClient`](https://developers.google.com/android/reference/com/google/android/gms/games/EventsClient) class makes use of the Google Play services [`Task`](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task) class to return results asynchronously. To learn more about using tasks to manage threaded work, see the [Tasks API developer guide](https://developers.google.com/android/guides/tasks).\n\nSubmit events\n-------------\n\nYou can add code in your game to notify Google Play Games Services whenever an\nevent of interest to your game occurs.\n\nTo send an event update, call [`EventsClient.increment()`](https://developers.google.com/android/reference/com/google/android/gms/games/EventsClient.html#increment(java.lang.String,%20int)) with the `eventId` value and an\ninteger `incrementAmount` that is equal to or greater than 0.\n\n- The `eventId` is generated by Google Play Games Services when you first define the event in the Google Play Console and is used to uniquely identify this event in your game.\n- You can use the `incrementAmount` input to specify the player's quantitative progress towards completing some game-specific goal. For example, if the event your game wants to track is *'Defeat 500 bug-eyed monsters'* , the `incrementAmount` value can be the number of monsters that the player killed in a single battle.\n\nHere's an example of how to submit an event with an increment amount of 1: \n\n```text\npublic void submitEvent(String eventId) {\n Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(this))\n .increment(eventId, 1);\n}\n```\n\nRetrieve events\n---------------\n\nYou can retrieve all events data stored in Google's servers for your game, by\ncalling [`EventsClient.load()`](https://developers.google.com/android/reference/com/google/android/gms/games/EventsClient.html#load(boolean)). In the\nmethod call, pass in a boolean value to indicate if Google Play Games Services should clear the locally\ncached data on the user's device.\n\nTo retrieve data for specific events that you defined in the Google Play Console, call\n[`EventsClient.loadByIds()`](https://developers.google.com/android/reference/com/google/android/gms/games/EventsClient.html#loadByIds(boolean,%20java.lang.String...)) and pass in an array of event IDs in the input parameters.\n\nThe following snippet shows how you can query Google Play Games Services for the\nlist of all events for your game: \n\n```gdscript\npublic void loadEvents() {\n Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(this))\n .load(true)\n .addOnCompleteListener(new OnCompleteListener\u003cAnnotatedData\u003cEventBuffer\u003e\u003e() {\n @Override\n public void onComplete(@NonNull Task\u003cAnnotatedData\u003cEventBuffer\u003e\u003e task) {\n if (task.isSuccessful()) {\n // Process all the events.\n for (Event event : task.getResult().get()) {\n Log.d(TAG, \"loaded event \" + event.getName());\n }\n } else {\n // Handle Error\n Exception exception = task.getException();\n int statusCode = CommonStatusCodes.DEVELOPER_ERROR;\n if (exception instanceof ApiException) {\n ApiException apiException = (ApiException) exception;\n statusCode = apiException.getStatusCode();\n }\n showError(statusCode);\n }\n }\n });\n}\n```"]]