ゲームの統計情報

ゲームの統計情報は、ゲームに関する累積統計情報です。プレーヤーは、ゲーマー プロフィールで確認できます。これらの統計情報により、プレーヤーは生涯の進捗状況を追跡したり、ハイライト シーンを確認したり、他のプレーヤーと比較したりできます。また、今後、クエストやソーシャル チャレンジなどの Google Play の機能を強化することもできます。

統合の手順

Game Stats API を使用して、繰り返し発生する統計情報には柔軟なプレーヤー イベントとして、進行状況の統計情報には事前定義されたイベント progressUpdate としてデータを送信します。また、ゲーマー プロフィールに表示される統計情報の計算ロジックと、その表示情報も構成する必要があります。

プレーヤー イベントは、ゲーム内の個別の瞬間、ゲームループの完了、進行状況のマイルストーンを表します。

プレーヤー イベントは次のように定義され、モデル化されます。

  1. イベントは、試合の完了、ランニングの終了、宝箱のロック解除、エリアでの進行状況の保存など、プレーヤーが実行した特定のアクションで表されます。
  2. 各アクションには、特定の結果またはアクションを定義する特定の特性があります。これらは、イベントとその特定の結果に関するコンテキストを提供するイベント プロパティとしてモデル化されます(たとえば、マッチタイプ、そのラン中に収集されたコイン、マッチの結果、ヘッドショット数など)。

統合は次の手順で構成されます。

  • 未加工のデータスキーマを宣言する: Google Play Console で CSV アップロードを使用してプレーヤー イベントを定義します。CSV ファイルのガイドラインをご覧ください。
  • Game Stats API と統合する: 柔軟なプレーヤー イベントと progressUpdate イベントについて、宣言された形式でプレーヤーの生データを送信します。
    • クライアントサイドまたはサーバーサイドの統合を使用して、定義されたすべてのイベントを送信します。詳細については、柔軟なイベントprogressUpdate イベントの例をご覧ください。
  • ZIP ファイルをアップロードする: 3 つの CSV ファイルと、5 つの繰り返し統計と 1 つのプレーヤー進行レベルを定義するすべてのアイコン画像ファイルを提供します。詳しくは、ZIP ファイルのガイドラインをご覧ください。以下の情報も伝えてください。
    • 繰り返し統計情報の CSV ファイル:
      • 統計情報の一意の ID。
      • 統計情報の計算に使用するイベントラベルを指定します。ここでは progressUpdate イベントラベルは使用できません。
        • 統計情報の計算に使用するプロパティ ラベルを指定します。これは、指定されたイベントのプロパティである必要があります。
        • 集計タイプ(SUM、MAX、MIN、COUNT)を指定して、選択したプロパティ ラベルの統計情報を計算する方法を決定します。
        • 条件が満たされた場合にのみロジックを計算する省略可能なフィルタ条件を指定します。プロパティとイベントラベル、演算子(=、<、>)、しきい値を定義します。
      • 統計情報を競合機能に使用できるかどうかを示すブール値のフラグを含めます。
      • この機能が競合機能に使用できる場合は、正規のプレーヤーの 1 時間あたりの最小限度と最大限度。これは、リーグやソーシャル チャレンジなどの機能に参加しているプレイヤーが不正行為を行っている可能性があるかどうかを特定するために使用されます。
      • プレーヤーに表示される統計情報に一意の表示名を指定します。
      • 統計情報を説明する独自のテキストを提供します。この説明では、プレーヤーがどのようにして統計情報を獲得したかについて詳しく説明する必要があります。
      • CSV ファイルにアイコンの正確なファイル名を入力して、統計情報を表す一意のアイコンを指定します。
      • シーケンスの順序を指定して、ゲーマー プロフィールでプレーヤーに表示される統計情報の順序を指定します
      • 値の増加または減少がプレーヤーにとって良いかどうかを示す入力(省略可)を指定します。この入力は、プレーヤーの動きを祝うために使用されます。
      • 統計情報の単位(km、マイル、秒など)を指定します(省略可)。
    • プレーヤーの進行状況の統計情報の CSV ファイル:
      • プレーヤーに表示されるプレーヤーの進行状況に一意の表示名を指定します。
      • 統計情報を表す一意のアイコンを指定します。
      • 進行状況の統計の説明を入力します。
      • 値の増加と減少のどちらがプレイヤーにとって有利かを示すオプションの入力を指定します。この入力は、currentProgress プロパティの型が INT の場合にのみ、プレーヤーの動きを祝うために使用されます。
      • 統計情報の測定単位(km、マイル、秒など)を任意で指定します。
    • ローカライズ用の CSV ファイル: すべての統計情報のローカライズされた表示名を指定します。
      • ローカライズごとに 1 行を追加します。
      • 前の CSV で追加した統計情報の表示名文字列を使用して、ローカライズが追加される統計情報を一意に識別します。
      • 言語コードのリストから言語を指定します。
      • 指定された言語の表示名のローカライズを追加します。
      • 指定された言語での統計情報の説明のローカライズを追加します。

