Android 遊戲中的事件

本指南說明如何使用 Google Play 遊戲服務提供的事件 API 收集玩家遊戲資料,以進行遊戲過程分析。此 API 位於 com.google.android.gms.games.eventcom.google.android.gms.games

事前準備

建議您先複習事件遊戲概念,這會對您很有幫助。

開始使用事件 API 編寫程式碼之前:

取得事件用戶端

如要開始使用事件 API,遊戲必須先取得 EventsClient 物件。要取得此物件,您可以呼叫 Games.getEventsClient() 方法,然後傳入活動和目前玩家的 GoogleSignInAccount。如要瞭解如何擷取玩家帳戶資訊,請參閱「Android 遊戲登入」。

提交事件

您可以在遊戲中新增程式碼,以在遊戲發生特定事件時通知 Google Play 遊戲服務。

如要傳送事件更新,請使用 eventId 值以及等於或大於 0 的整數 incrementAmount 呼叫 EventsClient.increment()

  • 首次在 Google Play 管理中心定義事件時,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);
          }
        }
      });
}