このガイドでは、Google Play Games サービスが提供するイベント API を使用して、ゲーム分析のためにプレーヤーのゲームプレイ データを収集する方法について説明します。この API は com.google.android.gms.games.event
と com.google.android.gms.games
にあります。
始める前に
イベントゲームのコンセプトをまだ確認されていない場合は、確認することをおすすめします。
イベント API を使用してコーディングを開始する前に:
- Google Play Console でゲームのイベントを定義します。
- ログイン チェックリストの推奨事項のとおりにします。
イベント クライアントを取得する
イベント 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); } } }); }