イベントの CSV ファイルのガイドライン

PlayerGameEvent.csv ファイルを使用してイベントをインポートできます。

ファイル名 必須または省略可
PlayerGameEvent.csv 必須

PlayerGameEvent.csv 形式

CSV には、宣言されたイベントとそのプロパティがカンマ区切り値として次の順序で含まれています。

 Event Name,Property Name,Property Type

progressionStatprogressUpdate イベントを送信する場合は、このイベントの行を追加します。このイベントには、INT 型または STRING 型の currentProgress プロパティと、送信するその他のプロパティを少なくとも 1 つ含める必要があります。

表の例
イベント名 プロパティ名 プロパティ タイプ
matchCompleted duration DOUBLE
matchCompleted kill INT
matchCompleted isWinner BOOLEAN
matchCompleted matchType 文字列(UTF-8)
itemCollected coinsAmount INT
itemCollected weaponType 文字列(UTF-8)
progressUpdate currentProgress INT

統計情報の ZIP ファイルに関するガイドライン

ZIP ファイルを使用して統計情報を一度にインポートできます。ZIP ファイルで使用する正確なファイル名については、以下の表をご覧ください。

ファイル名 必須 / 省略可 指定可能な値
RepetitiveStatsConfig.csv 必須 多くのイベントのメタデータ。
ProgressionStatConfig.csv 必須 宣言されたイベントとそのプロパティ。
StatLocalizations.csv 省略可 アチーブメントの名前と説明の翻訳を提供する。
アイコン ファイル 必須 512 x 512 の PNG、JPEG、JPG 形式のアイコン。

RepetitiveStatsConfig.csv 形式

CSV には、宣言されたイベントとそのプロパティがカンマ区切り値として次の順序で含まれています。

Stat ID, Event Name,    Property Name,  Aggregation,     Stat Display Name, Stat Description, Filter Property,  Filter Operator,    Filter Value,   Is Competitive, minLimit, maxLimit, Icon File Name, Sequence Number, Good value direction, unit

フィルタ条件を使用しない場合は、セルを空白のままにします。

表の例
統計情報 ID イベント名 プロパティ名 集計 統計の表示名 Stat Description フィルタ プロパティ(省略可) フィルタ演算子(省略可) フィルタ値(省略可) 競争的 minLimit maxLimit Icon filename シーケンス番号 お得感のあるお店の方向性 ユニット
1 matchCompleted duration MAX Longest Match Survival これは、プレーヤーが試合で生き残った時間を表します。 isWinner = TRUE TRUE 0 50 stat1.png 1 減少
2 matchCompleted isWinner COUNT 勝利試合数 これは、プレーヤーが勝利した試合の数を示します。 isWinner = TRUE TRUE 0 50 stat3.png 2 増加
3 matchCompleted kill SUM 1 対 1 の試合でのキル数 1 対 1 の試合でのキル数 matchType = "1-on-1" FALSE stat4.png 4 増加
4 itemCollected coinsAmount SUM 合計ゴールド収集量 試合中にコインを集めるプレーヤー weaponType = "sword" FALSE stat2.png 3 増加

