As estatísticas do jogo são cumulativas e podem ser acessadas pelos jogadores no perfil de jogador. Com essas estatísticas, os jogadores podem acompanhar o progresso ao longo da vida, ver os melhores momentos e comparar com outros jogadores, além de usar recursos do Google Play, como missões, desafios sociais e muito mais no futuro.
As estatísticas do jogo precisam:
- Não exigir uma compra (por exemplo, comprar gemas), ou seja, não devem ser atualizados como resultado de uma compra no app.
- Não exigir a visualização de anúncios, ou seja, não atualizar como resultado da visualização de um anúncio.
- Não ser um uso genérico do jogo (por exemplo, abrir o jogo, usar as configurações).
- Não incluir dados pessoais e sensíveis do usuário, conforme definido na política do Google Play, incluindo IDs de usuário, senhas, localização precisa ou dados de saúde, ou qualquer conteúdo ofensivo, profano, sexualmente explícito, violento ou de ódio.
- Estar disponível para todos os usuários (por exemplo, não ser uma ação específica da equipe ou estar disponível apenas para usuários de um determinado nível ou limitado a liveops por tempo limitado etc.)
Etapas de integração
Envie dados usando a API de estatísticas do jogo como eventos do jogador para estatísticas repetitivas e um evento predefinido progressUpdate para a estatística de progressão. Você também precisará configurar a lógica para calcular as estatísticas que aparecem no perfil de jogador e as informações de exibição delas.
Os eventos do jogador representam momentos distintos no jogo, conclusões do loop do jogo ou marcos de progressão.
Um evento do jogador é definido e modelado da seguinte forma:
- Um evento é representado por uma ação específica realizada pelo jogador, como concluir uma partida, terminar uma corrida, desbloquear um baú ou salvar o progresso em uma área.
- Cada ação resulta em determinados resultados ou tem certas características que a definem. Eles são modelados como propriedades de evento que fornecem contexto sobre o evento e os resultados específicos dele (por exemplo, tipo de partida, moedas coletadas durante a partida, resultado da partida ou contagem de tiros na cabeça).
A integração consiste nas seguintes etapas:
- Declare o esquema de dados brutos:defina eventos do jogador usando um upload de CSV no Play Console. Consulte Criar eventos.
- Integração com a API de estatísticas do jogo:envie dados brutos do jogador no formato declarado para eventos do jogador e evento
progressUpdate.- Envie todos os eventos definidos usando a integração do lado do cliente ou do servidor.
Para mais informações, consulte exemplos de Eventos do player e
evento
progressUpdate.
- Envie todos os eventos definidos usando a integração do lado do cliente ou do servidor.
Para mais informações, consulte exemplos de Eventos do player e
evento
- Fazer upload de um arquivo ZIP:forneça três arquivos CSV e todos os arquivos de imagem de ícone que definem cinco estatísticas repetitivas e um nível de progressão do jogador.
Para mais informações, consulte as diretrizes para arquivos ZIP.
Inclua os seguintes detalhes:
- Arquivo CSV para estatísticas repetitivas:
- Um ID exclusivo da estatística.
- Especifique o marcador de evento a ser usado para o cálculo de estatísticas. Não é possível usar o marcador de evento
progressUpdateaqui.- Especifique o rótulo da propriedade a ser usado para o cálculo de estatísticas. Precisa ser uma propriedade do evento especificado.
- Especifique o tipo de agregação (SUM, MAX, MIN ou COUNT) para determinar como calcular a estatística no rótulo da propriedade selecionada.
- Especifique uma condição de filtro opcional para calcular a lógica somente quando a condição for atendida. Defina a propriedade e o rótulo do evento, o operador (=, <, <=, >= ou >) e o valor do limite.
- Inclua uma flag booleana para indicar se a estatística pode ser usada em recursos competitivos.
- Se o recurso puder ser usado para recursos competitivos, os limites mínimos e máximos por hora para um jogador legítimo. Isso será usado para identificar jogadores que possam estar usando de forma indevida recursos como ligas e desafios sociais.
- Forneça um nome de exibição exclusivo para a estatística que os jogadores veem.
- Forneça um texto exclusivo que descreva a estatística. Essa descrição deve detalhar como o jogador a ganha e será mostrada aos jogadores na interface do perfil do jogador.
- Forneça um ícone exclusivo que represente a estatística inserindo o nome exato do arquivo de ícone no arquivo CSV.
- Forneça uma entrada opcional para indicar se um valor crescente ou decrescente é bom para o jogador. Essa entrada será usada para celebrar os movimentos do jogador.
- Forneça uma unidade de medida opcional para a estatística, como km, milhas e segundos.
- Arquivo CSV para estatística de progressão do jogador:
- Forneça um nome de exibição exclusivo para a progressão do jogador que os jogadores veem.
- Forneça um ícone exclusivo que represente a estatística.
- Forneça uma descrição para a estatística de progressão.
- Forneça uma entrada opcional para indicar se um valor crescente ou decrescente é bom para o jogador. Essa entrada será usada para
celebrar os movimentos do jogador somente quando a propriedade
currentProgressfor do tipo INT. - Forneça uma unidade de medida opcional para a estatística, como km, milhas ou segundos.
- Arquivo CSV para localização:forneça nomes de exibição localizados para todas as estatísticas.
- Adicione uma linha para cada localização.
- Use a string do nome de exibição da estatística, conforme adicionado no CSV anterior, para identificar de forma exclusiva a estatística em que a localização está sendo adicionada.
- Especifique o idioma em uma lista de códigos.
- Adicione a localização do nome de exibição no idioma especificado.
- Adicione a localização da descrição da estatística no idioma especificado.
- Arquivo CSV para estatísticas repetitivas:
Planejar o esquema
É possível enviar dois tipos de dados usando a API Estatísticas do Jogo: eventos do jogador e um evento predefinido para estatísticas de progressão do jogador.
Os exemplos a seguir ilustram como os eventos do player aparecem em vários tipos de jogos:
Eventos do player
Os eventos do jogador são definidos por momentos distintos no jogo, conclusões de loop de jogo ou marcos de progressão.
- Defina eventos como momentos específicos no jogo, conclusões de loop de jogo ou
marcos de progressão:
- Conclusões do loop de jogo, como uma partida ou corrida concluída.
- Marcos de progressão, como o progresso salvo da análise detalhada de uma área ou um nível concluído.
- Como as estatísticas repetitivas precisam representar ações repetíveis de um jogador, os eventos definidos precisam estar associados à jogabilidade principal.
- Adicione propriedades para fornecer contexto sobre o evento e os resultados dele, como número do nível, tipo de partida, tipo de arma, número de armas, tiros na cabeça, moedas coletadas, resultado da partida, tempo da volta ou tipo de carro.
- Envie eventos na sessão de jogo assim que eles ocorrerem. Por exemplo, envie um evento de conclusão de loop de jogo imediatamente após a conclusão do loop.
Exemplos
| Tipo de jogo | Rótulo do evento | Momento no jogo / Conclusão do evento de progressão / Conclusão do loop de jogo | Resultado | Características |
|---|---|---|---|---|
| Jogo de quebra-cabeça indie de progressão linear | chapter_completed | Conclusão do evento de progressão | N/A | Número do capítulo, nome do capítulo, número de tentativas, número de telas, número de movimentos, conteúdo do capítulo |
| screen_completed | Conclusão do evento de progressão | Número do capítulo, nome do capítulo, número de tentativas, número de movimentos, conteúdo do capítulo | ||
| Corrida infinita em 3D | run_completed | Conclusão do loop de jogo | Moedas coletadas, pontuação | Duração da corrida, moedas coletadas com o jetpack, booster usado no início da corrida, pranchas de surf usadas, ímãs usados, jumper usado, jetpack usado |
| RPG de ação de mundo aberto | areaExplorationProgress | Conclusão do evento de progressão | Inimigos derrotados, poções coletadas | Número da área, nome da área, porcentagem de progresso |
| questCompleted | Conclusão do loop de jogo | N/A | Nome da missão | |
| weaponUnlocked | Momento no jogo | N/A | Nome da arma, nível da arma | |
| chestUnlocked | Momento no jogo | Minério de aprimoramento coletado | ||
| Quebra-cabeça casual com metadados decorativos | puzzleCompleted | Conclusão do loop de jogo / Conclusão do evento de progressão | Moedas e boosters coletados | Número de movimentos, o presente do mordomo foi usado?, Tipo de nível, número do nível, boosters de cor usados, dinamites usadas |
| cardsCollected | Momento no jogo | Cartas de 1, 2 e 3 estrelas, total de cartas | Número do álbum, nome do álbum | |
| Corrida de arcade | raceCompleted | Conclusão do loop de jogo | Classificação, NOS usado, race_time | Tipo de corrida, classificação, carro_usado |
| carUpgraded | Momento no jogo | Característica do carro que foi atualizada, nível / valor antigo, nível / valor novo | Tipo de carro, nível atual da garagem | |
| Jogo de tiro battle royale em terceira pessoa | matchCompleted | Conclusão do loop de jogo | Eliminações, headshots, valor de honra | Tipo de correspondência, tempo de sobrevivência |
| Simulação de gerenciamento de eSports | matchCompleted | Conclusão do loop de jogo | Resultado, gols marcados, gols | Nome do time adversário e do time que está jogando |
| trainingCompleted | Momento no jogo | Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
progressUpdate evento
Se o jogo tiver uma mecânica de progressão principal, use esse evento para enviar o
progresso atual do jogador. O evento tem uma propriedade predefinida chamada "currentProgress" do tipo INT ou STRING. É esperado que você envie o
valor atual do progresso do jogador na mecânica de progressão principal usando essa
propriedade. Se você usar esse evento, a propriedade predefinida "currentProgress" precisará estar presente, e uma estatística de progressão precisará ser definida usando essa propriedade.
É possível enviar o valor atual de outros sistemas de progressão no jogo, como
lifetime highest score ou current coin balance, como outras propriedades desse
evento.
Como os jogadores podem comparar os perfis pelo progresso atual no
jogo, é importante que não haja atraso na obtenção do valor do progresso atual
após a primeira integração. Para representar o progresso atual preciso aos jogadores, envie o evento progressUpdate no início de cada sessão de jogo e sempre que houver uma atualização no progresso atual.
Exemplos
| Tipo de jogo | Propriedade "currentProgress" do evento "progressUpdate" |
|---|---|
| Jogo de quebra-cabeça de progressão linear | Número do capítulo ou nível atual |
| Corrida infinita em 3D | Maior pontuação, saldo atual de boosters |
| Quebra-cabeça casual | Número do nível atual, contagem de vitórias na primeira tentativa, contagem de áreas concluídas, número de coleções concluídas |
| Corrida de arcade | Número do nível atual, saldo da moeda |
| RPG de ação de mundo aberto | Classificação atual do personagem, número do nível atual |
| Jogo de tiro em terceira pessoa | Número do nível atual |
| Simulação de eSports | Número do nível de gerente, número do nível do clube |
Configurar suas estatísticas
Você precisa configurar as estatísticas de repetição e progressão definindo a lógica de computação e mostrando informações sobre cada uma delas. Confira abaixo exemplos de estatísticas de repetição de diferentes gêneros de jogos. Estatísticas repetitivas geralmente são atualizadas várias vezes para qualquer jogador em poucas sessões de jogo (3 a 4) e estão associadas ao loop principal do jogo.
| Nome do jogo | Nome de exibição da estatística do jogo | Propriedade do evento | Lógica de cálculo [agregação] | Filtrar |
|---|---|---|---|---|
| Corrida infinita 3D | Execuções concluídas | Qualquer propriedade do evento "run_completed" | Contagem | Todos os valores [sem filtro] |
| Moedas coletadas | Propriedade "coins_collected" do evento "run_completed" | Soma | NA | |
| Chaves coletadas | Propriedade "keys_collected" do evento "run_completed" | Soma | N/A | |
| Maior pontuação de corrida | Propriedade "score" do evento "run_completed" | Máx. | N/A | |
| Execuções concluídas com muitas moedas | Propriedade "coins_collected" do evento "run_completed" | Contagem | Valor > 5000 | |
| Jogo de quebra-cabeça de progressão linear | Capítulos concluídos | Qualquer propriedade do evento chapter_completed | Contagem | Todos os valores [sem filtro] |
| Telas concluídas | Qualquer propriedade do evento "screen_completed" | Contagem | Todos os valores [sem filtro] | |
| Capítulos concluídos na primeira tentativa | Propriedade "Num_try" do evento "chapter_completed" | Contagem | Num_try = 1 | |
| Telas concluídas na primeira tentativa | Propriedade "num_try" do evento "screen_completed" | Contagem | Num_try = 1 | |
| RPG de ação de mundo aberto | Quests concluídas | Qualquer propriedade do evento "quest_completed" | Contagem | Todos os valores [sem filtro] |
| Áreas exploradas | Propriedade "perc_progress" do evento "area_exploration_progress" | Contagem | Valor = 100 | |
| Espadas desbloqueadas | Propriedade "Weapon_type" do evento "weapon_unlocked" | Contagem | Value = "sword" | |
| Inimigos derrotados | Propriedade "enemies_defeated" de "event area_exploration_progress" | Soma | N/A | |
| Poções de vida coletadas | Propriedade "Enhancement_ores" do evento "chest_unlocked" | Soma | NA | |
| Quebra-cabeça casual | Níveis concluídos | Qualquer propriedade do evento level_completed | Contagem | Todos os valores [sem filtro] |
| Níveis concluídos na primeira tentativa | Propriedade num_try do evento level_completed | Contagem | Valor = 1 | |
| Reforços de cor usados | Propriedade "color_booster_used" do evento "level_completed" | Soma | NA | |
| Bombas usadas | Propriedade "bomb_booster_used" do evento "level_completed" | Soma | NA | |
| Cards coletados | Propriedade "Total_cards" do evento "cards_collected" | Soma | NA | |
| Corrida de arcade | Competições vencidas | Propriedade de classificação do evento "race_completed" | Contagem | Valor = 1 |
| Corrida mais rápida | Propriedade "race_time" do evento "race_completed" | Mín. | N/A | |
| NOS usado | Propriedade NOS_used do evento race_completed | Soma | NA | |
| Corridas concluídas com o Mustang | Propriedade "car_type" do evento "race_completed" | Contagem | Value = "Mustang" | |
| Upgrades de carro | Qualquer propriedade do evento "car_upgraded" | Contagem | Todos os valores [sem filtro] | |
| Jogo de tiro battle royale em terceira pessoa | Partidas ganhas | Qualquer propriedade do evento "match_completed" | Contagem | Match_result = TRUE |
| Total de eliminações | Propriedade "eliminations" do evento "match_completed" | Soma | N/A | |
| Maior tempo de sobrevivência | Propriedade "survival_time" do evento "match_completed" | Máx. | N/A | |
| Total de fotos de rosto | Propriedade "Retratos" do evento "match_completed" | Soma | N/A | |
| Valor total da habilidade | Propriedade "skill_value" do evento "match_completed" | Soma | N/A | |
| Simulação de gerenciamento de eSports | Partidas ganhas | Propriedade "result" do evento "match_completed" | Contagem | Resultado = "Ganhou" |
| Total de gols marcados | Propriedade "goals_scored" do evento "match_completed" | Soma | N/A | |
| Partidas difíceis vencidas | Propriedade "result" do evento "hard_match_completed". | Contagem | Resultado = "Ganhou" | |
| Maior vitória por diferença de gols | Propriedade "goal_difference" do evento "match_completed" | Máx. | Resultado = "Ganhou" | |
| Total de exercícios de treinamento | Propriedade "Drills_done" do evento "training_completed" | Soma | N/A | |
| Total de treinamentos concluídos | Qualquer propriedade do evento training_completed | Contagem | N/A |
Detalhes da integração
Os endpoints da API e o SDK estão disponíveis para feedback antecipado e vão estar em disponibilidade geral (GA) a partir de agosto de 2026. Consulte a linha do tempo
Esta seção mostra como criar eventos e enviá-los em integrações do lado do cliente e do servidor.
Quando enviar dados
Os eventos do jogador representam ações no jogo relacionadas a conclusões do loop de jogo ou momentos específicos no jogo. Envie esses eventos assim que eles ocorrerem. Por exemplo, envie o evento de conclusão do loop de jogo assim que ele for concluído.
O evento progressUpdate representa o nível de progresso atual de um jogador.
Os dados da estatística de progressão devem ser enviados usando esse evento nas seguintes situações:
- Sempre que houver uma atualização do progresso atual, envie o valor mais recente imediatamente.
- Sempre que um jogador inicia o jogo para garantir a presença dessa estatística para um jogador em todos os momentos.
Caminhos de integração
Há dois caminhos de integração: cliente e servidor para servidor.
Integração de servidor para servidor
Com um endpoint de API pública, é possível enviar eventos no payload da solicitação usando as seguintes configurações:
Parâmetros de caminho
| Parâmetro | Tipo de dado | Descrição |
|---|---|---|
| playerId | String | O ID do jogador no PGS. |
Autorização e autenticação
As chamadas de API de servidor para servidor seguem as diretrizes padrão de acesso do lado do servidor aos Serviços relacionados a jogos do Google Play usando o OAuth 2.0. As solicitações precisam incluir um token do portador
autorizado com o escopo https://www.googleapis.com/auth/games.
Eventos: corpo da solicitação
A API de back-end tem limites rigorosos de validação estrutural:
- Tamanho do lote:no máximo 30 eventos por
BatchRecordEventsRequest. - Contagem de propriedades:no máximo 25 propriedades personalizadas por
PlayerGameEvent. - Limites de comprimento:nome do evento (máximo de 100 caracteres), chaves de propriedade (máximo de 100 caracteres) e valores de string de propriedade (máximo de 1.024 caracteres).
- ID do evento:precisa ser uma string UUID de 36 caracteres válida.
- Repetição e armazenamento em cache:evite armazenar em cache ou acumular eventos excessivos localmente se a API falhar, já que as repetições em lote que excederem 30 eventos serão rejeitadas. Sempre divida as novas tentativas para respeitar o limite de tamanho do lote.
BatchRecordEventsRequest
Veja 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 da solicitação
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 da resposta
Se a operação for bem-sucedida, vai retornar um status HTTP 200 OK com um objeto JSON vazio.
Exemplo de corpo da solicitação
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 } } ] }
Implementações do cliente
Para saber mais sobre a implementação do cliente de estatísticas do jogo na sua plataforma, consulte os recursos a seguir:
Marcos
| Data | Integração da API de estatísticas do jogo | Configuração das estatísticas do jogo |
| Setembro de 2026 | N/A |
|