ゲームの統計データとは、プレーヤーがゲーマー プロフィールで確認できる、ゲーム関連の累積統計データを指します。これらの統計データを使用すると、プレーヤーはこれまでの進捗の確認、ハイライト場面の振り返り、他のプレーヤーとの比較ができるようになります。また、クエストやソーシャル チャレンジなど、Google Play で今後提供される機能を支えるデータとしても活用されます。
ゲームの統計データは、次の要件を満たす必要があります。
- 購入(ジェムの購入など)を必要としない。つまり、アプリ内購入の結果として更新されない。
- 広告の視聴を必要としない。つまり、広告の視聴の結果として更新されるものであってはなりません。
- ゲームの一般的な使用状況(ゲームを開く、設定を使用するなど)以外であること。
- Google Play ポリシーで定義されているユーザーの個人情報と機密情報(ユーザー ID、パスワード、正確な位置情報、健康に関するデータなど)や、不適切、冒とく的、露骨な性的表現、暴力的、ヘイト コンテンツを含めない。
- すべてのユーザーが利用できる(たとえば、チーム固有のアクションではない、特定のレベルのユーザーのみが利用できる、期間限定のライブオペレーションに限定されているなど)
この画像は、[マイページ] タブのゲーマー プロフィールに表示されるゲームの統計データを示しています。[自分] タブのこのユーザー インターフェース(UI)は、テスト目的でのみ使用できます。ゲームの統計データの UI は 2026 年 9 月に利用可能になる予定です。
集計方法
集計タイプは、送信されたイベントごとの値から統計情報を計算する方法を Google Play に指示します。
- SUM: 累積統計(収集したコインの合計数、与えたダメージの合計など)に使用します。ゲームは、各イベント インスタンス中に獲得した個別の金額を送信する必要があります。
- COUNT: イベントの発生回数(プレイしたゲーム数、勝利したゲーム数など)を表す統計情報に使用します。ゲームは、個別のイベント発生インスタンスを送信する必要があります。
- MAX: 1 回限りのピーク実績(1 回の実行での最高スコア、最大コンボ数、1 回の試合での最大ダメージなど)にのみ使用します。事前に計算された実行値からライフタイムの合計を表示する回避策として MAX を使用しないでください。
繰り返し統計情報の重要な実装要件
- イベントごとの値を送信する: イベントごとに、そのイベントで発生したことのみを送信します。たとえば、1 回の実行で収集されたコインの数などです。次に、統計情報の構成で集計タイプ(SUM、COUNT など)を設定します。これにより、繰り返し発生する統計情報をエンゲージメント メカニズム全体で再利用できるようになり、Google Play で適切なプレーヤー エクスペリエンスを作成できます。
- 全期間の合計を送信しない: たとえば、プレーヤーがゲーム クライアントまたはサーバーで収集したコインの合計数をトラッキングし、その合計数を MAX 集計で送信しないでください。このような統計情報は引き続きゲーマー プロフィール UI に表示されますが、Google Play では、リーグ、クエスト、スプリントなどの特典機能の強化に使用できなくなります。これらの機能は、プレーヤー エクスペリエンスを向上させ、ゲームに影響を与えるために使用されます。
正しいイベント モデリングの手順と例については、プレーヤー イベントと統計情報を構成するをご覧ください。
統合の手順
Game Stats API を使用して、繰り返し発生する統計データのプレーヤー イベントとしてデータを送信し、進行状況の統計データとして事前定義されたイベント progressUpdate を送信します。また、ゲーマー プロフィールに表示されるゲームの統計データとその表示情報を計算するロジックを構成する必要があります。
プレーヤー イベントは、ゲーム内の特定の瞬間、ゲームループの完了、進行状況のマイルストーンを表します。
プレーヤー イベントは、次のように定義され、モデル化されます。
- イベントは、試合の完了、ランの終了、チェストのロック解除、エリアでの進行状況の保存など、プレーヤーが行った特定のアクションによって表されます。
- 各アクションは、特定の結果をもたらすか、アクションを定義する特定の特性を持ちます。これらは、イベントとその特定の結果(マッチタイプ、そのラン中に収集されたコイン、マッチ結果、ヘッドショット数など)に関するコンテキストを提供するイベント プロパティとしてモデル化されます。
統合は次の手順で構成されます。
- 元データ スキーマを宣言する: Google Play Console で CSV をアップロードして、プレーヤー イベントを定義します。イベントを作成するをご覧ください。
- ゲームの統計データ API と統合する: プレーヤー イベントと
progressUpdateイベントの宣言された形式で、未加工のプレーヤー データを送信します。- クライアントサイドまたはサーバーサイドの統合を使用して、定義済みのすべてのイベントを送信します。詳細については、プレーヤー イベントと
progressUpdateイベントの例をご覧ください。
- クライアントサイドまたはサーバーサイドの統合を使用して、定義済みのすべてのイベントを送信します。詳細については、プレーヤー イベントと
- ZIP ファイルをアップロードする: 5 つの繰り返し統計データと 1 つのプレーヤーの進行状況レベルを定義する 3 つの CSV ファイルとすべてのアイコン画像ファイルを提供します。詳しくは、ZIP ファイルのガイドラインをご覧ください。以下の詳細を含めてください。
- 繰り返し統計情報の CSV ファイル:
- 統計データの一意の ID。
- 統計情報の計算に使用するイベントラベルを指定します。ここでは
progressUpdateイベントラベルを使用できません。- 統計情報の計算に使用するプロパティ ラベルを指定します。これは、指定したイベントのプロパティである必要があります。
- 集計タイプ(SUM、MAX、MIN、COUNT)を指定して、選択したプロパティ ラベルの統計情報の計算方法を決定します。
- 条件が満たされた場合にのみロジックを計算するように、オプションのフィルタ条件を指定します。プロパティとイベントラベル、演算子(=、<、<=、>=、>)、しきい値を定義します。
- 統計情報を対戦機能に使用できるかどうかを示すブール値フラグを含めます。
- この機能が競争要素のある機能に使用できる場合は、正規のプレーヤーの 1 時間あたりの最小値と最大値の制限。これは、リーグやソーシャル チャレンジなどの機能に参加する際に不正行為を行っている可能性のあるプレーヤーを特定するために使用されます。
- プレーヤーに表示される統計情報の一意の表示名を指定します。
- 統計情報を説明する一意のテキストを指定します。この説明には、プレーヤーが統計情報を獲得する方法の詳細を記載する必要があります。この説明は、ゲーマー プロフィール UI でプレーヤーに表示されます。
- CSV ファイルに正確なアイコン ファイル名を入力して、統計を表す一意のアイコンを指定します。
- 値の増加または減少がプレーヤーにとって良いかどうかを示すオプションの入力を指定します。この入力は、プレーヤーの動きを祝うために使用されます。
- 統計情報の測定単位(km、マイル、秒など)を指定します(省略可)。
- プレーヤーの進行状況の統計情報の CSV ファイル:
- プレーヤーに表示されるプレーヤーの進行状況に一意の表示名を指定します。
- 統計データを表す一意のアイコンを指定してください。
- 進行状況の統計情報の説明を入力します。
- 値の増加または減少がプレーヤーにとって良いかどうかを示すオプションの入力を指定します。この入力は、
currentProgressプロパティが INT 型の場合にのみ、プレーヤーの移動を祝うために使用されます。 - 統計データの測定単位(km、マイル、秒など)を指定します(省略可)。
- ローカライズ用の CSV ファイル: すべての統計情報にローカライズされた表示名を指定します。
- ローカライズごとに行を 1 つ追加します。
- 以前の CSV で追加した統計情報の表示名文字列を使用して、ローカライズが追加される統計情報を一意に識別します。
- 言語コードのリストから言語を指定します。
- 指定した言語で表示名のローカライズを追加します。
- 指定された言語で統計情報の説明のローカライズを追加します。
- 繰り返し統計情報の CSV ファイル:
スキーマを計画する
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 | ゲーム内の瞬間 | Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
イベント progressUpdate 件
ゲームに主要な進行の仕組みがある場合は、このイベントを使用してプレーヤーの現在の進行状況を送信します。このイベントには、INT 型または STRING 型の「currentProgress」という事前定義プロパティが 1 つあります。このプロパティを使用して、メインの進行メカニズムにおけるプレーヤーの進行状況の現在の値を送信する必要があります。このイベントを使用する場合は、事前定義されたプロパティ「currentProgress」が存在し、このプロパティを使用して進行状況の統計が定義されている必要があります。
このイベントの他のプロパティとして、lifetime highest score や current coin balance など、ゲーム内の他の進行状況システムの現在の値を送信できます。
プレーヤーはゲーム内の現在の進行状況でプロフィールを比較できるため、最初の統合後に現在の進行状況の値を取得する際に遅延が発生しないことが重要です。プレーヤーに正確な現在の進行状況を表示するには、各ゲーム セッションの開始時と、現在の進行状況が更新されるたびに、progressUpdate イベントを送信する必要があります。
例
| ゲームの種類 | `progressUpdate` イベントの currentProgress プロパティ |
|---|---|
| リニア プログレッション パズルゲーム | 現在のチャプター番号またはレベル番号 |
| 3D エンドレス ランナー | ハイスコア、現在のブースター残高 |
| カジュアル パズル | 現在のレベル番号、最初の挑戦での勝利数、完了したエリアの数、完了したコレクションの数 |
| アーケード レース | 現在のレベル番号、通貨残高 |
| オープン ワールド アクション RPG | 現在のキャラクター ランク、現在のレベル番号 |
| サードパーソン シューティング ゲーム | 現在のレベル番号 |
| e スポーツ シミュレーション | マネージャー レベルの番号、クラブレベルの番号 |
統計情報を構成する
繰り返し統計データと進行状況統計データを構成するには、各統計データの計算ロジックと表示情報を定義する必要があります。さまざまなゲームジャンルの繰り返し統計データの例を以下に示します。繰り返し統計データは通常、ごくわずか(3 ~ 4 回)のゲーム セッションでプレーヤーごとに繰り返し更新される統計データであり、コアゲーム ループに関連付けられています。
SUM、COUNT、MAX を使用するタイミングについては、適切な集計タイプを選択するをご覧ください。
| ゲーム名 | ゲームの統計データの表示名 | イベント プロパティ | 計算ロジック [集計] | フィルタ |
|---|---|---|---|---|
| 3D Endless Runner | 実行が完了しました | イベント run_completed の任意のプロパティ | カウント | すべての値 [フィルタなし] |
| 集めたコイン | イベント run_completed の coins_collected プロパティ | 合計 | なし | |
| 集めたキー | イベント run_completed の keys_collected プロパティ | 合計 | なし | |
| 最高ランスコア | イベント run_completed のスコア プロパティ | 最大 | なし | |
| 高コインのランを完了 | イベント run_completed の coins_collected プロパティ | カウント | 値 > 5000 | |
| リニア プログレッション パズルゲーム | 完了したチャプター | イベント chapter_completed の任意のプロパティ | カウント | すべての値 [フィルタなし] |
| 完了した画面 | イベント screen_completed の任意のプロパティ | カウント | すべての値 [フィルタなし] | |
| 1 回目で完了したチャプター | chapter_completed イベントの num_try プロパティ | カウント | Num_try = 1 | |
| 1 回目で完了した画面 | screen_completed イベントの num_try プロパティ | カウント | Num_try = 1 | |
| オープン ワールド アクション RPG | 完了したクエスト | イベント quest_completed の任意のプロパティ | カウント | すべての値 [フィルタなし] |
| 探索したエリア | area_exploration_progress イベントの perc_progress プロパティ | カウント | 値 = 100 | |
| 剣のロックが解除されました | イベント weapon_unlocked の weapon_type プロパティ | カウント | Value = "sword" | |
| 倒した敵の数 | イベント area_exploration_progress の enemies_defeated プロパティ | 合計 | なし | |
| 集めた回復ポーション | イベント chest_unlocked の enhancement_ores プロパティ | 合計 | なし | |
| カジュアル パズル | 完了したレベル | イベント level_completed の任意のプロパティ | カウント | すべての値 [フィルタなし] |
| 1 回目でクリアしたレベル | イベント level_completed の num_try プロパティ | カウント | 値 = 1 | |
| 使用したカラーブースター | イベント level_completed の color_booster_used プロパティ | 合計 | 該当なし | |
| 使用した爆弾ブースター | イベント level_completed の bomb_booster_used プロパティ | 合計 | 該当なし | |
| 収集したカード | イベント cards_collected の total_cards プロパティ | 合計 | 該当なし | |
| アーケード レース | 勝利レース数 | イベント race_completed の rank プロパティ | カウント | 値 = 1 |
| 最速レース | イベント race_completed の race_time プロパティ | 最小 | 該当なし | |
| NOS を使用 | イベント race_completed の NOS_used プロパティ | 合計 | 該当なし | |
| マスタングで完走したレース | イベント race_completed の car_type プロパティ | カウント | Value = "Mustang" | |
| 車のアップグレード | イベント car_upgraded の任意のプロパティ | カウント | すべての値 [フィルタなし] | |
| 三人称視点のバトルロイヤル シューティング ゲーム | 勝ち試合数 | イベント match_completed の任意のプロパティ | カウント | Match_result = TRUE |
| 合計排除数 | イベント match_completed の eliminations プロパティ | 合計 | 該当なし | |
| 最長生存時間 | イベント match_completed の survival_time プロパティ | 最大 | 該当なし | |
| ヘッドショットの合計 | イベント match_completed の headshots プロパティ | 合計 | 該当なし | |
| スキルの合計値 | イベント match_completed の skill_value プロパティ | 合計 | 該当なし | |
| e スポーツ マネジメント シミュレーション | 勝ち試合数 | イベント match_completed の結果プロパティ | カウント | 結果 = "Won" |
| 総得点数 | イベント match_completed の goals_scored プロパティ | 合計 | 該当なし | |
| ハードマッチの勝利数 | イベント hard_match_completed の結果プロパティ | カウント | 結果 = "Won" | |
| 得失点差が最も大きいチームが勝利 | イベント match_completed の goal_difference プロパティ | 最大 | 結果 = 「受注」 | |
| トレーニング ドリルの合計数 | イベント training_completed の drills_done プロパティ | 合計 | なし | |
| 完了したトレーニングの合計数 | イベント training_completed の任意のプロパティ | カウント | なし |
統合の詳細
このセクションでは、イベントを作成し、クライアントサイドとサーバーサイドの両方の統合で送信する方法について説明します。
データを送信するタイミング
プレーヤー イベントは、ゲームループの完了や特定のゲーム内モーメントに関連するゲーム内アクションを表します。これらのイベントは、発生したらすぐに送信してください。たとえば、ループが完了したらすぐにゲームループ完了イベントを送信します。
progressUpdate イベントは、プレーヤーの現在の進行状況レベルを表します。進行状況の統計データは、次の状況でこのイベントを使用して送信する必要があります。
- 現在の進行状況が更新されるたびに、最新の値をすぐに送信します。
- プレーヤーがゲームを起動するたびに、この統計情報が常にプレーヤーに表示されるようにします。
統合の手順
統合には、クライアントとサーバー間の 2 つのパスがあります。
サーバー間統合
公開 API エンドポイントを使用すると、次の構成を使用してリクエスト ペイロードでイベントを送信できます。
HTTP リクエスト
POST https://games.googleapis.com/games/v1/players/{playerId}/gameStats:
batchRecordEvents
パスパラメータ
| パラメータ | データ型 | 説明 |
|---|---|---|
| playerId | String(文字列) | プレーヤーの PGS ID。 |
承認と認証
サーバー間の API 呼び出しは、OAuth 2.0 を使用するPlay Games サービスへのサーバーサイド アクセスの標準ガイドラインに沿って行われます。リクエストには、https://www.googleapis.com/auth/games スコープで認可された署名なしトークンを含める必要があります。
イベント: リクエスト本文
バックエンド API には、厳格な構造検証の上限があります。
- バッチサイズ:
BatchRecordEventsRequestあたり最大 30 イベント。 - プロパティ数:
PlayerGameEventあたり最大 25 個のカスタム プロパティ。 - 長さの上限: イベント名(最大 100 文字)、プロパティキー(最大 100 文字)、プロパティ文字列値(最大 1,024 文字)。
- イベント ID: 有効な 36 文字の UUID 文字列である必要があります。
- 再試行とキャッシュ保存: API が失敗した場合に、過剰なイベントをローカルにキャッシュ保存または蓄積しないようにしてください。30 件を超えるイベントのバッチ再試行は拒否されます。バッチサイズの上限を遵守するため、再試行を常にチャンク化します。
BatchRecordEventsRequest
詳細については、BatchRecordEventsRequest をご覧ください。
{ "packageName": string, "requestTime": string, "events": [ { object (PlayerGameEvent) } ] }
PlayerGameEvent
{ "eventId": string, "eventName": string, "eventProperties": { // keys (e.g., "matchId", "score") "": { object (PropertyValue) } }, "eventTime": string // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z"). }
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, // 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 // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z") }
レスポンスの本文
成功すると、空の JSON オブジェクトを含む HTTP 200 OK ステータスが返されます。
リクエスト本文の例
イベント: PlayerGameEvent
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-05-09T00:44:44Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID for deduplication and idempotency "eventName": "matchCompleted", "eventTime": "2026-05-09T01:44:44Z", // RFC 3339 formatted timestamp string (e.g., "2026-05-09T01:44:44Z"). "eventProperties": { "matchId": { "stringValue": "Match_A" }, "gameMode": { "stringValue": "Battle_B" }, "locationId": { "stringValue": "Location_XYZ" }, "playerElimination": { "intValue": 2 }, "isWinner": { "boolValue": true } } } ] }
progressUpdate イベント
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-05-09T00:44:44Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID "eventName": "progressUpdate", "eventTime": "2026-05-09T01:44:44Z", // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z"). "eventProperties": { "currentProgress": { "intValue": 52 }, //Add more properties as per your requirement } } ] }
クライアントの実装
プラットフォームのゲームの統計データ クライアントの実装については、以下のリソースをご覧ください。
マイルストーン
| 日付 | ゲームの統計データ API の統合 | ゲームの統計データの設定 |
| 2026 年 9 月 | なし | プレーヤーのゲーマー プロフィールにゲームの統計データが表示されるようになります。 |