Estadísticas del partido

Las Estadísticas de juego son estadísticas acumuladas sobre tu juego que los jugadores pueden ver en su perfil de gamer. Estas estadísticas permiten que los jugadores hagan un seguimiento de su progreso desde el principio, vean momentos destacados y se comparen con otros jugadores, además de impulsar funciones de Google Play, como misiones, desafíos sociales y mucho más en el futuro.

Las estadísticas de juego deben cumplir con los siguientes requisitos:

  • No requerir una compra (por ejemplo, comprar gemas), es decir, no deben actualizarse como resultado de ninguna compra de IAP
  • No deben requerir que se miren anuncios, es decir, no deben actualizarse como resultado de mirar un anuncio.
  • No debe ser un uso genérico del juego (por ejemplo, abrir el juego o usar la configuración).
  • No incluir datos personales y sensibles de los usuarios, según se definen en la política de Play, incluidos los IDs de usuario, las contraseñas, la ubicación precisa o los datos de salud, ni ningún contenido ofensivo, obsceno, sexualmente explícito, violento o que incite al odio.
  • Estar disponible para todos los usuarios (por ejemplo, no debe ser una acción específica de un equipo, estar disponible solo para usuarios de un nivel determinado ni limitarse a eventos de LiveOps por tiempo limitado, etc.)

En la imagen, se muestran las estadísticas de juego en el perfil de gamer en la pestaña Tú. Esta interfaz de usuario (IU) de la pestaña Tú solo está disponible para realizar pruebas. La IU de Estadísticas de juego estará disponible en septiembre de 2026.

Estadísticas de juego en la pestaña Tú
Estadísticas de juego con momentos destacados en la pestaña Tú.

Tipo de agregación

El tipo de agregación le indica a Google Play cómo calcular una estadística a partir de los valores por evento que envías:

  • SUM: Se usa para las estadísticas acumulativas (como el total de monedas recolectadas o el total de daño infligido). El juego debe enviar el importe discreto ganado durante cada instancia del evento.
  • COUNT: Se usa para las estadísticas que representan la cantidad de veces que se produce un evento (como partidas jugadas o partidas ganadas). El juego debe enviar las instancias de ocurrencia de eventos discretos.
  • MAX: Se usa solo para logros máximos de un solo caso (como la puntuación más alta en una sola carrera, la racha de combos máxima o el daño más alto en una sola partida). No uses MAX como solución alternativa para mostrar los totales del ciclo de vida a partir de valores de ejecución calculados previamente.

Requisito de implementación fundamental para las estadísticas repetitivas

  • Envía valores por evento: Para cada evento, envía solo lo que sucedió en ese evento, como las monedas recopiladas en una sola ejecución. Luego, establece un tipo de agregación, como SUM o COUNT, en la configuración de estadísticas. Esto garantiza que las estadísticas repetitivas se puedan reutilizar en las mecánicas de participación y permite que Google Play cree las experiencias de jugador adecuadas.
  • No envíes totales del ciclo de vida: Por ejemplo, no hagas un seguimiento de la cantidad total de monedas que un jugador haya recolectado en el cliente o servidor de tu juego y envíes ese total con la agregación MAX. Esas estadísticas se seguirán mostrando en la IU del perfil de gamer, pero Google Play no podrá usarlas para potenciar funciones de recompensas, como ligas, misiones y sprints, para mejorar la experiencia de los jugadores y generar un impacto en tu juego.

Para obtener instrucciones y ejemplos sobre el modelado correcto de eventos, consulta Eventos de jugadores y Cómo configurar tus estadísticas.

Pasos para la integración

Envía datos con la API de Game Stats como eventos de jugador para las estadísticas repetitivas y un evento predefinido progressUpdate para la estadística de progreso. También deberás configurar la lógica para calcular las estadísticas que aparecerían en el perfil de gamer y su información de visualización.

Los eventos de jugador representan distintos momentos del juego, finalizaciones de bucles de juego o hitos de progreso.

