Statistik Game

Statistik Game adalah statistik kumulatif tentang game Anda yang dapat dilihat pemain di Profil gamer mereka. Statistik ini memungkinkan pemain melacak progres seumur hidup, melihat momen penting, dan membandingkan dengan pemain lain, serta mendukung fitur Google Play seperti Misi, Tantangan Sosial, dan lainnya pada masa mendatang.

Langkah-langkah integrasi

Kirim data menggunakan Game Stats API sebagai peristiwa pemain yang fleksibel untuk statistik berulang dan peristiwa progressUpdate yang telah ditentukan sebelumnya untuk statistik progres. Anda juga perlu mengonfigurasi logika untuk menghitung statistik yang akan muncul di profil Gamer dan informasi tampilannya.

Peristiwa Pemain merepresentasikan momen dalam game yang berbeda, penyelesaian loop game, atau pencapaian progres.

Peristiwa pemain ditentukan dan dimodelkan sebagai berikut:

  1. Peristiwa diwakili oleh tindakan tertentu yang dilakukan oleh pemain, seperti menyelesaikan pertandingan, menyelesaikan lari, membuka peti, atau menyimpan progres di suatu area.
  2. Setiap tindakan menghasilkan hasil tertentu atau memiliki karakteristik tertentu yang menentukan tindakan tersebut. Ini dimodelkan sebagai properti peristiwa yang memberikan konteks tentang peristiwa dan hasil spesifiknya (misalnya, jenis pertandingan, koin yang dikumpulkan selama pertandingan tersebut, hasil pertandingan, atau jumlah headshot).

Integrasi ini terdiri dari langkah-langkah berikut:

  • Nyatakan skema data mentah: Tentukan peristiwa pemain menggunakan upload CSV di Konsol Play. Lihat panduan file CSV.
  • Integrasikan dengan Game Stats API: Kirim data pemain mentah dalam format yang dinyatakan untuk peristiwa pemain yang fleksibel dan peristiwa progressUpdate.
    • Kirim semua peristiwa yang ditentukan menggunakan integrasi sisi klien atau sisi server. Untuk mengetahui informasi selengkapnya, lihat contoh untuk Peristiwa Fleksibel dan peristiwa progressUpdate.
  • Upload file ZIP: Berikan 3 file CSV dan semua file gambar ikon yang menentukan 5 statistik berulang dan 1 tingkat progres pemain. Untuk mengetahui informasi selengkapnya, lihat Panduan file ZIP. Sertakan detail berikut:
    • File CSV untuk statistik berulang:
      • ID unik untuk statistik.
      • Tentukan label peristiwa yang akan digunakan untuk perhitungan statistik. Anda tidak dapat menggunakan label peristiwa progressUpdate di sini.
        • Tentukan label properti yang akan digunakan untuk perhitungan statistik. Ini harus berupa properti peristiwa yang ditentukan.
        • Tentukan jenis agregasi (SUM, MAX, MIN, atau COUNT) untuk menentukan cara menghitung statistik pada label properti yang dipilih.
        • Tentukan kondisi filter opsional untuk menghitung logika hanya jika kondisi terpenuhi. Tentukan properti dan label peristiwa, operator (=, <, atau >), dan nilai minimum.
      • Sertakan tanda boolean untuk menunjukkan apakah statistik dapat digunakan untuk fitur kompetitif.
      • Jika fitur dapat digunakan untuk fitur kompetitif, maka batas per jam minimum dan maksimum untuk pemain asli. Hal ini akan digunakan oleh kami untuk mengidentifikasi pemain yang mungkin menyalahgunakan saat berpartisipasi dalam fitur seperti liga dan tantangan sosial.
      • Berikan nama tampilan unik untuk statistik yang dilihat pemain.
      • Berikan teks unik yang menjelaskan statistik. Deskripsi ini harus memberikan detail tentang cara pemain memperolehnya.
      • Berikan ikon unik yang merepresentasikan statistik dengan memasukkan nama file ikon yang tepat dalam file CSV.
      • Berikan urutan untuk menentukan urutan pemain akan melihat statistik di Profil gamer mereka
      • Berikan input opsional apakah nilai yang meningkat atau nilai yang menurun baik untuk pemain. Input ini akan digunakan untuk merayakan gerakan pemain.
      • Berikan satuan pengukuran opsional untuk statistik seperti km, mil, dan detik.
    • File CSV untuk statistik progres pemain:
      • Berikan nama tampilan unik untuk progres pemain yang dilihat pemain.
      • Berikan ikon unik yang merepresentasikan statistik.
      • Berikan deskripsi untuk statistik progres.
      • Berikan input opsional apakah nilai yang meningkat atau menurun baik untuk pemain. Input ini akan digunakan untuk merayakan pergerakan pemain hanya jika properti currentProgress berjenis INT.
      • Berikan satuan pengukuran opsional untuk statistik seperti km, mil, detik.
    • File CSV untuk pelokalan: Berikan nama tampilan yang dilokalkan untuk semua statistik.
      • Tambahkan satu baris untuk setiap pelokalan.
      • Gunakan string nama tampilan statistik seperti yang ditambahkan di CSV sebelumnya untuk mengidentifikasi statistik secara unik yang akan ditambahkan pelokalan.
      • Tentukan bahasa dari daftar kode bahasa.
      • Tambahkan pelokalan untuk nama tampilan dalam bahasa yang ditentukan.
      • Menambahkan pelokalan untuk deskripsi statistik dalam bahasa yang ditentukan.

