Android ゲームの Player Stats

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 データを取得するには:

  1. PlayerStatsClient.loadPlayerStats() メソッドを呼び出します。
  2. 呼び出しが成功すると、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 を使用すると、プレーヤーのエンゲージメントや支出行動に基づいてさまざまなタイプのプレーヤーを簡単に特定し、ゲーム エクスペリエンスを向上させるための適切な戦略を講じることができます。

次の表に、プレーヤー層と推奨されるエンゲージメント戦略の例を示します。

プレーヤー層 エンゲージメント戦略
使用頻度が高く、セッション数が多く、支出額のパーセンタイル値も大きいが、先週またはそれ以前からプレイしていないプレーヤー。
  • ゲームを再度プレイするときに利用できる割引や特典に関する通知を送信する。
  • 再度ゲームを使用したことを感謝する「お帰り」メッセージを表示したり、再プレイを促すようにデザインされたバッジを授与したりする。
エンゲージメントは高いが、支出額のパーセンタイル値が小さいプレーヤー。
  • プレーヤーが、友人にゲームのインストールや参加をすすめたくなるような特典を用意する。このアプローチでは、そのプレーヤーがゲームを楽しんでいるという確かな前提を基に、新しいプレーヤーの参加を促す。
支出は多いが頭打ちであり、使用頻度が下がりつつあるプレーヤー。
  • 使用期限が短い高価値のツール、武器、割引を提供するなど、新たにプレーヤーの興味をかき立てるような特典を用意する。
  • プレーヤーが次回ログインしたときに、グループ攻撃などのコミュニティ機能の利用を促す動画を表示することで、使用頻度が高く長期に及ぶエンゲージメントを推進する。
支出する可能性が非常に高いまたは非常に低いプレーヤー。
  • 支出する可能性が低い: 広告動画を任意で視聴できるようにし、購入価格が安いアイテムを提示する。
  • 支出する可能性が高い: 初期の段階でゲーム内ストアに誘導し、購入を促す特別な広告を表示する。