Un evento de jugador se define y modela de la siguiente manera:

  1. Un evento se representa con una acción específica que realiza el jugador, como completar una partida, terminar una carrera, desbloquear un cofre o guardar el progreso en un área.
  2. Cada acción genera ciertos resultados o tiene ciertas características que la definen. Estas se modelan como propiedades de eventos que proporcionan contexto sobre el evento y sus resultados específicos (por ejemplo, el tipo de partida, las monedas recolectadas durante esa carrera, el resultado de la partida o el recuento de disparos a la cabeza).

La integración consta de los siguientes pasos:

  • Declara el esquema de datos sin procesar: Define los eventos de los jugadores subiendo un archivo CSV en Play Console. Consulta Cómo crear eventos.
  • Integración con la API de Estadísticas de juego: Envía datos sin procesar de los jugadores en el formato declarado para los eventos de jugador y el evento progressUpdate.
    • Envía todos los eventos definidos con la integración del cliente o del servidor. Para obtener más información, consulta los ejemplos de eventos del reproductor y el evento progressUpdate.
  • Sube un archivo ZIP: Proporciona 3 archivos CSV y todos los archivos de imagen de íconos que definan 5 estadísticas repetitivas y 1 nivel de progreso del jugador. Para obtener más información, consulta los Lineamientos para archivos ZIP. Incluye los siguientes detalles:
    • Archivo CSV para estadísticas repetitivas:
      • Es un ID único para la estadística.
      • Especifica la etiqueta de evento que se usará para el cálculo de estadísticas. No puedes usar la etiqueta de evento progressUpdate aquí.
        • Especifica la etiqueta de propiedad que se usará para el cálculo de estadísticas. Debe ser una propiedad del evento especificado.
        • Especifica el tipo de agregación (SUM, MAX, MIN o COUNT) para determinar cómo calcular la estadística en la etiqueta de propiedad seleccionada.
        • Especifica una condición de filtro opcional para calcular la lógica solo cuando se cumpla la condición. Define la propiedad y la etiqueta del evento, el operador (=, <, <=, >= o >) y el valor del umbral.
      • Incluye una marca booleana para indicar si la estadística se puede usar en funciones competitivas.
      • Si la función se puede usar para funciones competitivas, se deben establecer límites mínimos y máximos por hora para un jugador genuino. Esto nos servirá para identificar a los jugadores que podrían estar haciendo un uso inadecuado de las funciones, como las ligas y los desafíos sociales.
      • Proporciona un nombre visible único para la estadística que ven los jugadores.
      • Proporciona un texto único que describa la estadística. Esta descripción debe proporcionar detalles sobre cómo el jugador la obtiene y se mostrará a los jugadores en la IU del perfil de gamer.
      • Proporciona un ícono único que represente la estadística ingresando el nombre exacto del archivo de ícono en el archivo CSV.
      • Proporciona una entrada opcional que indique si un valor creciente o decreciente es bueno para el jugador. Esta entrada se usará para celebrar los movimientos de los jugadores.
      • Proporciona una unidad de medida opcional para la estadística, como km, millas y segundos.
    • Archivo CSV para la estadística de progreso del jugador:
      • Proporciona un nombre visible único para la progresión del jugador que los jugadores ven.
      • Proporciona un ícono único que represente la estadística.
      • Proporciona una descripción para la estadística de progreso.
      • Proporciona una entrada opcional que indique si un valor creciente o decreciente es bueno para el jugador. Esta entrada se usará para celebrar los movimientos de los jugadores solo cuando la propiedad currentProgress sea de tipo INT.
      • Proporciona una unidad de medida opcional para la estadística, como km, millas o segundos.
    • Archivo CSV para la localización: Proporciona nombres visibles localizados para todas las estadísticas.
      • Agrega una fila para cada localización.
      • Usa la cadena del nombre visible de la estadística como se agregó en el archivo CSV anterior para identificar de forma inequívoca la estadística a la que se agrega la localización.
      • Especifica el idioma de una lista de códigos de idioma.
      • Agrega la localización del nombre visible en el idioma especificado.
      • Agrega la localización de la descripción de la estadística en el idioma especificado.

Planifica el esquema

Puedes enviar dos tipos de datos con la API de Game Stats: eventos de jugadores y un evento predefinido para las estadísticas de progreso de los jugadores.