ProgressionStatConfig.csv 形式

CSV には、宣言されたイベントとそのプロパティがカンマ区切り値として次の順序で含まれています。

Stat ID, Stat Display Name, Stat Description, Icon File Name, Good value direction, unit

進行状況の統計情報は、ゲーマー プロフィールの最初の統計情報としてプレーヤーに表示されます。

表の例
統計情報 ID Stat Display Name 統計情報の説明 アイコン ファイル名 コスパが良い
5 レベル プレーヤーは試合をプレイして xp を獲得し、レベルアップします。 Level.png 増加しています

StatLocalizations.csv 形式

CSV には、宣言されたイベントとそのプロパティがカンマ区切り値として次の順序で含まれています。

Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
表の例
統計情報 ID Stat Display Name 言語コード ローカライズされた統計情報の名前(UTF-8) ローカライズされたステータスの説明(UTF-8) 1 Longest Match Survival es Supervivencia más larga en partidos Esto denota el tiempo de supervivencia de una jugadora en cualquier partido. 1 Longest Match Survival fr Survie du match le plus long Cela indique la durée de survie d'un joueur dans n'importe quel match. 4 合計ゴールド獲得量 es Oro total recolectado La jugadora recoge monedas mientras juega en un partido 4 合計ゴールド獲得量 fr または total collecté Le joueur collecte des pièces en jouant un match

スキーマを計画する

Game Stats API を使用して送信できるデータには、柔軟なプレーヤー イベントと、プレーヤーの進行状況の統計情報に関する事前定義済みイベントの 2 種類があります。次の例は、さまざまなゲームタイプでフレキシブル イベントがどのように表示されるかを示しています。

柔軟なプレーヤー イベント

プレーヤー イベントは、ゲーム内の特定の瞬間、ゲームループの完了、進行状況のマイルストーンによって定義されます。

  • イベントを定義します。イベントとは、ゲーム内の特定の瞬間、ゲームループの完了、進行状況のマイルストーンのことです。
    • ゲームループの完了(対戦やランの完了など)。
    • 進行状況のマイルストーン(保存されたエリアの探索の進捗状況やクリアしたレベルなど)。
  • プロパティを追加して、イベントとその結果に関するコンテキスト(レベル番号、マッチタイプ、武器の種類、武器の数、ヘッドショット、収集したコイン、マッチの結果、ラップタイム、車の種類など)を提供します。
  • ゲームプレイ セッション内でイベントが発生したらすぐにイベントを送信します。たとえば、ループが完了した直後にゲームループ完了イベントを送信します。
