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.
- Tidak memerlukan pembelian (Misalnya, beli permata) yang tidak boleh diperbarui sebagai akibat dari pembelian IAP apa pun.
- Tidak memerlukan penayangan iklan, yaitu tidak boleh diupdate sebagai akibat dari penayangan iklan.
- Bukan penggunaan game yang umum (Misalnya, membuka game; menggunakan setelan).
- Tidak menyertakan Data Pengguna yang Bersifat Pribadi dan Sensitif, sebagaimana didefinisikan dalam Kebijakan Play, termasuk ID pengguna, sandi, data kesehatan atau lokasi presisi, atau konten yang menyinggung, tidak sopan, bersifat seksual, mengandung kekerasan, atau penuh kebencian.
- Tersedia untuk semua pengguna (Misalnya, bukan tindakan khusus tim atau hanya tersedia untuk pengguna dengan level tertentu atau terbatas untuk liveops berbatas waktu, dll.)
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:
- Peristiwa diwakili oleh tindakan tertentu yang dilakukan oleh pemain, seperti menyelesaikan pertandingan, menyelesaikan lari, membuka peti, atau menyimpan progres di suatu area.
- Setiap tindakan menghasilkan hasil tertentu atau memiliki karakteristik tertentu yang menentukan tindakan tersebut. Data 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 Membuat acara.
- Integrasikan dengan Statistik Game 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 Pemutar dan
peristiwa
progressUpdate.
- Kirim semua peristiwa yang ditentukan menggunakan integrasi sisi klien atau sisi server.
Untuk mengetahui informasi selengkapnya, lihat contoh untuk Peristiwa Pemutar dan
peristiwa
- 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
progressUpdatedi 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 batas.
- 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. ID 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 dan akan ditampilkan kepada pemain di UI Profil Gamer.
- Berikan ikon unik yang merepresentasikan statistik dengan memasukkan nama file ikon yang tepat dalam 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 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
currentProgressberjenis 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.
- File CSV untuk statistik berulang:
Merencanakan skema
Anda dapat mengirim dua jenis data menggunakan Game Stats API: peristiwa pemain dan peristiwa standar untuk statistik progres pemain.
Contoh berikut menggambarkan tampilan peristiwa pemutar di berbagai jenis game:
Acara Pemutar
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.
- Karena statistik berulang harus benar-benar mewakili tindakan berulang 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 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 Shooter Battle Royale Orang Ketiga | matchCompleted | Penyelesaian game loop | Eliminasi, Foto Profil, Nilai Kehormatan | 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 mengirim
progres pemain saat ini. Peristiwa ini memiliki satu properti yang telah ditentukan sebelumnya yang disebut
“currentProgress” dengan jenis INT atau STRING. Anda diharapkan mengirimkan
nilai progres pemain saat ini dalam mekanisme progres utama menggunakan
properti ini. Jika Anda menggunakan peristiwa ini, properti standar "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 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 Bab 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 |
Mengonfigurasi statistik Anda
Anda harus mengonfigurasi statistik pengulangan dan progres dengan menentukan logika komputasi dan menampilkan informasi tentang setiap statistik. Contoh statistik pengulangan dari berbagai Genre Game disertakan di bawah. Statistik berulang biasanya adalah statistik yang diperbarui berulang kali untuk pemain mana pun di beberapa (3-4) sesi game dan terkait dengan core game loop.
| Nama Game | Nama tampilan statistik game | Properti Peristiwa | Logika penghitungan [aggregation] | Filter |
|---|---|---|---|---|
| 3D Endless Runner | Operasi selesai | Properti apa pun dari event run_completed | Jumlah | Semua nilai [tanpa filter] |
| Koin yang dikumpulkan | Properti Coins_collected dari peristiwa run_completed | Sum | NA | |
| Kunci yang Dikumpulkan | Properti Keys_collected dari event run_completed | Sum | T/A | |
| Skor Lari Tertinggi | Properti skor run_completed peristiwa | Maks | T/A | |
| Operasi Koin tinggi selesai | Properti Coins_collected dari peristiwa run_completed | Jumlah | Nilai > 5.000 | |
| 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] | |
| Segmen yang diselesaikan pada percobaan pertama | Properti Num_try dari peristiwa chapter_completed | Jumlah | Num_try = 1 | |
| Layar 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 | Nilai = 100 | |
| Pedang tidak terkunci | Properti Weapon_type dari peristiwa weapon_unlocked | Jumlah | Nilai = “pedang” | |
| Musuh yang dikalahkan | Properti Enemies_defeated dari event area_exploration_progress | Sum | T/A | |
| Ramuan Penyembuh yang Dikumpulkan | Properti Enhancement_ores dari peristiwa chest_unlocked | Sum | NA | |
| Puzzle Kasual | Level selesai | Properti apa pun dari level_completed peristiwa | Jumlah | Semua nilai [tanpa filter] |
| Level yang diselesaikan pada percobaan pertama | Properti Num_try dari peristiwa level_completed | Jumlah | Nilai = 1 | |
| Booster Warna yang Digunakan | Properti Color_booster_used dari peristiwa level_completed | Sum | NA | |
| Booster Bom yang Digunakan | Properti Bomb_booster_used dari peristiwa level_completed | Sum | NA | |
| Kartu yang dikumpulkan | Properti Total_cards dari kartu acara cards_collected | Sum | NA | |
| Balap Arkade | Menang | Properti peringkat race_completed acara | Jumlah | Nilai = 1 |
| Balapan tercepat | Properti race_time dari event race_completed | Min | T/A | |
| NOS digunakan | Properti NOS_used dari event race_completed | Sum | NA | |
| Balapan yang diselesaikan dengan Mustang | Properti Car_type dari peristiwa race_completed | Jumlah | Nilai = “Mustang” | |
| Upgrade mobil | Properti apa pun dari peristiwa car_upgraded | Jumlah | Semua nilai [tanpa filter] | |
| Game Shooter Battle Royale Orang Ketiga | Pertandingan yang Dimenangkan | Properti apa pun dari peristiwa match_completed | Jumlah | Match_result = TRUE |
| Total eliminasi | Properti eliminasi dari match_completed acara | Sum | T/A | |
| Waktu bertahan hidup tertinggi | Properti Survival_time dari peristiwa match_completed | Maks | T/A | |
| Total foto wajah | Properti foto wajah dari acara match_completed | Sum | T/A | |
| Total Nilai Keterampilan | Properti Skill_value dari peristiwa match_completed | Sum | T/A | |
| Simulasi Pengelolaan eSport | Pertandingan yang Dimenangkan | Properti hasil dari event match_completed | Jumlah | Hasil = “Menang” |
| Total Gol yang dicetak | Properti Goals_scored dari event match_completed | Sum | T/A | |
| Pertandingan sulit yang dimenangkan | Properti hasil dari peristiwa hard_match_completed | Jumlah | Hasil = “Menang” | |
| Kemenangan dengan selisih gol tertinggi | Properti Goal_difference dari event match_completed | Maks | Hasil = “Menang” | |
| Total latihan | 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
Endpoint API dan SDK tersedia untuk masukan awal dan akan Tersedia Secara Umum (GA) mulai Agustus 2026. Lihat linimasa
Bagian ini menunjukkan cara membuat peristiwa dan mengirimkannya dalam integrasi sisi klien dan sisi server.
Kapan Anda harus mengirimkan data
Peristiwa Pemain 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.
Peristiwa progressUpdate mewakili level progres pemain saat ini.
Data untuk statistik progres harus dikirim menggunakan peristiwa ini dalam situasi berikut:
- Setiap kali ada update pada progres saat ini, kirimkan nilai terbaru segera
- 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.
Peristiwa Fleksibel: Isi Permintaan
Backend API memiliki batas validasi struktural yang ketat:
- Ukuran tumpukan: Maksimum 30 peristiwa per
BatchRecordEventsRequest. - Jumlah properti: Maksimum 25 properti kustom per
PlayerGameEvent. - Batasan panjang: Nama peristiwa (maks. 100 karakter), kunci properti (maks. 100 karakter), dan nilai string properti (maks. 1.024 karakter).
- ID Acara: Harus berupa string UUID 36 karakter yang valid.
- Coba lagi dan penyimpanan dalam cache: Hindari penyimpanan dalam cache atau pengumpulan 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 tumpukan.
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, akan menampilkan status HTTP 200 OK dengan objek JSON kosong.
Contoh Isi Permintaan
Event: 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 } } } ] }
Acara 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 |
|