Panduan file CSV untuk acara

Anda dapat mengimpor acara menggunakan file PlayerGameEvent.csv.

Nama file Wajib atau Opsional
PlayerGameEvent.csv Wajib

Format PlayerGameEvent.csv

CSV berisi peristiwa yang dideklarasikan dan propertinya sebagai nilai yang dipisahkan koma dalam urutan berikut:

 Event Name,Property Name,Property Type

Jika Anda mengirim peristiwa progressUpdate untuk progressionStat, tambahkan baris untuk peristiwa ini. Peristiwa ini harus berisi setidaknya properti currentProgress berjenis INT atau STRING, ditambah properti lain yang ingin Anda kirim.

Tabel contoh
Nama Peristiwa Nama Properti Jenis Properti
matchCompleted durasi DOUBLE
matchCompleted membunuh INT
matchCompleted isWinner BOOLEAN
matchCompleted matchType STRING (UTF-8)
itemCollected coinsAmount INT
itemCollected weaponType STRING (UTF-8)
progressUpdate currentProgress INT

Panduan file ZIP untuk statistik

Anda dapat mengimpor statistik sekaligus menggunakan file ZIP. Lihat tabel untuk mengetahui nama file yang tepat untuk digunakan dalam file ZIP Anda:

Nama file Wajib Diisi atau Opsional Nilai yang diterima
RepetitiveStatsConfig.csv Wajib Metadata untuk banyak acara.
ProgressionStatConfig.csv Wajib Peristiwa yang dideklarasikan dan propertinya.
StatLocalizations.csv Opsional Memberikan terjemahan untuk nama dan deskripsi pencapaian.
File ikon Wajib Ikon dalam format PNG, JPEG, atau JPG berukuran 512 x 512.

Format RepetitiveStatsConfig.csv

CSV berisi peristiwa yang dideklarasikan dan propertinya sebagai nilai yang dipisahkan koma dalam urutan berikut:

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

Jika Anda tidak ingin menggunakan kondisi filter, biarkan sel kosong.

Tabel contoh
ID Statistik Nama Peristiwa Nama Properti Agregasi Nama Tampilan Statistik Deskripsi Statistik Filter Properti (opsional) Operator Filter (opsional) Nilai Filter (opsional) Bersaing minLimit maxLimit Nama file ikon Nomor urutan Arah nilai yang baik satuan
1 matchCompleted durasi MAX Longest Match Survival Ini menunjukkan waktu bertahan pemain dalam pertandingan apa pun isWinner = TRUE TRUE 0 50 stat1.png 1 Menurun detik
2 matchCompleted isWinner COUNT Pertandingan yang Dimenangkan Ini menunjukkan jumlah pertandingan yang telah dimenangkan pemain isWinner = TRUE TRUE 0 50 stat3.png 2 Meningkat
3 matchCompleted membunuh SUM Membunuh lawan dalam pertandingan 1 lawan 1 Jumlah pembunuhan yang dilakukan dalam pertandingan 1 lawan 1 matchType = "1-on-1" (Personal) SALAH stat4.png 4 Meningkat
4 itemCollected coinsAmount SUM Total Emas yang Dikumpulkan Pemain mengumpulkan koin saat bermain dalam pertandingan weaponType = "sword" SALAH stat2.png 3 Meningkat

Format ProgressionStatConfig.csv

CSV berisi peristiwa yang dideklarasikan dan propertinya sebagai nilai yang dipisahkan koma dalam urutan berikut:

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

Statistik progres akan ditampilkan sebagai statistik pertama kepada pemain di Profil Gamer mereka.

Tabel contoh
ID Statistik Stat Display Name Deskripsi Statistik Nama File Ikon Arah nilai yang baik
5 Tingkat Pemain mengumpulkan XP dengan memainkan pertandingan dan naik level. Level.png meningkat

Format StatLocalizations.csv