ゲームの種類 イベント ラベル ゲーム内モーメント / 進行状況イベント完了 / ゲームループ完了 結果 特性
線形進行のインディー パズルゲーム chapter_completed 進行状況イベントの完了 なし チャプター番号、チャプター名、試行回数、画面数、移動回数、チャプターのコンテンツ
screen_completed 進行状況イベントの完了 チャプター番号、チャプター名、試行回数、移動回数、チャプターの内容
3D エンドレス ランナー run_completed ゲームループの完了 獲得したコイン、スコア 走行時間、ジェットパックから収集したコイン、走行開始時に使用したブースター、使用したサーフボード、使用した磁石、使用したジャンパー、使用したジェットパック
オープン ワールド アクション RPG areaExplorationProgress 進行状況イベントの完了 倒した敵の数、集めたポーションの数 エリア番号、エリア名、進捗率
questCompleted ゲームループの完了 なし クエスト名
weaponUnlocked ゲーム内の瞬間 なし 武器名、武器レベル
chestUnlocked ゲーム内の瞬間 強化用鉱石の収集
装飾的なメタのあるカジュアルなパズル puzzleCompleted ゲームループの完了 / 進行状況イベントの完了 獲得したコイン、獲得したブースター 移動回数、バトラーのギフトを使用したか?、レベルの種類、レベル番号、使用したカラーブースター、使用したダイナマイト
cardsCollected ゲーム内の瞬間 1 つ星カード、2 つ星カード、3 つ星カード、カードの合計数 アルバム番号、アルバム名
アーケード レーシング raceCompleted ゲームループの完了 Rank、NOS used、race_time レースの種類、レーティング、使用した車
carUpgraded ゲーム内の瞬間 アップグレードされた車の特性、古いレベル / 値、新しいレベル / 値 車の種類、現在のガレージレベル
サードパーソン バトルロイヤル シューティング matchCompleted ゲームループの完了 撃破数、ヘッドショット数、名誉値 一致タイプ、生存時間
e スポーツ マネジメント シミュレーション matchCompleted ゲームループの完了 結果、得点、失点 対戦チーム名、試合チーム名
trainingCompleted ゲーム内の瞬間 ドリル完了、teamplay_form_attack、teamplay_form_defense、teamplay_form_possession、teamplay_form_condition

progressUpdate イベント

ゲームにメインの進行メカニズムがある場合は、このイベントを使用して、プレーヤーの現在の進行状況を送信します。イベントには、INT または STRING 型の「currentProgress」という名前の事前定義されたプロパティが 1 つあります。このプロパティを使用して現在の進行状況の値を送信します。この値は、ゲーマー プロフィールのゲーム統計 UI に表示される唯一の値です。

プレーヤーはゲーム内の現在の進行状況でプロフィールを比較できるため、初回統合後に現在の進行状況の値を取得する際に遅延が発生しないことが重要です。プレーヤーに正確な現在の進行状況を伝えるため、各ゲーム セッションの開始時と、現在の進行状況が更新されるたびに progressUpdate イベントを送信する必要があります。

ゲームの種類 `progressUpdate` イベントの currentProgress プロパティ
線形進行パズルゲーム 現在のチャプター番号またはレベル番号
3d Endless Runner ハイスコア、現在のブースター残高
カジュアル パズル 現在のレベル番号、初回クリア回数、クリアしたエリア数、完了したコレクション数
アーケード レーシング 現在のレベル番号、通貨残高
オープン ワールド アクション RPG 現在のキャラクターのランク、現在のレベルの番号
サードパーソン シューティング 現在のレベル番号
e スポーツ シミュレーション Manager Level 番号、Club Level 番号

統合の詳細

API エンドポイントと SDK は早期フィードバックにご利用いただけます。2026 年 7 月より一般提供(GA)を開始する予定です。タイムラインを参照してください

このセクションでは、クライアントサイドとサーバーサイドの両方の統合でイベントを構築して送信する方法について説明します。

データを送信するタイミング

フレキシブル イベントは、ゲームループの完了や特定のゲーム内モーメントに関連するゲーム内アクションを表します。これらのイベントは発生したらすぐに送信してください。たとえば、ループが完了したらすぐにゲームループ完了イベントを送信します。

progressUpdate イベントは、プレーヤーの現在の進行レベルを表します。進行状況の統計情報は、次の状況でこのイベントを使用して送信する必要があります。

  1. 現在の進行状況が更新されるたびに、最新の値をすぐに送信します。
  2. プレーヤーがゲームを起動するたび。これにより、プレーヤーのこの統計情報が常に存在することが保証されます。

統合の手順

統合には、クライアントとサーバー間の 2 つのパスがあります。

サーバー間統合

公開 API エンドポイントを使用すると、次の構成を使用してリクエスト ペイロードでイベントを送信できます。