En los siguientes ejemplos, se muestra cómo se ven los eventos de jugador en varios tipos de juegos:

Eventos del jugador

Los eventos de jugador se definen por momentos específicos del juego, finalizaciones de bucles de juego o hitos de progreso.

  • Define eventos como momentos específicos del juego, finalizaciones de bucles de juego o hitos de progreso:
    • Finalizaciones de bucles de juego, como una partida o una carrera completadas
    • Hitos de progreso, como el progreso de exploración de un área guardada o un nivel completado
    • Dado que las estadísticas repetitivas deben representar de forma fidedigna las acciones repetibles de un jugador, los eventos definidos deben estar asociados con la experiencia de juego principal.
  • Agrega propiedades para proporcionar contexto sobre el evento y sus resultados, como el número de nivel, el tipo de partida, el tipo de arma, la cantidad de armas, los disparos a la cabeza, las monedas recolectadas, el resultado de la partida, el tiempo de vuelta o el tipo de auto.
  • Envía eventos dentro de la sesión de juego en cuanto ocurran. Por ejemplo, envía un evento de finalización del bucle de juego inmediatamente después de que se complete el bucle.
Ejemplos
Tipo de juego Etiqueta del evento Momento en el juego / Finalización de evento de progresión / Finalización de bucle de juego Resultado Características
Juego de habilidad mental indie de progresión lineal chapter_completed Finalización de eventos de progresión N/A Número de capítulo, nombre de capítulo, número de intentos, número de pantallas, número de movimientos, contenido del capítulo
screen_completed Finalización de eventos de progresión Número de capítulo, nombre del capítulo, cantidad de intentos, cantidad de movimientos, contenido del capítulo
Juego de carrera infinita en 3D run_completed Finalización del bucle de juego Monedas recolectadas, puntuación Duración de la carrera, monedas recolectadas con la mochila propulsora, potenciador usado al inicio de la carrera, tablas de surf usadas, imanes usados, saltador usado, mochila propulsora usada
RPG de acción de mundo abierto areaExplorationProgress Finalización de eventos de progresión Enemigos derrotados, pociones recolectadas Número de área, nombre de área, porcentaje de progreso
questCompleted Finalización del bucle de juego N/A Nombre de la misión
weaponUnlocked Momento en el juego N/A Nombre del arma, nivel del arma
chestUnlocked Momento en el juego Se recolectó mineral de mejora
Rompecabezas casual con meta decorativa puzzleCompleted Finalización del bucle de juego o del evento de progresión Monedas recolectadas, potenciadores recolectados Cantidad de movimientos, ¿Se usó el regalo del mayordomo?, Tipo de nivel, número de nivel, potenciadores de color usados, dinamitas usadas
cardsCollected Momento en el juego Tarjetas de 1 estrella, tarjetas de 2 estrellas, tarjetas de 3 estrellas, total de tarjetas Número de álbum, nombre del álbum
Carreras de arcade raceCompleted Finalización del bucle de juego Rank, NOS used, race_time Type of race, rating, car_used
carUpgraded Momento en el juego La característica del automóvil que se actualizó, el nivel o valor anterior, y el nivel o valor nuevo Tipo de auto, nivel actual del garaje
Juego de disparos de batalla masiva en tercera persona matchCompleted Finalización del bucle de juego Eliminaciones, disparos a la cabeza, valor de honor Tipo de partida, tiempo de supervivencia
Simulación de gestión de eSports matchCompleted Finalización del bucle de juego Resultado, goles marcados, goles Nombre del equipo rival, nombre del equipo que juega
trainingCompleted Momento en el juego Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition

Evento progressUpdate

Si tu juego tiene una mecánica de progresión principal, usa este evento para enviar el progreso actual del jugador. El evento tiene una propiedad predefinida llamada "currentProgress" de tipo INT o STRING. Se espera que envíes el valor actual del progreso del jugador en la mecánica de progresión principal con esta propiedad. Si usas este evento, debe estar presente la propiedad predefinida "currentProgress" y se debe definir una estadística de progresión con esta propiedad.

