Statistik Game

Statistik Game adalah statistik kumulatif tentang game Anda yang dapat dilihat pemain di profil Gamer mereka. Statistik ini memungkinkan pemain memantau progres sepanjang waktu, melihat momen penting, dan membandingkannya dengan pemain lain, serta mendukung fitur Google Play seperti Misi, Tantangan Sosial, dan lainnya di masa mendatang.

Statistik game harus:

  • Tidak memerlukan pembelian (Misalnya, membeli permata), yaitu tidak boleh diperbarui sebagai akibat dari pembelian IAP apa pun.
  • Tidak memerlukan menonton iklan, yaitu tidak boleh diperbarui sebagai akibat dari menonton iklan.
  • Tidak menggunakan game secara umum (Misalnya, membuka game; menggunakan setelan).
  • Tidak menyertakan Data Pengguna yang Bersifat Pribadi dan Sensitif, sebagaimana ditentukan dalam Kebijakan Play, termasuk ID pengguna, sandi, lokasi presisi, atau data kesehatan, atau konten apa pun yang ofensif, tidak sopan, vulgar, berisi kekerasan, atau menyebarkan kebencian.
  • Tersedia untuk semua pengguna (Misalnya, bukan tindakan khusus tim atau hanya tersedia untuk pengguna dengan level tertentu atau terbatas pada liveops dengan batas waktu, dll.)

Gambar menunjukkan Statistik Game di Profil Gamer di tab Anda. Antarmuka pengguna (UI) di tab Anda ini hanya tersedia untuk tujuan pengujian. UI Statistik Game akan tersedia pada September 2026.

Statistik Game di tab Anda
Statistik Game dengan sorotan di tab Anda.

Jenis agregasi

Jenis agregasi memberi tahu Google Play cara menghitung statistik dari nilai per peristiwa yang Anda kirim:

  • SUM: Gunakan untuk statistik kumulatif (seperti total koin yang dikumpulkan, total kerusakan yang ditimbulkan). Game harus mengirimkan jumlah diskret yang diperoleh selama setiap instance peristiwa.
  • COUNT: Gunakan untuk statistik yang menunjukkan jumlah kemunculan suatu peristiwa (seperti game yang dimainkan, game yang dimenangkan). Game harus mengirim instance kemunculan peristiwa diskret.
  • MAX: Gunakan hanya untuk pencapaian puncak yang terjadi sekali (seperti skor tertinggi dalam satu sesi, streak kombo maksimum, atau damage pertandingan tunggal tertinggi). Jangan gunakan MAX sebagai solusi untuk menampilkan total sepanjang waktu dari nilai berjalan yang telah dihitung sebelumnya.

Persyaratan penerapan penting untuk statistik berulang

  • Kirim nilai per peristiwa: Untuk setiap peristiwa, kirim hanya apa yang terjadi dalam peristiwa tersebut, seperti koin yang dikumpulkan dalam satu sesi. Kemudian, tetapkan jenis agregasi, seperti SUM atau COUNT, dalam konfigurasi statistik Anda. Hal ini memastikan bahwa statistik berulang dapat digunakan kembali di seluruh mekanisme interaksi dan memungkinkan Google Play menciptakan pengalaman pemain yang tepat.
  • Jangan kirim total sepanjang waktu: Misalnya, jangan lacak total koin yang pernah dikumpulkan pemain di klien atau server game Anda dan kirim total tersebut dengan agregasi MAX. Statistik tersebut akan terus ditampilkan di UI Profil Gamer, tetapi Google Play tidak akan dapat menggunakannya untuk mendukung fitur yang memberikan reward seperti liga, misi, dan sprint untuk meningkatkan pengalaman pemain dan mendorong dampak bagi game Anda.

Untuk mengetahui petunjuk dan contoh pemodelan peristiwa yang benar, lihat Peristiwa Pemain dan Mengonfigurasi statistik.

Langkah-langkah integrasi

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

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

