- この記事は、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を使用してコーディングし始める前に:
- Google Play Consoleにて、あなたのゲームのためのイベントを定義します。
- サインインチェックリストの推奨事項に従ってください。
イベントクライアントを取得する
イベント 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);
}
}
});
}