Player Stats API を活用することで、特定のプレーヤー層やプレーヤーのライフサイクルのさまざまなステージに合わせてゲーム エクスペリエンスを調整できるようになります。プレーヤーの進捗状況や支出状況、エンゲージメントに基づいて、プレーヤー層ごとにカスタマイズしたエクスペリエンスを実現することが可能です。たとえば、この API を使用して、プレーヤーがログインしたときに新しいゲーム内アイテムを表示および宣伝するなどの積極的な措置を講じることで、使用頻度の低いユーザーを再びゲームに引き戻すことができます。
このガイドでは、Google Play ゲームサービスを使用して、ゲームで Player Stats API を活用する方法について説明します。この API は com.google.android.gms.games.stats
パッケージと com.google.android.gms.games
パッケージに含まれています。
始める前に
Player Stats API の使用を開始する前に、以下を行ってください。
Player Stats クライアントを取得する
Player Stats API を使用するには、まず PlayerStatsClient
オブジェクトを取得する必要があります。このオブジェクトを取得するには、Games.getPlayerStatsClient()
メソッドを呼び出し、現在のプレーヤーのアクティビティと GoogleSignInAccount
を渡します。プレーヤーのアカウント情報を取得する方法については、Android ゲームにログインする方法についての説明をご覧ください。
Player Stats の基本
Player Stats API を使用して、プレーヤーのゲーム内アクティビティに関するデータを取得することができます。取得可能なプレーヤー データのタイプの一部を以下に示します。
セッションの長さの平均値: プレーヤーのセッションの長さの平均値を分単位で示します。セッションの長さは、プレーヤーが Google Play ゲームサービスにログインしている時間として定義されます。
最後にゲームを使用してから経過した日数: プレーヤーが最後にゲームを使用してから経過したおおよその日数です。
購入数: プレーヤーのおおよそのアプリ内購入数です。
セッション数: プレーヤーのおおよそのセッション数です。セッション数は、プレーヤーが Google Play ゲームサービスにログインした回数として定義されます。
セッション数のパーセンタイル: プレーヤーのセッション数のおおよそのパーセンタイルを 0~1(0 と 1 を含む)の 10 進数の小数値で示します。この値は、そのゲームのプレーヤー ベースにおいて、現在のプレーヤーがプレイしたセッション数を、他のプレーヤーに対するパーセンタイルで示した値です。数値が大きいほど、そのプレーヤーがより多くのセッションをプレイしていることになります。
支出のパーセンタイル: プレーヤーの支出額のおおよそのパーセンタイルを 0~1(0 と 1 を含む)の 10 進数の小数値で示します。この値は、そのゲームのプレーヤー ベースにおいて、現在のプレーヤーの支出額を他のプレーヤーに対するパーセンタイルで示した値です。数値が大きいほど、このプレーヤーがより多く支出していることになります。
以下のタイプのプレーヤー データはサポートが終了し、常に未設定の定数値が返されます。
- チャーンの可能性: プレーヤーが翌日にゲームの使用をやめる可能性を 0(チャーンの可能性が低い)~1(チャーンの可能性が高い)の 10 進数の小数値(0 と 1 を含む)で示します。チャーンとは、プレーヤーがゲームを 7 日間使用していない状態です。
- 支出する可能性: このゲームでプレーヤーが支出するおおよその可能性を 0(支出する可能性が低い)~1(支出する可能性が高い)の 10 進数の小数値(0 と 1 を含む)で示します。
- 次の 28 日間の合計支出: このゲームでプレーヤーが次の 28 日間に支出すると予測されるおおよその合計額です。
- 高額支出の可能性: プレーヤーが次の 28 日間に支出する額が、このゲームのプレーヤー ベースの 95 パーセンタイル以上になるおおよその可能性を示します。これは、0(高額支出になる可能性が低い)~1(高額支出になる可能性が高い)の 10 進数の小数値で示します。
Player Stats データを取得する
現在ログインしているプレーヤーの Player Stats データを取得するには:
PlayerStatsClient.loadPlayerStats()
メソッドを呼び出します。- 呼び出しが成功すると、Google Play ゲームサービスから
Task
オブジェクトが返され、このオブジェクトによってPlayerStats
オブジェクトが非同期で読み込まれます。このオブジェクトのメソッドを使用して、ログインしているプレーヤーのアプリ内でのアクティビティに関するデータを取得します。
例:
public void checkPlayerStats() { Games.getPlayerStatsClient(this, GoogleSignIn.getLastSignedInAccount(this)) .loadPlayerStats(true) .addOnCompleteListener(new OnCompleteListener<AnnotatedData<PlayerStats>>() { @Override public void onComplete(@NonNull Task<AnnotatedData<PlayerStats>> task) { if (task.isSuccessful()) { // Check for cached data. if (task.getResult().isStale()) { Log.d(TAG, "using cached data"); } PlayerStats stats = task.getResult().get(); if (stats != null) { Log.d(TAG, "Player stats loaded"); if (stats.getDaysSinceLastPlayed() > 7) { Log.d(TAG, "It's been longer than a week"); } if (stats.getNumberOfSessions() > 1000) { Log.d(TAG, "Veteran player"); } if (stats.getChurnProbability() == 1) { Log.d(TAG, "Player is at high risk of churn"); } } } else { int status = CommonStatusCodes.DEVELOPER_ERROR; if (task.getException() instanceof ApiException) { status = ((ApiException) task.getException()).getStatusCode(); } Log.d(TAG, "Failed to fetch Stats Data status: " + status + ": " + task.getException()); } } }); }
Player Stats データを使用する場合のヒント
Player Stats API を使用すると、プレーヤーのエンゲージメントや支出行動に基づいてさまざまなタイプのプレーヤーを簡単に特定し、ゲーム エクスペリエンスを向上させるための適切な戦略を講じることができます。
次の表に、プレーヤー層と推奨されるエンゲージメント戦略の例を示します。
プレーヤー層 | エンゲージメント戦略 |
---|---|
使用頻度が高く、セッション数が多く、支出額のパーセンタイル値も大きいが、先週またはそれ以前からプレイしていないプレーヤー。 |
|
エンゲージメントは高いが、支出額のパーセンタイル値が小さいプレーヤー。 |
|
支出は多いが頭打ちであり、使用頻度が下がりつつあるプレーヤー。 |
|
支出する可能性が非常に高いまたは非常に低いプレーヤー。 |
|