Le statistiche di gioco sono statistiche cumulative sul tuo gioco che i giocatori possono visualizzare nel loro profilo giocatore. Queste statistiche consentono ai giocatori di monitorare i progressi nel tempo, vedere i momenti salienti e confrontarsi con altri giocatori, oltre a potenziare le funzionalità di Google Play come le missioni, le sfide social e altro ancora in futuro.
- Non richiedere un acquisto (ad esempio, acquista gemme) che non deve essere aggiornato a seguito di un acquisto in-app.
- Non richiedere la visualizzazione di pubblicità, ovvero non devono aggiornarsi a seguito della visualizzazione di una pubblicità.
- Non essere un utilizzo generico del gioco (ad esempio, aprire il gioco; utilizzare le impostazioni).
- Non includere dati utente personali e sensibili, come definiti dalle norme di Google Play, inclusi ID utente, password, posizione esatta o dati sanitari o qualsiasi contenuto offensivo, volgare, sessualmente esplicito, violento o che incita all'odio.
- Essere disponibile per tutti gli utenti (ad esempio, non un'azione specifica per un team o disponibile solo per gli utenti di un determinato livello o limitata a live ops a tempo limitato ecc.)
Passaggi per l'integrazione
Invia i dati utilizzando l'API Statistiche di gioco come eventi giocatore flessibili per statistiche ripetitive
e un evento predefinito progressUpdate per la statistica di progressione. Dovrai anche
configurare la logica per il calcolo delle statistiche che verranno visualizzate nel profilo giocatore
e le informazioni di visualizzazione.
Gli eventi giocatore rappresentano momenti di gioco distinti, completamenti del ciclo di gioco o traguardi di progressione.
Un evento del giocatore è definito e modellato come segue:
- Un evento è rappresentato da un'azione specifica intrapresa dal giocatore, ad esempio completare una partita, terminare una corsa, sbloccare un forziere o salvare i progressi in un'area.
- Ogni azione produce determinati risultati o ha determinate caratteristiche che la definiscono. Questi vengono modellati come proprietà evento che forniscono il contesto dell'evento e i suoi risultati specifici (ad esempio, tipo di corrispondenza, monete raccolte durante la corsa, risultato della partita o numero di headshot).
L'integrazione prevede i seguenti passaggi:
- Dichiarare lo schema dei dati non elaborati:definisci gli eventi dei giocatori utilizzando un caricamento CSV in Play Console. Vedi Creare eventi.
- Esegui l'integrazione con l'API Statistiche di gioco:invia i dati non elaborati dei giocatori nel formato dichiarato per eventi flessibili dei giocatori ed eventi
progressUpdate.- Invia tutti gli eventi definiti utilizzando l'integrazione lato client o lato server.
Per saperne di più, consulta gli esempi per gli eventi del player e per l'evento
progressUpdate.
- Invia tutti gli eventi definiti utilizzando l'integrazione lato client o lato server.
Per saperne di più, consulta gli esempi per gli eventi del player e per l'evento
- Carica un file ZIP: fornisci 3 file CSV e tutti i file immagine delle icone che
definiscono 5 statistiche ripetitive e 1 livello di progressione del giocatore.
Per ulteriori informazioni, consulta le linee guida relative ai file ZIP.
Includi i seguenti dettagli:
- File CSV per le statistiche ripetitive:
- Un ID univoco per la statistica.
- Specifica l'etichetta evento da utilizzare per il calcolo delle statistiche. Non puoi utilizzare l'etichetta evento
progressUpdatequi.- Specifica l'etichetta della proprietà da utilizzare per il calcolo delle statistiche. Deve essere una proprietà dell'evento specificato.
- Specifica il tipo di aggregazione (SUM, MAX, MIN o COUNT) per determinare come calcolare la statistica sull'etichetta della proprietà selezionata.
- Specifica una condizione di filtro facoltativa per calcolare la logica solo quando la condizione è soddisfatta. Definisci l'etichetta della proprietà e dell'evento, l'operatore (=, <, <=, >= o >) e il valore soglia.
- Includi un flag booleano per indicare se la statistica può essere utilizzata per funzionalità competitive.
- Se la funzionalità può essere utilizzata per funzionalità competitive, i limiti orari minimi e massimi per un giocatore reale. Questi dati verranno utilizzati per identificare i giocatori che potrebbero fare un uso improprio delle funzionalità come i campionati e le sfide social.
- Fornisci un nome visualizzato univoco per la statistica che vedono i giocatori.
- Fornisci un testo univoco che descriva la statistica. Questa descrizione deve fornire dettagli su come il giocatore la ottiene e verrà mostrata ai giocatori nell'interfaccia utente del profilo giocatore.
- Fornisci un'icona univoca che rappresenti la statistica inserendo il nome esatto del file dell'icona nel file CSV.
- Fornisci un input facoltativo per indicare se un valore crescente o decrescente è positivo per il giocatore. Questo input verrà utilizzato per celebrare i movimenti dei giocatori.
- Fornisci un'unità di misura facoltativa per la statistica, ad esempio km, miglia e secondi.
- File CSV per la statistica di progressione del giocatore:
- Fornisci un nome visualizzato univoco per la progressione del giocatore che i giocatori vedono.
- Fornisci un'icona univoca che rappresenti la statistica.
- Fornisci una descrizione per la statistica di avanzamento.
- Fornisci un input facoltativo per indicare se un valore crescente o decrescente
è positivo per il giocatore. Questo input verrà utilizzato per
celebrare i movimenti dei giocatori solo quando la proprietà
currentProgressè di tipo INT. - Fornisci un'unità di misura facoltativa per la statistica, ad esempio km, miglia, secondi.
- File CSV per la localizzazione: fornisci nomi visualizzati localizzati per tutte le statistiche.
- Aggiungi una riga per ogni localizzazione.
- Utilizza la stringa del nome visualizzato della statistica aggiunta nel file CSV precedente per identificare in modo univoco la statistica a cui viene aggiunta la localizzazione.
- Specifica la lingua da un elenco di codici lingua.
- Aggiungi la localizzazione per il nome visualizzato nella lingua specificata.
- Aggiungi la localizzazione della descrizione della statistica nella lingua specificata.
- File CSV per le statistiche ripetitive:
Pianificare lo schema
Puoi inviare due tipi di dati utilizzando l'API Statistiche di gioco: eventi giocatore e un evento predefinito per le statistiche di progressione del giocatore.
I seguenti esempi illustrano l'aspetto degli eventi del giocatore in vari tipi di giochi:
Eventi giocatore
Gli eventi giocatore sono definiti da momenti distinti in-game, completamenti del ciclo di gioco o traguardi di progressione.
- Definisci gli eventi come momenti specifici in-game, completamenti del ciclo di gioco o
traguardi di progressione:
- Completamenti del ciclo di gioco, ad esempio una partita o una corsa completata.
- Traguardi di progressione, ad esempio l'avanzamento dell'esplorazione di un'area salvata o un livello completato.
- Poiché le statistiche ripetitive devono rappresentare veramente le azioni ripetibili di un giocatore, gli eventi definiti devono essere associati al gameplay principale.
- Aggiungi proprietà per fornire il contesto dell'evento e dei suoi risultati, ad esempio il numero di livello, il tipo di partita, il tipo di arma, il numero di armi, i colpi alla testa, le monete raccolte, il risultato della partita, il tempo sul giro o il tipo di auto.
- Invia gli eventi all'interno della sessione di gioco non appena si verificano. Ad esempio, invia un evento di completamento del ciclo di gioco immediatamente dopo il completamento del ciclo.
Esempi
| Tipo di gioco | Etichetta evento | Momento in-game / Completamento evento di progressione / Completamento ciclo di gioco | Risultato | Caratteristiche |
|---|---|---|---|---|
| Rompicapo indie a progressione lineare | chapter_completed | Completamento dell'evento di progressione | N/D | Numero capitolo, Nome capitolo, Numero di tentativi, Numero di schermate, Numero di mosse, Contenuti del capitolo |
| screen_completed | Completamento dell'evento di progressione | Numero del capitolo, nome del capitolo, numero di tentativi, numero di mosse, contenuti del capitolo | ||
| Endless runner 3D | run_completed | Completamento del ciclo di gioco | Monete raccolte, punteggio | Durata della corsa, monete raccolte con il jetpack, booster utilizzato all'inizio della corsa, tavole da surf utilizzate, magneti utilizzati, molla utilizzata, jetpack utilizzato |
| RPG d'azione open world | areaExplorationProgress | Completamento dell'evento di progressione | Nemici sconfitti, pozioni raccolte | Numero area, Nome area, Percentuale di avanzamento |
| questCompleted | Completamento del ciclo di gioco | N/D | Nome missione | |
| weaponUnlocked | Momento in-game | N/D | Nome arma, Livello arma | |
| chestUnlocked | Momento in-game | Minerale di potenziamento raccolto | ||
| Puzzle informale con meta decorativa | puzzleCompleted | Completamento del ciclo di gioco / Completamento dell'evento di avanzamento | Monete raccolte, Potenziamenti raccolti | Numero di mosse, regalo di Butler utilizzato? Tipo di livello, numero del livello, booster di colore utilizzati, dinamite utilizzate |
| cardsCollected | Momento in-game | Carte a 1 stella, carte a 2 stelle, carte a 3 stelle, totale carte | Numero dell'album, nome dell'album | |
| Corse arcade | raceCompleted | Completamento del ciclo di gioco | Rank, NOS used, race_time | Tipo di gara, valutazione, auto_usata |
| carUpgraded | Momento in-game | Caratteristica dell'auto che è stata aggiornata, livello / valore precedente, nuovo livello / valore | Tipo di auto, livello attuale del garage | |
| Sparatutto battle royale in terza persona | matchCompleted | Completamento del ciclo di gioco | Eliminazioni, Headshot, Valore onore | Tipo di corrispondenza, tempo di sopravvivenza |
| Simulazione di gestione di eSport | matchCompleted | Completamento del ciclo di gioco | Risultato, gol segnati, gol | Nome della squadra avversaria, nome della squadra in campo |
| trainingCompleted | Momento in-game | Esercizi completati, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
progressUpdate Evento
Se il tuo gioco ha una meccanica di progressione principale, utilizza questo evento per inviare
lo stato di avanzamento attuale del giocatore. L'evento ha una proprietà predefinita denominata
"currentProgress" di tipo INT o STRING. Devi inviare il valore attuale dei progressi del giocatore nella meccanica di progressione principale utilizzando questa proprietà. Se utilizzi questo evento, la proprietà predefinita "currentProgress" deve essere presente e deve essere definita una statistica di avanzamento utilizzando questa proprietà.
Puoi inviare il valore attuale per altri sistemi di progressione nel tuo gioco, ad esempio
lifetime highest score o current coin balance, come altre proprietà di questo
evento.
Poiché i giocatori possono confrontare i loro profili in base ai progressi attuali all'interno del gioco, è importante che non vi siano ritardi nell'ottenimento del valore dei progressi attuali dopo la prima integrazione. Per rappresentare l'avanzamento attuale
accurato per i giocatori, devi inviare l'evento progressUpdate all'inizio di
ogni sessione di gioco e ogni volta che viene aggiornato l'avanzamento
attuale.
Esempi
| Tipo di gioco | Proprietà currentProgress dell'evento `progressUpdate` |
|---|---|
| Rompicapo a progressione lineare | Numero del capitolo o del livello attuale |
| 3d Endless Runner | Punteggio più alto, saldo attuale dei booster |
| Puzzle casual | Numero del livello attuale, numero di vittorie al primo tentativo, numero di aree completate, numero di raccolte completate |
| Corse arcade | Numero del livello attuale, saldo della valuta |
| RPG d'azione open world | Grado attuale del personaggio, numero del livello attuale |
| Sparatutto in terza persona | Numero del livello attuale |
| Simulazione di esport | Numero del livello del manager, numero del livello del club |
Configurare le statistiche
Dovrai configurare le statistiche ripetitive e di progressione definendo la logica di calcolo e visualizzando le informazioni su ciascuna statistica. Di seguito sono riportati esempi di statistiche ripetitive di diversi generi di giochi. Le statistiche ripetitive sono in genere statistiche che vengono aggiornate ripetutamente per qualsiasi giocatore in un numero molto ridotto (3-4) di sessioni di gioco e sono associate al ciclo di gioco principale.
| Nome del gioco | Nome visualizzato della statistica di gioco | Proprietà evento | Logica di calcolo [aggregazione] | Filtro |
|---|---|---|---|---|
| 3D Endless Runner | Corse completate | Qualsiasi proprietà dell'evento run_completed | Conteggio | Tutti i valori [nessun filtro] |
| Monete raccolte | Proprietà Coins_collected dell'evento run_completed | Somma | NA | |
| Chiavi raccolte | Proprietà Keys_collected dell'evento run_completed | Somma | N/D | |
| Punteggio più alto in una corsa | Proprietà del punteggio dell'evento run_completed | Max | N/D | |
| Partite con molte monete completate | Proprietà Coins_collected dell'evento run_completed | Conteggio | Valore > 5000 | |
| Rompicapo a progressione lineare | Capitoli completati | Qualsiasi proprietà dell'evento chapter_completed | Conteggio | Tutti i valori [nessun filtro] |
| Schermate completate | Qualsiasi proprietà dell'evento screen_completed | Conteggio | Tutti i valori [nessun filtro] | |
| Capitoli completati al primo tentativo | Proprietà Num_try dell'evento chapter_completed | Conteggio | Num_try = 1 | |
| Schermate completate al primo tentativo | Proprietà Num_try dell'evento screen_completed | Conteggio | Num_try = 1 | |
| RPG d'azione open world | Quest completate | Qualsiasi proprietà dell'evento quest_completed | Conteggio | Tutti i valori [nessun filtro] |
| Aree esplorate | Proprietà Perc_progress dell'evento area_exploration_progress | Conteggio | Valore = 100 | |
| Spade sbloccate | Proprietà weapon_type dell'evento weapon_unlocked | Conteggio | Valore = "spada" | |
| Nemici sconfitti | Proprietà Enemies_defeated di event area_exploration_progress | Somma | N/D | |
| Pozioni della salute raccolte | Proprietà Enhancement_ores dell'evento chest_unlocked | Somma | NA | |
| Puzzle casual | Livelli completati | Qualsiasi proprietà dell'evento level_completed | Conteggio | Tutti i valori [nessun filtro] |
| Livelli completati al primo tentativo | Proprietà Num_try dell'evento level_completed | Conteggio | Valore = 1 | |
| Booster di colore utilizzati | Proprietà Color_booster_used dell'evento level_completed | Somma | NA | |
| Potenziamenti bomba utilizzati | Proprietà Bomb_booster_used dell'evento level_completed | Somma | NA | |
| Carte raccolte | Proprietà total_cards di event cards_collected | Somma | NA | |
| Corse arcade | Gare vinte | Proprietà Rank dell'evento race_completed | Conteggio | Valore = 1 |
| Gara più veloce | proprietà race_time dell'evento race_completed | Min | N/D | |
| NOS utilizzato | Proprietà NOS_used dell'evento race_completed | Somma | NA | |
| Corse completate con Mustang | Proprietà car_type dell'evento race_completed | Conteggio | Valore = "Mustang" | |
| Upgrade dell'auto | Qualsiasi proprietà dell'evento car_upgraded | Conteggio | Tutti i valori [nessun filtro] | |
| Sparatutto battle royale in terza persona | Partite vinte | Qualsiasi proprietà dell'evento match_completed | Conteggio | Match_result = TRUE |
| Eliminazioni totali | Proprietà Eliminazioni dell'evento match_completed | Somma | N/D | |
| Tempo di sopravvivenza più alto | Proprietà Survival_time dell'evento match_completed | Max | N/D | |
| Foto ritratti totali | Headshots proprietà dell'evento match_completed | Somma | N/D | |
| Valore totale delle competenze | Proprietà skill_value dell'evento match_completed | Somma | N/D | |
| Simulazione di gestione di eSport | Partite vinte | Proprietà result dell'evento match_completed | Conteggio | Result = "Won" |
| Gol totali segnati | Proprietà Goals_scored dell'evento match_completed | Somma | N/D | |
| Partite difficili vinte | Proprietà del risultato dell'evento hard_match_completed | Conteggio | Risultato = "Vinto" | |
| Vittoria con la differenza reti più alta | Proprietà Goal_difference dell'evento match_completed | Max | Result = "Won" | |
| Esercizi di allenamento totali | Proprietà drills_done dell'evento training_completed | Somma | N/D | |
| Totale addestramenti completati | Qualsiasi proprietà dell'evento training_completed | Conteggio | N/D |
Dettagli dell'integrazione
Gli endpoint API e l'SDK sono disponibili per ricevere feedback in anteprima e saranno disponibili al pubblico generale (GA) a partire da agosto 2026. Visualizza la cronologia
Questa sezione mostra come creare eventi e inviarli nelle integrazioni lato client e lato server.
Quando inviare i dati
Gli eventi dei giocatori rappresentano le azioni in-game correlate al completamento del ciclo di gioco o a momenti specifici in-game. Invia questi eventi non appena si verificano. Ad esempio, invia l'evento di completamento del ciclo di gioco non appena il ciclo è completato.
progressUpdate Evento rappresenta il livello di avanzamento attuale di un giocatore.
I dati per la statistica di avanzamento devono essere inviati utilizzando questo evento nelle seguenti
situazioni:
- Ogni volta che viene aggiornato lo stato di avanzamento corrente, invia immediatamente l'ultimo valore
- Ogni volta che un giocatore avvia il gioco, per garantire la presenza di questa statistica per un giocatore in qualsiasi momento.
Integration paths
Esistono due percorsi di integrazione: client e server-to-server.
Integrazione server-server
Un endpoint API pubblico ti consente di inviare eventi nel payload della richiesta utilizzando le seguenti configurazioni:
Parametri del percorso
| Parametro | Tipo di dati | Descrizione |
|---|---|---|
| playerId | Stringa | L'ID PGS del giocatore. |
Autorizzazione e autenticazione
Le chiamate API server-to-server seguono le linee guida standard per l'accesso lato server ai servizi per i giochi di Play tramite OAuth 2.0. Le richieste devono includere un token di connessione
autorizzato con l'ambito https://www.googleapis.com/auth/games.
Eventi flessibili: corpo della richiesta
L'API di backend ha limiti rigorosi di convalida strutturale:
- Dimensione del batch:un massimo di 30 eventi per
BatchRecordEventsRequest. - Numero di proprietà:un massimo di 25 proprietà personalizzate per
PlayerGameEvent. - Limiti di lunghezza:nome evento (max 100 caratteri), chiavi proprietà (max 100 caratteri) e valori stringa proprietà (max 1024 caratteri).
- ID evento:deve essere una stringa UUID di 36 caratteri valida.
- Ritentativi e memorizzazione nella cache:evita di memorizzare nella cache o accumulare eventi eccessivi localmente se l'API non funziona, poiché i tentativi di batch che superano i 30 eventi verranno rifiutati. Riprova sempre a eseguire il chunk per rispettare il limite di dimensioni del batch.
BatchRecordEventsRequest
Consulta 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" }
Evento progressUpdate: corpo della richiesta
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") }
Corpo della risposta
In caso di esito positivo, restituisce uno stato HTTP 200 OK con un oggetto JSON vuoto.
Esempio di corpo della richiesta
Evento: 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 } } } ] }
Evento 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 } } ] }
Implementazioni client
Per scoprire di più sull'implementazione del client delle statistiche di gioco per la tua piattaforma, consulta le seguenti risorse:
Traguardi
| Data | Integrazione dell'API Statistiche di gioco | Configurazione delle statistiche di gioco |
| Settembre 2026 | N/D |
|