Puedes enviar el valor actual de otros sistemas de progresión de tu juego, como lifetime highest score o current coin balance, como otras propiedades de este evento.

Como los jugadores pueden comparar sus perfiles según el progreso actual en el juego, es importante que no haya demoras en la obtención del valor de progreso actual después de la primera integración. Para representar el progreso actual preciso a los jugadores, debes enviar el evento progressUpdate al comienzo de cada sesión de juego, así como cada vez que haya una actualización del progreso actual.

Ejemplos
Tipo de juego Propiedad currentProgress del evento `progressUpdate`
Juego de habilidad mental con progresión lineal Número de capítulo o nivel actual
3d Endless Runner Puntuación alta, saldo actual de potenciadores
Rompecabezas casuales Número de nivel actual, cantidad de victorias en el primer intento, cantidad de áreas completadas, cantidad de colecciones completadas
Carreras de arcade Número de nivel actual, saldo de moneda
RPG de acción de mundo abierto Rango actual del personaje, número de nivel actual
Juego de disparos en tercera persona Número de nivel actual
Simulación de deportes electrónicos Número de nivel de administrador, número de nivel de club

Configura tus estadísticas

Deberás configurar tus estadísticas repetitivas y de progreso definiendo la lógica de cálculo y mostrando información sobre cada estadística. A continuación, se incluyen ejemplos de estadísticas repetitivas de diferentes géneros de juegos. Las estadísticas repetitivas suelen ser estadísticas que se actualizan de forma reiterada para cualquier jugador en unas pocas (3 o 4) sesiones de juego y se asocian con el bucle de juego principal.

Para saber cuándo usar SUM, COUNT o MAX, consulta Elige el tipo de agregación adecuado.

Nombre del juego Nombre visible de la estadística de juego Propiedad del evento Lógica de cálculo [aggregation] Filtro
Juego de carrera infinita en 3D Se completaron las ejecuciones Cualquier propiedad del evento run_completed Recuento Todos los valores [sin filtro]
Monedas recolectadas Propiedad coins_collected del evento run_completed Suma N/A
Claves recopiladas Propiedad keys_collected del evento run_completed Suma N/A
Puntuación más alta de la bajada Propiedad de puntuación del evento run_completed Máx. N/A
Carreras con muchas monedas completadas Propiedad coins_collected del evento run_completed Recuento Valor > 5000
Juego de habilidad mental con progresión lineal Capítulos completados Cualquier propiedad del evento chapter_completed Recuento Todos los valores [sin filtro]
Pantallas completadas Cualquier propiedad del evento screen_completed Recuento Todos los valores [sin filtro]
Capítulos completados en el primer intento Propiedad num_try del evento chapter_completed Recuento Num_try = 1
Pantallas completadas en el primer intento Propiedad num_try del evento screen_completed Recuento Num_try = 1
RPG de acción de mundo abierto Quests completadas Cualquier propiedad del evento quest_completed Recuento Todos los valores [sin filtro]
Áreas exploradas Propiedad perc_progress del evento area_exploration_progress Recuento Valor = 100
Espadas desbloqueadas Propiedad weapon_type del evento weapon_unlocked Recuento Value = "sword"
Enemigos derrotados Propiedad enemies_defeated del evento area_exploration_progress Suma N/A
Pócimas de vida recolectadas Propiedad enhancement_ores del evento chest_unlocked Suma N/A
Rompecabezas casuales Niveles completados Cualquier propiedad del evento level_completed Recuento Todos los valores [sin filtro]
Niveles completados en el primer intento Propiedad num_try del evento level_completed Recuento Valor = 1
Potenciadores de color usados Propiedad color_booster_used del evento level_completed Suma N/A
Potenciadores de bomba usados Propiedad Bomb_booster_used del evento level_completed Suma N/A
Tarjetas recopiladas Propiedad total_cards del evento cards_collected Suma N/A
Carreras de arcade Ganadas Propiedad de clasificación del evento race_completed Recuento Valor = 1
Carrera más rápida Propiedad race_time del evento race_completed Mín. N/A
NOS used Propiedad NOS_used del evento race_completed Suma N/A
Carreras terminadas con Mustang Propiedad car_type del evento race_completed Recuento Valor = "Mustang"
Mejoras para autos Cualquier propiedad del evento car_upgraded Recuento Todos los valores [sin filtro]
Juego de disparos de batalla masiva en tercera persona Partidos ganados Cualquier propiedad del evento match_completed Recuento Match_result = TRUE
Total de eliminaciones Propiedad Eliminations del evento match_completed Suma N/A
Tiempo de supervivencia más alto Propiedad survival_time del evento match_completed Máx. N/A
Total de disparos a la cabeza Propiedad Headshots del evento match_completed Suma N/A
Valor total de la habilidad Propiedad skill_value del evento match_completed Suma N/A
Simulación de gestión de eSports Partidos ganados Propiedad de resultado del evento match_completed Recuento Result = "Won"
Total de goles marcados Propiedad goals_scored del evento match_completed Suma N/A
Partidas difíciles ganadas Propiedad de resultado del evento hard_match_completed Recuento Result = "Won"
Victoria con la mayor diferencia de goles Propiedad Goal_difference del evento match_completed Máx. Result = "Won"
Total de ejercicios de entrenamiento Propiedad drills_done del evento training_completed Suma N/A
Total de entrenamientos completados Cualquier propiedad del evento training_completed Recuento N/A

