Androidゲームでのイベント



  • この記事は、Google Playゲームサービスに関する記事を和訳したものです。
  • 原文: Events in Android Games
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2019年7月ころです。

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

始める前に

もしまだそうしていなければ、イベントのゲームコンセプトをレビューすることは役立つかもしれません。

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

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

イベント APIを使用し始めるには、あなたのゲームは、まず EventsClientオブジェクトを取得しなければなりません。 Games.getEventsClient()メソッドを呼び出し、アクティビティと、現在のプレイヤーの GoogleSignInAccountを渡すことによって、これを行うことができます。 プレイヤーのアカウント情報を取得する方法については、Androidゲームでのサインインを参照してください。

イベントを提出する

あなたのゲームに興味あるイベントが発生するたびに Google Playゲームサービスに通知するために、あなたのゲームにコードを追加することができます。

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

  • eventIdは、あなたが最初に Google Play Consoleにてイベントを定義したとき Google Playゲームサービスによって定義され、あなたのゲームにてこのイベントをユニークに識別するために使用されます。
  • ゲーム固有の目標を達成するためのプレイヤーの量的な進行状況を指定するために、incrementAmount入力を使用することができます。 例えば、もしあなたのゲームが追跡したいイベントが 'Defeat 500 bug-eyed monsters' であるならば、incrementAmount値は、プレイヤーがひとつの戦いで殺したモンスターの数となることができます。

これは、増分 1を用いてイベントを提出する方法の例です:

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

イベントを取得する

EventsClient.load()を呼び出すことによって、あなたのゲームのためにGoogleのサーバに格納されたすべてのイベントデータを取得することができます。 メソッド呼び出しでは、Google Playゲームサービスがユーザの端末上のローカルにキャッシュされたデータをクリアする必要があるかどうかを示すためのブール値を渡します。

Google Play Consoleにて定義した特定のイベントのためのデータを取得するには、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);
          }
        }
      });
}