Peristiwa pemain ditentukan dan dimodelkan sebagai berikut:

  1. Peristiwa direpresentasikan 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. Peristiwa 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:

  • Menyatakan skema data mentah: Tentukan peristiwa pemain menggunakan upload CSV di Konsol Play. Lihat Membuat acara.
  • Integrasikan dengan Statistik Game API: Kirim data pemain mentah dalam format yang dideklarasikan untuk peristiwa pemain dan peristiwa progressUpdate.
  • Upload file ZIP: Berikan 3 file CSV dan semua file gambar ikon yang menentukan 5 statistik berulang dan 1 level progres pemain. Untuk 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 penghitungan statistik. Anda tidak dapat menggunakan label peristiwa progressUpdate di sini.
        • Tentukan label properti yang akan digunakan untuk penghitungan statistik. Properti ini harus merupakan properti dari 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. Data ini akan kami gunakan untuk mengidentifikasi pemain yang mungkin melakukan penyalahgunaan 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 dan akan ditampilkan kepada pemain di UI Profil Gamer.
      • Berikan ikon unik yang mewakili statistik dengan memasukkan nama file ikon yang sama persis di file CSV.
      • Berikan input opsional apakah nilai yang meningkat atau 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 mewakili 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 secara unik statistik yang akan ditambahkan pelokalan.
      • Tentukan bahasa dari daftar kode bahasa.
      • Tambahkan pelokalan untuk nama tampilan dalam bahasa yang ditentukan.
      • Tambahkan pelokalan untuk deskripsi statistik dalam bahasa yang ditentukan.

Merencanakan skema

Anda dapat mengirim dua jenis data menggunakan Game Stats API: peristiwa pemain dan peristiwa yang telah ditentukan untuk statistik progres pemain.

Contoh berikut menggambarkan tampilan peristiwa pemain di berbagai jenis game:

Acara Pemain

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

  • Tentukan peristiwa sebagai momen dalam game, penyelesaian game loop, atau pencapaian progres tertentu:
    • Penyelesaian game loop, seperti pertandingan atau lari yang telah selesai.
    • Tonggak pencapaian progres, seperti progres eksplorasi area yang disimpan atau level yang telah diselesaikan.
    • Karena statistik berulang harus benar-benar mewakili tindakan yang dapat diulang oleh pemain, peristiwa yang ditentukan harus dikaitkan dengan gameplay inti.
  • 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 peristiwa tersebut terjadi. Misalnya, kirim peristiwa penyelesaian loop game segera setelah loop selesai.
Contoh
Jenis game Label Peristiwa Momen dalam game / Penyelesaian Acara Progres / Penyelesaian Game Loop Hasil Karakteristik
Game teka-teki Indie dengan Progres Linear chapter_completed Penyelesaian peristiwa progres T/A Nomor Bab, Nama Bab, Jumlah percobaan, jumlah layar, jumlah gerakan, konten bab
screen_completed Penyelesaian peristiwa progres Nomor Bab, Nama Bab, Jumlah percobaan, jumlah gerakan, konten bab
Game lari tanpa akhir 3D run_completed Penyelesaian Game Loop Koin yang dikumpulkan, skor Durasi lari, koin yang dikumpulkan dari jetpack, booster yang digunakan di awal lari, papan selancar yang digunakan, magnet yang digunakan, jumper yang digunakan, jetpack yang digunakan
RPG Aksi Open World areaExplorationProgress Penyelesaian peristiwa 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 dikumpulkan
Puzzle kasual dengan meta dekoratif puzzleCompleted Penyelesaian loop game / Penyelesaian peristiwa progres Koin yang dikumpulkan, Booster yang dikumpulkan Jumlah langkah, Hadiah Butler digunakan?, Jenis level, Nomor Level, booster 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
Balapan Arkade raceCompleted Penyelesaian game loop Rank, NOS used, race_time Type of race, rating, car_used
carUpgraded Momen dalam game Karakteristik mobil yang diupgrade, level / nilai lama, level / nilai baru Jenis mobil, level garasi saat ini
Game Penembak Battle Royale Orang Ketiga matchCompleted Penyelesaian game loop Eliminasi, Headshot, Nilai Kehormatan Jenis pertandingan, waktu bertahan hidup
Simulasi Pengelolaan eSports matchCompleted Penyelesaian game loop Hasil, gol 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