CSV berisi peristiwa yang dideklarasikan dan propertinya sebagai nilai yang dipisahkan koma dalam urutan berikut:

Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
Tabel contoh
ID Statistik Stat Display Name Kode Bahasa Nama Statistik yang Dilokalkan (UTF-8) Deskripsi Statistik yang Dilokalkan (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 Total Emas yang Dikumpulkan es Total emas yang dikumpulkan Pemain mengumpulkan koin saat bermain dalam pertandingan 4 Total Emas yang Dikumpulkan fr Atau total collecté Le joueur collecte des pièces en jouant un match

Merencanakan skema

Anda dapat mengirim dua jenis data menggunakan Game Stats API: peristiwa pemain yang fleksibel dan peristiwa standar untuk statistik progres pemain. Contoh berikut menggambarkan tampilan peristiwa fleksibel di berbagai jenis game.

Peristiwa Pemutar Fleksibel

Peristiwa Pemain ditentukan oleh momen dalam game yang berbeda, penyelesaian game loop, atau pencapaian progres.

  • Tentukan peristiwa sebagai momen dalam game tertentu, penyelesaian game loop, atau tonggak progres:
    • Penyelesaian loop game, seperti pertandingan atau lari yang telah diselesaikan.
    • Tonggak progres, seperti progres eksplorasi area tersimpan atau level yang diselesaikan.
  • Tambahkan properti untuk memberikan konteks tentang peristiwa dan hasilnya, seperti nomor level, jenis pertandingan, jenis senjata, jumlah senjata, headshot, koin yang dikumpulkan, hasil pertandingan, waktu putaran, atau jenis mobil.
  • Kirim peristiwa dalam sesi gameplay segera setelah terjadi. Misalnya, kirim peristiwa penyelesaian loop game segera setelah loop selesai.
Contoh
Jenis game Label Peristiwa Momen dalam game / Penyelesaian Acara Progresi / Penyelesaian Game Loop Hasil Karakteristik
Game teka-teki indie Progresi Linear chapter_completed Penyelesaian acara progres T/A Nomor Bab, Nama Bab, Jumlah percobaan, jumlah layar, jumlah gerakan, konten bab
screen_completed Penyelesaian acara progres Nomor Bab, Nama Bab, Jumlah percobaan, jumlah langkah, konten bab
Game lari tanpa akhir 3D run_completed Penyelesaian Game Loop Koin yang dikumpulkan, skor Durasi lari, koin yang dikumpulkan dari jetpack, pendorong yang digunakan saat memulai lari, papan selancar yang digunakan, magnet yang digunakan, pelompat yang digunakan, jetpack yang digunakan
RPG Aksi Open World areaExplorationProgress Penyelesaian acara progres Musuh dikalahkan, ramuan dikumpulkan Nomor area, Nama area, Persentase progres
questCompleted Penyelesaian game loop T/A Nama misi
weaponUnlocked Momen dalam game T/A Nama Senjata, Level Senjata
chestUnlocked Momen dalam game Bijih peningkatan yang dikumpulkan
Puzzle kasual dengan meta dekoratif puzzleSelesai Penyelesaian loop game / Penyelesaian peristiwa progres Koin yang dikumpulkan, Booster yang dikumpulkan Jumlah langkah, hadiah Butler digunakan?, Jenis level, Nomor Level, peningkat warna yang digunakan, dinamit yang digunakan
cardsCollected Momen dalam game Kartu bintang 1, kartu bintang 2, kartu bintang 3, total kartu Nomor album, Nama album
Balap Arkade raceCompleted Penyelesaian game loop Peringkat, NOS yang digunakan, race_time Jenis balapan, rating, car_used
carUpgraded Momen dalam game Karakteristik mobil yang ditingkatkan, level / nilai lama, level / nilai baru Jenis mobil, level garasi saat ini
Game Battle Royale Shooter orang ketiga matchCompleted Penyelesaian game loop Eliminasi, Foto Profil, Nilai Penghargaan Jenis kecocokan, waktu bertahan hidup
Simulasi Pengelolaan eSport matchCompleted Penyelesaian game loop Hasil, gol yang dicetak, gol Nama tim lawan, nama tim yang bermain
trainingCompleted Momen dalam game Latihan selesai, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition

Acara progressUpdate

Jika game Anda memiliki mekanisme progres utama, gunakan peristiwa ini untuk mengirimkan progres pemain saat ini. Acara ini memiliki satu properti yang telah ditentukan sebelumnya yang disebut "currentProgress" berjenis INT atau STRING. Kirim nilai progres saat ini menggunakan properti ini, karena ini adalah satu-satunya nilai yang muncul di UI Statistik Game Profil Gamer.

Karena pemain dapat membandingkan profil mereka berdasarkan progres saat ini dalam game, penting agar tidak ada penundaan dalam mendapatkan nilai progres saat ini setelah integrasi pertama. Untuk menampilkan progres saat ini yang akurat kepada pemain, Anda harus mengirim peristiwa progressUpdate di awal setiap sesi game serta setiap kali ada pembaruan pada progres saat ini.

Contoh
Jenis game Properti currentProgress dari peristiwa `progressUpdate`
Game Teka-Teki Progresi Linear Nomor Segmen Atau Nomor Level Saat Ini
3d Endless Runner Skor Tertinggi, Saldo Booster saat ini
Puzzle Kasual Nomor Level saat ini, Jumlah Kemenangan Percobaan Pertama, Jumlah Area yang Diselesaikan, Jumlah Koleksi yang Diselesaikan
Balap Arkade Nomor Level Saat Ini, Saldo Mata Uang
RPG Aksi Open World Peringkat Karakter Saat Ini, Nomor Level Saat Ini
Third Person Shooter Nomor Level Saat Ini
Simulasi eSport Nomor Tingkat Pengelola, Nomor Tingkat Klub

Detail integrasi

Endpoint API dan SDK tersedia untuk mendapatkan masukan awal dan akan Tersedia Secara Umum (GA) mulai Juli 2026. Lihat linimasa

Bagian ini menunjukkan cara membuat peristiwa dan mengirimkannya dalam integrasi sisi klien dan sisi server.

Kapan Anda harus mengirimkan data

Acara Fleksibel mewakili tindakan dalam game yang terkait dengan penyelesaian game loop atau momen dalam game tertentu. Kirimkan peristiwa ini segera setelah terjadi. Misalnya, kirimkan peristiwa penyelesaian game loop segera setelah loop selesai.

progressUpdate Event merepresentasikan level progres pemain saat ini. Data untuk statistik progres harus dikirim menggunakan peristiwa ini dalam situasi berikut:

  1. Setiap kali ada update pada progres saat ini, kirimkan nilai terbaru segera
  2. Setiap kali pemain meluncurkan game untuk memastikan kehadiran statistik ini untuk pemain setiap saat.

Jalur integrasi

Ada dua jalur integrasi - klien dan server ke server.

Integrasi server ke server

Endpoint API publik memungkinkan Anda mengirim peristiwa dalam payload permintaan menggunakan konfigurasi berikut:

Parameter jalur
Parameter Jenis data Deskripsi
playerId String ID PGS pemain.

Otorisasi dan Autentikasi

Panggilan API server ke server mengikuti panduan Akses sisi server ke Layanan game Play standar menggunakan OAuth 2.0. Permintaan harus menyertakan token Bearer yang diotorisasi dengan cakupan https://www.googleapis.com/auth/games.

Acara Fleksibel: Isi Permintaan

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"
}