パスパラメータ
パラメータ データ型 説明
playerId String(文字列) プレーヤーの PGS ID。

認可と認証

サーバー間 API 呼び出しは、OAuth 2.0 を使用した Play ゲームサービスへのサーバーサイド アクセスの標準ガイドラインに沿って行われます。リクエストには、https://www.googleapis.com/auth/games スコープで承認された Bearer トークンを含める必要があります。

Flexible Events: リクエスト本文

BatchRecordEventsRequest

{
  "packageName": string,
  "requestTime": string,
  "events": [
    {
      object (PlayerGameEvent)
    }
  ]
}

PlayerGameEvent

{
  "eventId": string,
  "eventName": string,
  "eventProperties": {
    // keys (e.g., "matchId", "score")
    "": {
       object (PropertyValue)
    }
  },
  "eventTime": string
}

PropertyValue

// ONE of the following fields will be present:
{
// 64-bit integer formatted as a string to prevent data loss
"intValue": "string",
// Double-precision floating point number.
"doubleValue": number,
// Standard UTF-8 text string.
"stringValue": "string",
// Boolean value (true or false).
"boolValue": boolean,
// RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z").
"timestampValue": "string",
// Duration in seconds suffixed with 's' (e.g., "240s" or "3.5s").
"durationValue": "string"
}

progressUpdate イベント: リクエストの本文

BatchRecordEventsRequest

{
  "packageName": string,
  "requestTime": string,
  "events": [
    {
      object (PlayerGameEvent)
    }
  ]
}

PlayerGameEvent - progressUpdate

{
  "eventId": string,
  "eventName": "progressUpdate",
  "eventProperties": {
    "": {
       object (PropertyValue)
// Must have at least one property "currentProgress"  of  type  INT  or  STRING
    }
  },
  "eventTime": string
}

レスポンスの本文

成功した場合、空の JSON オブジェクトとともに HTTP 200 OK ステータスを返します。

リクエスト本文の例

柔軟なイベント: PlayerGameEvent

{
  "packageName": "com.example.awesomegame",//Your package name
  "requestTime": "2026-01-01T18:00:00Z",
  "events": [
    {
      "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID for deduplication //and idempotency
      "eventName": "matchCompleted",
      "eventTime": "2026-01-01T17:00:00Z",
      "eventProperties": {
        "matchId": {
          "stringValue": "Match_A"
        },
        "gameMode": {
          "stringValue": "Battle_B"
        },
        "locationId": {
          "stringValue": "Location_XYZ"
        },
        "playerElimination": {
          "intValue": 2
        },
        "survivalTimeSeconds": {
          "durationValue": "240s"
        },
        "isWinner": {
          "boolValue": true
        }
      }
    }
  ]
}

progressUpdate イベント

{
  "packageName": "com.example.awesomegame",//Your package name
  "requestTime": "2026-01-01T18:00:00Z",
  "events": [
    {
      "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID
      "eventName": "progressUpdate",
      "eventTime": "2026-01-01T17:00:00Z",
      "eventProperties": {
        "currentProgress": {
          "intValue": 52
        },
//Add more properties as per your requirement
      }
    }
  ]
}

クライアントサイドの統合

クライアントサイドの統合は、Unity、Java、C++ の各 SDK を使用して利用できるようになります。

PlayerGameEvent のクライアントサイド統合では、SDK に応じて Java または Csharp でトリガー ポイントにイベント オブジェクトを構築し、SDK で提供されるアップロード関数を使用して送信します。

同様に、progressUpdate イベントでは、currentProgress プロパティと追加の定義済みプロパティを使用して更新された進行状況を記録し、SDK が提供するアップロード関数を使用して送信します。

イベント

PlayerGameEvent のクライアントサイドの統合は次のとおりです。

Flexible Player Game Event をビルドする

Java