progressUpdate Peristiwa

Jika game Anda memiliki mekanisme progres utama, gunakan peristiwa ini untuk mengirim progres pemain saat ini. Peristiwa ini memiliki satu properti standar yang disebut "currentProgress" dengan jenis INT atau STRING. Anda diharapkan mengirimkan nilai progres pemain saat ini dalam mekanika progres utama menggunakan properti ini. Jika Anda menggunakan peristiwa ini, properti yang telah ditetapkan "currentProgress" harus ada dan statistik progres harus ditentukan menggunakan properti ini.

Anda dapat mengirim nilai saat ini untuk sistem progres lainnya dalam game Anda seperti lifetime highest score atau current coin balance sebagai properti lain dari peristiwa ini.

Karena pemain dapat membandingkan profil mereka berdasarkan progres saat ini dalam game, penting untuk 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 update pada progres saat ini.

Contoh
Jenis game Properti currentProgress dari peristiwa `progressUpdate`
Game Teka-Teki Progresi Linear Nomor Bab atau Nomor Level Saat Ini
3D Endless Runner Skor Tertinggi, Saldo Booster Saat Ini
Puzzle Kasual Nomor Level Saat Ini, Jumlah Kemenangan pada Percobaan Pertama, Jumlah Area yang Diselesaikan, Jumlah Koleksi yang Diselesaikan
Balapan 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 Esports Nomor Level Manajer, nomor Level Klub

Mengonfigurasi statistik Anda

Anda harus mengonfigurasi statistik berulang dan progres dengan menentukan logika komputasi dan menampilkan informasi tentang setiap statistik. Contoh statistik berulang dari berbagai Genre Game disertakan di bawah. Statistik berulang biasanya merupakan statistik yang diperbarui berulang kali untuk pemain mana pun di beberapa (3-4) sesi game dan dikaitkan dengan game loop inti.

Untuk mempelajari kapan harus menggunakan SUM, COUNT, atau MAX, lihat Memilih jenis agregasi yang tepat.

Nama Game Nama tampilan statistik game Properti Acara Logika penghitungan [aggregation] Filter
3D Endless Runner Operasi selesai Properti apa pun dari peristiwa run_completed Jumlah Semua nilai [tanpa filter]
Koin yang dikumpulkan Properti coins_collected dari peristiwa run_completed Sum T/A
Kunci Dikumpulkan Properti keys_collected dari peristiwa run_completed Sum T/A
Skor Lari Tertinggi Properti skor dari peristiwa run_completed Maks T/A
Operasi koin tinggi selesai Properti coins_collected dari peristiwa run_completed Jumlah Value > 5000
Game Teka-Teki Progresi Linear Segmen selesai Properti apa pun dari peristiwa chapter_completed Jumlah Semua nilai [tanpa filter]
Layar selesai Properti apa pun dari peristiwa screen_completed Jumlah Semua nilai [tanpa filter]
Bab yang diselesaikan pada percobaan pertama Properti num_try dari peristiwa chapter_completed Jumlah Num_try = 1
Layar yang diselesaikan pada percobaan pertama Properti num_try dari peristiwa screen_completed Jumlah Num_try = 1
RPG Aksi Open World Quest selesai Properti apa pun dari peristiwa quest_completed Jumlah Semua nilai [tanpa filter]
Area yang Dijelajahi Properti perc_progress dari peristiwa area_exploration_progress Jumlah Value = 100
Pedang terbuka Properti weapon_type dari peristiwa weapon_unlocked Jumlah Value = "sword"
Musuh dikalahkan Properti enemies_defeated dari peristiwa area_exploration_progress Sum T/A
Ramuan Penyembuh Dikumpulkan Properti enhancement_ores dari peristiwa chest_unlocked Sum T/A
Puzzle Kasual Level selesai Properti apa pun dari peristiwa level_completed Jumlah Semua nilai [tanpa filter]
Level yang diselesaikan pada percobaan pertama Properti num_try dari peristiwa level_completed Jumlah Value = 1
Booster Warna yang Digunakan Properti Color_booster_used dari peristiwa level_completed Sum T/A
Booster Bom yang Digunakan Properti bomb_booster_used dari peristiwa level_completed Sum T/A
Kartu yang dikumpulkan Properti total_cards dari peristiwa cards_collected Sum T/A
Balapan Arkade Menang Properti peringkat dari peristiwa race_completed Jumlah Value = 1
Balapan tercepat properti race_time dari peristiwa race_completed Min T/A
NOS digunakan Properti NOS_used dari peristiwa race_completed Sum T/A
Balapan yang diselesaikan dengan Mustang Properti car_type dari peristiwa race_completed Jumlah Value = "Mustang"
Upgrade mobil Properti apa pun dari peristiwa car_upgraded Jumlah Semua nilai [tanpa filter]
Game Penembak Battle Royale Orang Ketiga Pertandingan yang Dimenangkan Properti apa pun dari peristiwa match_completed Jumlah Match_result = TRUE
Total eliminasi Properti eliminasi dari peristiwa match_completed Sum T/A
Waktu bertahan hidup tertinggi Properti survival_time dari peristiwa match_completed Maks T/A
Total headshot Properti headshot dari peristiwa match_completed Sum T/A
Total Nilai Skill Properti skill_value dari peristiwa match_completed Sum T/A
Simulasi Pengelolaan eSports Pertandingan yang Dimenangkan Properti hasil dari peristiwa match_completed Jumlah Result = "Won"
Total Gol yang dicetak Properti goals_scored dari peristiwa match_completed Sum T/A
Pertandingan sulit yang dimenangkan Properti hasil dari peristiwa hard_match_completed Jumlah Result = "Won"
Kemenangan dengan selisih gol tertinggi Properti goal_difference dari peristiwa match_completed Maks Result = "Won"
Total latihan pelatihan Properti Drills_done dari peristiwa training_completed Sum T/A
Total pelatihan yang diselesaikan Properti apa pun dari peristiwa training_completed Jumlah T/A