Detalles de la integración

En esta sección, se muestra cómo crear eventos y enviarlos en integraciones del cliente y del servidor.

Cuándo debes enviar datos

Los eventos de jugador representan acciones en el juego relacionadas con la finalización de bucles de juego o momentos específicos en el juego. Envía estos eventos en cuanto se produzcan. Por ejemplo, envía el evento de finalización del bucle de juego en cuanto se complete.

El evento progressUpdate representa el nivel de progreso actual de un jugador. Los datos de la estadística de progreso se deben enviar con este evento en las siguientes situaciones:

  1. Cada vez que haya una actualización del progreso actual, envía el valor más reciente de inmediato.
  2. Cada vez que un jugador inicia el juego, para garantizar la presencia de esta estadística para un jugador en todo momento

Rutas de integración

Existen dos rutas de integración: de cliente y de servidor a servidor.

Integración de servidor a servidor

Un extremo de API público te permite enviar eventos en la carga útil de la solicitud con las siguientes opciones de configuración:

Solicitud HTTP

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

Parámetros de ruta
Parámetro Tipo de datos Descripción
playerId String Es el ID de PGS del jugador.

Autorización y autenticación

Las llamadas a la API de servidor a servidor siguen los lineamientos estándar de acceso del servidor a los Servicios de Play Games con OAuth 2.0. Las solicitudes deben incluir un token del portador autorizado con el permiso https://www.googleapis.com/auth/games.

Eventos: Cuerpo de la solicitud

La API de backend tiene límites estrictos de validación estructural:

  • Tamaño del lote: Un máximo de 30 eventos por BatchRecordEventsRequest.
  • Recuento de propiedades: Un máximo de 25 propiedades personalizadas por PlayerGameEvent.
  • Límites de longitud: Nombre del evento (máx. 100 caracteres), claves de propiedad (máx. 100 caracteres) y valores de cadena de propiedad (máx. 1,024 caracteres).
  • ID del evento: Debe ser una cadena de UUID de 36 caracteres válida.
  • Reintentos y almacenamiento en caché: Evita almacenar en caché o acumular demasiados eventos de forma local si la API falla, ya que se rechazarán los reintentos por lotes que superen los 30 eventos. Siempre divide los reintentos en fragmentos para respetar el límite de tamaño del lote.

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: Cuerpo de la solicitud

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

Cuerpo de la respuesta

Si se ejecuta correctamente, devuelve un estado HTTP 200 OK con un objeto JSON vacío.

Ejemplo de cuerpo de la solicitud

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

Implementaciones de clientes

Si quieres obtener información sobre la implementación del cliente de Estadísticas de juego para tu plataforma, consulta los siguientes recursos:

Logros

Fecha Integración de la API de Estadísticas de juego Configuración de las Estadísticas de juego
Septiembre de 2026 N/A Los jugadores comienzan a ver las estadísticas de juego en su perfil de gamer.