Peristiwa progressUpdate: Isi Permintaan

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
}

Isi Respons

Jika berhasil, akan menampilkan status HTTP 200 OK dengan objek JSON kosong.

Contoh Isi Permintaan

Acara fleksibel: 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
        }
      }
    }
  ]
}

Acara 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
      }
    }
  ]
}

Integrasi sisi klien

Integrasi sisi klien akan tersedia menggunakan SDK Unity, Java, dan C++.

Integrasi sisi klien untuk PlayerGameEvent akan melibatkan pembuatan objek peristiwa di Java atau Csharp, bergantung pada SDK, di titik pemicu dan mengirimkannya menggunakan fungsi upload yang disediakan oleh SDK.

Demikian pula, untuk peristiwa progressUpdate, catat progres yang diperbarui menggunakan properti currentProgress dengan properti tambahan yang ditentukan dan kirimkan menggunakan fungsi upload yang disediakan oleh SDK.

Acara

Integrasi sisi klien untuk PlayerGameEvent adalah:

Membuat Peristiwa Game Pemutar Fleksibel

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);
}
Membangun Peristiwa Game Pemain 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);
}
Merekam Peristiwa dan Mengupload

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);

Linimasa

Tanggal Integrasi Game Stats API Konfigurasi Statistik Game
Juni 2026
  • Developer dapat mulai merencanakan model data
Tidak tersedia
Juli 2026
  • API Tersedia Umum (GA) untuk semua developer untuk memulai integrasi
  • Data yang masuk divalidasi berdasarkan skema dan konfigurasi yang diberikan
  • API Konfigurasi untuk menyediakan skema peristiwa dan konfigurasi statistik
Agustus 2026 T/A
  • Pengalaman Konsol Play sudah aktif dengan dukungan untuk upload CSV
September 2026 T/A
  • Pemain mulai melihat statistik game di Profil gamer mereka