Android ゲームのイベント

このガイドでは、Google Play Games サービスが提供するイベント API を使用して、ゲーム分析のためにプレーヤーのゲームプレイ データを収集する方法について説明します。この API は com.google.android.gms.games.eventcom.google.android.gms.games にあります。

始める前に

イベントゲームのコンセプトをまだ確認されていない場合は、確認することをおすすめします。

イベント API を使用してコーディングを開始する前に:

イベント クライアントを取得する

イベント API の使用を開始するには、まずゲームで EventsClient オブジェクトを取得する必要があります。そのためには、Games.getEventsClient() メソッドを呼び出して、アクティビティと現在のプレーヤーの GoogleSignInAccount を渡します。プレーヤーのアカウント情報を取得する方法については、Android ゲームにログインする方法についての説明をご覧ください。

イベントを送信する

ゲームに関連するイベントが発生するたびに Google Play Games サービスに通知するコードをゲームに追加できます。

イベントの更新を送信するには、eventId 値と 0 以上の整数 incrementAmount を指定して EventsClient.increment() を呼び出します。

  • eventId は、Google Play Console で初めてイベントを定義するときに Google Play Games サービスによって生成され、ゲーム内でこのイベントを一意に識別するために使用されます。
  • incrementAmount 入力を使用すると、ゲーム固有の目標の達成に向けた、プレーヤーの定量的な進行状況を指定できます。たとえば、ゲームでトラッキングするイベントが「目の飛び出たモンスター 500 体を倒す」である場合、incrementAmount の値はプレーヤーが 1 回の戦闘で倒したモンスターの数となります。

増分を 1 としてイベントを送信する方法の例を次に示します。

public void submitEvent(String eventId) {
  Games.getEventsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .increment(eventId, 1);
}

イベントを取得する

EventsClient.load() を呼び出すことで、ゲーム用に Google のサーバーに保存されているすべてのイベントデータを取得できます。このメソッド呼び出しでは、Google Play Games サービスがユーザーのデバイス上にローカルにキャッシュされたデータを消去するかどうかを示すブール値を渡します。

Google Play Console で定義した特定のイベントのデータを取得するには、EventsClient.loadByIds() を呼び出して、入力パラメータにイベント ID の配列を渡します。

次のスニペットは、Google Play Games サービスにクエリを実行し、ゲームのすべてのイベントのリストを取得する方法を示しています。

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);
          }
        }
      });
}