// Build the PlayerGameEvent
PlayerGameEvent event = new PlayerGameEvent.Builder("matchCompleted")
  .addProperty("matchId", "Match_A")
  .addProperty("gameMode", "Battle_B")
  .addProperty("mapId", "Location_XYZ")
  .addProperty("isWinner", true)
  .addProperty("survivalTimeSeconds", "240s")
  .addProperty("playerElimination", 2)
  .build();

List events = new ArrayList<>();
// ... populate list ...

Unity


// Build the PlayerGameEvent
var playerEvent = new PlayerGameEvent.Builder("matchCompleted")
   .AddProperty("matchId", "Match_A")
   .AddProperty("gameMode", "Battle_B")
   .AddProperty("mapId", "Location_XYZ")
   .AddProperty("isWinner", true)
   .AddProperty("survivalTimeSeconds", "240s")
   .AddProperty("playerElimination", 2)
   .Build();
var events = new List();
// ... populate list ...

C++


// Build the PlayerGameEvent
PgsPlayerGameEvent* player_event = PgsPlayerGameEvent_create("matchCompleted");
if (player_event != nullptr) {
   PgsPlayerGameEvent_putString(player_event, "matchId", "Match_A");
   PgsPlayerGameEvent_putString(player_event, "gameMode", "Battle_B");
   PgsPlayerGameEvent_putString(player_event, "mapId", "Location_XYZ");
   PgsPlayerGameEvent_putBoolean(player_event, "isWinner", true);
   PgsPlayerGameEvent_putString(player_event, "survivalTimeSeconds", "240s");
   PgsPlayerGameEvent_putLong(player_event, "playerElimination", 2);
}
progressUpdate プレーヤー ゲームイベントをビルドする

Java


// Build the PlayerGameEvent
PlayerGameEvent event = new PlayerGameEvent.Builder("progressUpdate")
  .addProperty("currentProgress", 52)
  // Add other properties if needed
  .build();

List events = new ArrayList<>();
// ... populate list ...

Unity


// Build the PlayerGameEvent
var progressEvent = new PlayerGameEvent.Builder("progressUpdate")
   .AddProperty("currentProgress", 52)
   // Add other properties if needed
   .Build();
var events = new List();
// ... populate list ...

C++


PgsPlayerGameEvent* progress_event = PgsPlayerGameEvent_create("progressUpdate");
if (progress_event != nullptr) {
   PgsPlayerGameEvent_putLong(progress_event, "currentProgress", 52);
}
Record Event And Upload

Java


// Buffers the event locally.
client.recordEvent(event);

// Buffers the events locally, (List version)
client.recordEvents(events);

// This submits the events to PGS
client.requestEventsUpload();

Unity


// Buffers the event locally.
PlayGamesPlatform.Instance.RecordEvent(playerEvent);

// Buffers the events locally, (List version)
PlayGamesPlatform.Instance.RecordEvents(events);

// This submits the events to PGS
PlayGamesPlatform.Instance.RequestEventsUpload();

C++


// Record the event
PgsGameStatsClient_recordEvent(client, player_event);

// This submits the events to PGS
PgsGameStatsClient_requestEventsUpload(client);

// Clean up handle to avoid leaks
PgsPlayerGameEvent_destroy(player_event);

// Clean up client handle when PGS operations are finished
PgsGameStatsClient_destroy(client);

タイムライン

日付 Game Stats API の統合 ゲーム統計情報の構成
2026 年 6 月
  • デベロッパーはデータモデルの計画を開始できます
利用不可
2026 年 7 月
  • すべてのデベロッパーが API を一般提供(GA)で利用して統合を開始できる
  • 受信データは、提供されたスキーマと構成に対して検証されます
  • イベント スキーマと統計情報の構成を提供する Configuration API
2026 年 8 月 なし
  • Google Play Console のエクスペリエンスが公開され、CSV アップロードがサポートされました
2026 年 9 月 なし
  • ゲーマー プロフィールにゲームの統計情報が表示される