Detail integrasi

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

Kapan Anda harus mengirim data

Peristiwa Pemain mewakili tindakan dalam game yang terkait dengan penyelesaian game loop atau momen tertentu dalam game. Kirim peristiwa ini segera setelah terjadi. Misalnya, kirimkan peristiwa penyelesaian loop game segera setelah loop selesai.

Peristiwa progressUpdate mewakili tingkat 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, segera kirim nilai terbaru
  2. Setiap kali pemain meluncurkan game untuk memastikan keberadaan statistik ini bagi pemain setiap saat.

Jalur integrasi

Ada dua jalur integrasi, yaitu klien dan server ke server.

Integrasi server ke server

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

Permintaan HTTP

POST https://games.googleapis.com/games/v1/players/{playerId}/gameStats: batchRecordEvents

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

Otorisasi dan Autentikasi

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

Peristiwa: Isi Permintaan

API backend memiliki batas validasi struktural yang ketat:

  • Ukuran batch: Maksimum 30 peristiwa per BatchRecordEventsRequest.
  • Jumlah properti: Maksimum 25 properti kustom per PlayerGameEvent.
  • Batas panjang: Nama peristiwa (maks. 100 karakter), kunci properti (maks. 100 karakter), dan nilai string properti (maks. 1.024 karakter).
  • ID Peristiwa: Harus berupa string UUID 36 karakter yang valid.
  • Coba lagi dan penyimpanan dalam cache: Hindari menyimpan dalam cache atau mengumpulkan peristiwa berlebihan secara lokal jika API gagal, karena percobaan ulang batch yang melebihi 30 peristiwa akan ditolak. Selalu bagi percobaan ulang menjadi beberapa bagian untuk mematuhi batas ukuran batch.

BatchRecordEventsRequest

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

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 // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z")
}

Isi Respons

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

Contoh Isi Permintaan

Peristiwa: 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
        }
      }
    }
  ]
}

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

Implementasi klien

Untuk mempelajari penerapan klien Statistik Game untuk platform Anda, lihat referensi berikut:

Pencapaian

Tanggal Integrasi Statistik Game API Konfigurasi Statistik Game
September 2026 T/A Pemain mulai melihat statistik game di profil Gamer mereka.