Statistiques de jeu

Les statistiques de jeu sont des statistiques cumulées sur votre jeu que les joueurs peuvent consulter dans leur profil de joueur. Ces statistiques permettent aux joueurs de suivre leur progression globale, de revoir les moments forts et de se comparer à d'autres joueurs. Elles alimentent également les fonctionnalités Google Play telles que les quêtes, les défis sociaux et d'autres à venir.

Les statistiques de jeu doivent :

  • ne nécessitent pas d'achat (par exemple, acheter des gemmes) : elles ne doivent pas être mises à jour à la suite d'un achat via une application.
  • ne pas nécessiter de regarder des publicités (c'est-à-dire qu'elles ne doivent pas se mettre à jour après avoir regardé une publicité).
  • Ne pas être une utilisation générique du jeu (par exemple, ouvrir le jeu ou utiliser les paramètres).
  • Ne pas inclure de données utilisateur personnelles et sensibles, telles que définies dans le règlement Play, y compris les ID utilisateur, les mots de passe, la localisation précise ou les données de santé, ni aucun contenu offensant, vulgaire, sexuellement explicite, violent ou haineux.
  • être disponible pour tous les utilisateurs (par exemple, il ne s'agit pas d'une action spécifique à une équipe ni d'une action disponible uniquement pour les utilisateurs d'un certain niveau ou limitée à des opérations en direct à durée limitée, etc.) ;

Procédure d'intégration

Envoyez des données à l'aide de l'API Statistiques de jeu en tant qu'événements de joueur pour les statistiques répétitives et un événement prédéfini progressUpdate pour la statistique de progression. Vous devrez également configurer la logique de calcul des statistiques qui apparaîtront sur le profil de joueur et les informations d'affichage correspondantes.

Les événements de joueur représentent des moments distincts dans le jeu, des boucles de jeu complètes ou des étapes de progression.

Un événement de joueur est défini et modélisé comme suit :

  1. Un événement est représenté par une action spécifique effectuée par le joueur, comme terminer un match, une course ou une zone, déverrouiller un coffre ou enregistrer sa progression.
  2. Chaque action entraîne certains résultats ou présente certaines caractéristiques qui la définissent. Elles sont modélisées en tant que propriétés d'événement qui fournissent du contexte sur l'événement et ses résultats spécifiques (par exemple, le type de match, les pièces collectées au cours de cette partie, le résultat du match ou le nombre de tirs à la tête).

L'intégration comprend les étapes suivantes :

  • Déclarez le schéma de données brutes : définissez les événements de joueur à l'aide d'un import CSV dans la Play Console. Consultez Créer des événements.
  • Intégrer l'API Statistiques de jeu : envoyez les données brutes des joueurs au format déclaré pour les événements de joueur et l'événement progressUpdate.
  • Importez un fichier ZIP : fournissez trois fichiers CSV et tous les fichiers d'images d'icônes qui définissent cinq statistiques répétitives et un niveau de progression du joueur. Pour en savoir plus, consultez les exigences concernant les fichiers ZIP. Fournissez les informations suivantes :
    • Fichier CSV pour les statistiques répétitives :
      • Identifiant unique de la statistique.
      • Spécifiez le libellé d'événement à utiliser pour le calcul des statistiques. Vous ne pouvez pas utiliser le libellé d'événement progressUpdate ici.
        • Spécifiez le libellé de propriété à utiliser pour le calcul des statistiques. Il doit s'agir d'une propriété de l'événement spécifié.
        • Spécifiez le type d'agrégation (SUM, MAX, MIN ou COUNT) pour déterminer comment calculer la statistique sur le libellé de propriété sélectionné.
        • Spécifiez une condition de filtre facultative pour calculer la logique uniquement lorsque la condition est remplie. Définissez le libellé de propriété et d'événement, l'opérateur (=, <, <=, >= ou >) et la valeur du seuil.
      • Incluez un indicateur booléen pour indiquer si la statistique peut être utilisée pour les fonctionnalités compétitives.
      • Si la fonctionnalité peut être utilisée pour des fonctionnalités compétitives, les limites horaires minimales et maximales pour un joueur authentique. Cela nous permettra d'identifier les joueurs qui pourraient faire un usage abusif des fonctionnalités telles que les ligues et les défis sociaux.
      • Indiquez un nom à afficher unique pour la statistique que les joueurs verront.
      • Fournissez un texte unique décrivant la statistique. Cette description doit fournir des détails sur la façon dont le joueur l'obtient. Elle sera affichée aux joueurs dans l'interface utilisateur du profil de joueur.
      • Fournissez une icône unique représentant la statistique en saisissant le nom de fichier exact de l'icône dans le fichier CSV.
      • Indiquez, si vous le souhaitez, si une valeur croissante ou décroissante est bonne pour le joueur. Cette entrée sera utilisée pour célébrer les mouvements des joueurs.
      • Indiquez une unité de mesure facultative pour la statistique (par exemple, km, miles ou secondes).
    • Fichier CSV pour la statistique de progression du joueur :
      • Indiquez un nom à afficher unique pour la progression du joueur.
      • Fournissez une icône unique représentant la statistique.
      • Fournissez une description de la statistique de progression.
      • Indiquez, si vous le souhaitez, si une valeur croissante ou décroissante est bonne pour le joueur. Cette entrée ne sera utilisée pour célébrer les mouvements des joueurs que lorsque la propriété currentProgress est de type INT.
      • Indiquez une unité de mesure facultative pour la statistique (par exemple, km, miles ou secondes).
    • Fichier CSV pour la localisation : indiquez des noms à afficher localisés pour toutes les statistiques.
      • Ajoutez une ligne pour chaque localisation.
      • Utilisez la chaîne du nom à afficher de la statistique telle qu'elle a été ajoutée dans le fichier CSV précédent pour identifier de manière unique la statistique à laquelle la localisation est ajoutée.
      • Spécifiez la langue à partir d'une liste de codes de langue.
      • Ajoutez une localisation pour le nom à afficher dans la langue spécifiée.
      • Ajoutez une description localisée pour la statistique dans la langue spécifiée.

Planifier le schéma

Vous pouvez envoyer deux types de données à l'aide de l'API Statistiques de jeu : les événements de joueur et un événement prédéfini pour les statistiques de progression du joueur.

Les exemples suivants illustrent l'apparence des événements de joueur dans différents types de jeux :

Événements du lecteur

Les événements de joueurs sont définis par des moments distincts dans le jeu, des boucles de jeu complètes ou des étapes de progression.

  • Définissez des événements comme des moments spécifiques du jeu, des boucles de jeu complètes ou des étapes de progression :
    • Achèvements de la boucle de jeu, comme un match ou une course terminés.
    • Étapes de progression, telles que la progression de l'exploration d'une zone enregistrée ou un niveau terminé.
    • Étant donné que les statistiques répétitives doivent réellement représenter des actions répétables par un joueur, les événements définis doivent être associés au gameplay de base.
  • Ajoutez des propriétés pour fournir du contexte sur l'événement et ses résultats, comme le numéro du niveau, le type de match, le type d'arme, le nombre d'armes, les tirs à la tête, les pièces collectées, le résultat du match, le temps au tour ou le type de voiture.
  • Envoyez les événements de la session de jeu dès qu'ils se produisent. Par exemple, envoyez un événement de fin de boucle de jeu immédiatement après la fin de la boucle.
Exemples
Type de jeu Libellé d'événement Moment dans le jeu / Événement de progression terminé / Boucle de jeu terminée Résultat Caractéristiques
Jeu de réflexion indé à progression linéaire chapter_completed Événement de progression terminé ND Numéro de chapitre, nom du chapitre, nombre d'essais, nombre d'écrans, nombre de mouvements, contenu du chapitre
screen_completed Événement de progression terminé Numéro du chapitre, nom du chapitre, nombre de tentatives, nombre de mouvements, contenu du chapitre
Jeu de course infinie en 3D run_completed Fin de la boucle de jeu Pièces collectées, score Durée de la course, pièces collectées avec le jetpack, booster utilisé au début de la course, surfboards utilisés, aimants utilisés, jumper utilisé, jetpack utilisé
RPG d'action en monde ouvert areaExplorationProgress Événement de progression terminé Ennemis vaincus, potions collectées Numéro de zone, nom de zone, pourcentage de progression
questCompleted Fin de la boucle de jeu ND Nom de la quête
weaponUnlocked Moment dans le jeu ND Nom de l'arme, niveau de l'arme
chestUnlocked Moment dans le jeu Minerai d'amélioration collecté
Casse-tête simple avec méta décorative puzzleCompleted Événement de progression / d'achèvement de la boucle de jeu Pièces collectées, boosters collectés Nombre de coups, cadeau de Butler utilisé ?, Type de niveau, numéro de niveau, boosters de couleur utilisés, dynamites utilisées
cardsCollected Moment dans le jeu Cartes 1 étoile, cartes 2 étoiles, cartes 3 étoiles, nombre total de cartes Numéro de l'album, nom de l'album
Course arcade raceCompleted Fin de la boucle de jeu Rank, NOS used, race_time Type de course, classement, car_used
carUpgraded Moment dans le jeu Caractéristique de la voiture qui a été améliorée, ancien niveau / ancienne valeur, nouveau niveau / nouvelle valeur Type de voiture, niveau actuel du garage
Jeu de tir Battle Royale à la troisième personne matchCompleted Fin de la boucle de jeu Éliminations, tirs à la tête, valeur d'honneur Type de correspondance, durée de vie
Simulation de gestion d'e-sport matchCompleted Fin de la boucle de jeu Résultat, buts marqués, buts Nom de l'équipe adverse, nom de l'équipe qui joue
trainingCompleted Moment dans le jeu Exercices effectués : teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition

progressUpdate Événement

Si votre jeu comporte un mécanisme de progression principal, utilisez cet événement pour envoyer la progression actuelle du joueur. L'événement comporte une propriété prédéfinie appelée "currentProgress" de type INT ou STRING. Vous devez envoyer la valeur actuelle de la progression du joueur dans le mécanisme de progression principal à l'aide de cette propriété. Si vous utilisez cet événement, la propriété prédéfinie "currentProgress" doit être présente et une statistique de progression doit être définie à l'aide de cette propriété.

Vous pouvez envoyer la valeur actuelle d'autres systèmes de progression de votre jeu, comme lifetime highest score ou current coin balance, en tant qu'autres propriétés de cet événement.

Étant donné que les joueurs peuvent comparer leurs profils en fonction de leur progression actuelle dans le jeu, il est important qu'il n'y ait aucun délai pour obtenir la valeur de progression actuelle après la première intégration. Pour représenter la progression actuelle de manière précise aux joueurs, vous devez envoyer l'événement progressUpdate au début de chaque session de jeu, ainsi qu'à chaque mise à jour de la progression actuelle.

Exemples
Type de jeu Propriété currentProgress de l'événement `progressUpdate`
Jeu de réflexion à progression linéaire Numéro de chapitre ou de niveau actuel
Jeu de course infinie en 3D Meilleur score, solde de boosters actuel
Puzzle occasionnel Numéro du niveau actuel, nombre de victoires au premier essai, nombre de zones terminées, nombre de collections terminées
Course arcade Numéro du niveau actuel, solde de la devise
RPG d'action en monde ouvert Rang actuel du personnage, numéro du niveau actuel
Tir à la troisième personne Numéro du niveau actuel
Simulation d'e-sport Numéro de niveau du responsable, numéro de niveau du club

Configurer vos statistiques

Vous devrez configurer vos statistiques répétitives et de progression en définissant la logique de calcul et les informations à afficher pour chaque statistique. Vous trouverez ci-dessous des exemples de statistiques répétitives pour différents genres de jeux. Les statistiques répétitives sont généralement des statistiques qui sont mises à jour de manière répétée pour n'importe quel joueur au cours de quelques sessions de jeu (3 à 4) et qui sont associées à la boucle de jeu principale.

Nom du jeu Nom à afficher de la statistique de jeu Propriété de l'événement Logique de calcul [agrégation] Filtrer
Jeu de course infinie en 3D Exécutions terminées N'importe quelle propriété de l'événement run_completed Nombre Toutes les valeurs [aucun filtre]
Pièces collectées Propriété "Coins_collected" de l'événement "run_completed" Somme N/A
Clés collectées Propriété "keys_collected" de l'événement "run_completed" Somme ND
Meilleur score de course Propriété "score" de l'événement "run_completed" Max ND
Courses à pièces élevées terminées Propriété "Coins_collected" de l'événement "run_completed" Nombre Valeur > 5 000
Jeu de réflexion à progression linéaire Chapitres terminés N'importe quelle propriété de l'événement chapter_completed Nombre Toutes les valeurs [aucun filtre]
Écrans terminés N'importe quelle propriété de l'événement screen_completed Nombre Toutes les valeurs [aucun filtre]
Chapitres terminés du premier coup Propriété Num_try de l'événement chapter_completed Nombre Num_try = 1
Écrans terminés du premier coup Propriété Num_try de l'événement screen_completed Nombre Num_try = 1
RPG d'action en monde ouvert Quêtes terminées N'importe quelle propriété de l'événement quest_completed Nombre Toutes les valeurs [aucun filtre]
Zones explorées Propriété "perc_progress" de l'événement "area_exploration_progress" Nombre Valeur = 100
Sabres débloqués Propriété "weapon_type" de l'événement "weapon_unlocked" Nombre Value = "sword"
Ennemis vaincus Propriété "Enemies_defeated" de l'événement "area_exploration_progress" Somme ND
Potions de santé collectées Propriété "Enhancement_ores" de l'événement "chest_unlocked" Somme N/A
Puzzle occasionnel Niveaux terminés N'importe quelle propriété de l'événement "level_completed" Nombre Toutes les valeurs [aucun filtre]
Niveaux terminés du premier coup Propriété "Num_try" de l'événement level_completed Nombre Valeur = 1
Dynamiseurs de couleurs utilisés Propriété "color_booster_used" de l'événement "level_completed" Somme N/A
Bombes utilisées Propriété "Bomb_booster_used" de l'événement "level_completed" Somme N/A
Cartes collectées Propriété "Total_cards" de l'événement "cards_collected" Somme N/A
Course arcade Victoires Propriété "Rank" de l'événement "race_completed" Nombre Valeur = 1
Course la plus rapide Propriété race_time de l'événement race_completed Min N/A
NOS utilisé Propriété NOS_used de l'événement race_completed Somme N/A
Courses terminées avec la Mustang Propriété "car_type" de l'événement "race_completed" Nombre Valeur = "Mustang"
Améliorations de la voiture N'importe quelle propriété de l'événement car_upgraded Nombre Toutes les valeurs [aucun filtre]
Jeu de tir Battle Royale à la troisième personne Matchs gagnés N'importe quelle propriété de l'événement match_completed Nombre Match_result = TRUE
Nombre total d'éliminations Propriété "Eliminations" de l'événement "match_completed" Somme N/A
Temps de survie le plus élevé Propriété "survival_time" de l'événement "match_completed" Max N/A
Nombre total de tirs à la tête Propriété "headshots" de l'événement "match_completed" Somme N/A
Valeur totale des compétences Propriété skill_value de l'événement match_completed Somme N/A
Simulation de gestion d'e-sport Matchs gagnés Propriété "result" de l'événement "match_completed" Nombre Résultat = "Gagné"
Nombre total de buts marqués Propriété "Goals_scored" de l'événement "match_completed" Somme N/A
Matchs difficiles gagnés Propriété "result" de l'événement "hard_match_completed" Nombre Résultat = "Gagné"
Plus grande différence de buts Propriété "Goal_difference" de l'événement "match_completed" Max Résultat = "Gagné"
Nombre total d'exercices d'entraînement Propriété "drills_done" de l'événement "training_completed" Somme ND
Nombre total d'entraînements terminés N'importe quelle propriété de l'événement training_completed Nombre N/A

Détails de l'intégration

Les points de terminaison de l'API et le SDK sont disponibles pour recueillir des commentaires anticipés. Ils seront en disponibilité générale (DG) à partir d'août 2026. Voir chronologie

Cette section explique comment créer des événements et les envoyer dans les intégrations côté client et côté serveur.

Quand envoyer des données

Les événements de joueur représentent les actions dans le jeu liées à la fin des boucles de jeu ou à des moments spécifiques dans le jeu. Envoyez ces événements dès qu'ils se produisent. Par exemple, envoyez l'événement de fin de boucle de jeu dès que la boucle est terminée.

progressUpdate Événement représente le niveau de progression actuel d'un joueur. Les données de statistiques de progression doivent être envoyées à l'aide de cet événement dans les situations suivantes :

  1. Chaque fois que la progression actuelle est mise à jour, envoie immédiatement la dernière valeur.
  2. Chaque fois qu'un joueur lance le jeu, afin de s'assurer que cette statistique est toujours présente pour un joueur.

Moyens d'intégration

Il existe deux méthodes d'intégration : côté client et de serveur à serveur.

Intégration de serveur à serveur

Un point de terminaison d'API publique vous permet d'envoyer des événements dans le corps de la requête à l'aide des configurations suivantes :

Paramètres de chemin d'accès
Paramètre Type de données Description
playerId Chaîne ID PGS du joueur.

Autorisation et authentification

Les appels d'API de serveur à serveur suivent les consignes standards d'accès côté serveur aux services de jeux Play à l'aide d'OAuth 2.0. Les requêtes doivent inclure un jeton de support autorisé avec le champ d'application https://www.googleapis.com/auth/games.

Événements : corps de la requête

L'API de backend est soumise à des limites strictes de validation structurelle :

  • Taille du lot : 30 événements maximum par BatchRecordEventsRequest.
  • Nombre de propriétés : 25 propriétés personnalisées maximum par PlayerGameEvent.
  • Limites de longueur : nom de l'événement (100 caractères maximum), clés de propriété (100 caractères maximum) et valeurs de chaîne de propriété (1 024 caractères maximum).
  • ID de l'événement : doit être une chaîne UUID de 36 caractères valide.
  • Nouvelle tentative et mise en cache : évitez de mettre en cache ou d'accumuler un nombre excessif d'événements en local en cas d'échec de l'API, car les nouvelles tentatives par lot dépassant 30 événements seront refusées. Effectuez toujours des nouvelles tentatives par blocs pour respecter la limite de taille de lot.

BatchRecordEventsRequest

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

Événement progressUpdate : corps de la requête

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

Corps de la réponse

En cas de réussite, renvoie un état HTTP 200 OK avec un objet JSON vide.

Exemple de corps de la requête

Événement : 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
        }
      }
    }
  ]
}

Événement 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
      }
    }
  ]
}

Implémentations client

Pour en savoir plus sur l'implémentation client des statistiques de jeu pour votre plate-forme, consultez les ressources suivantes :

Étapes

Date Intégration de l'API Statistiques de jeu Configuration des statistiques de jeu
Septembre 2026 ND
  • Les joueurs commencent à voir les statistiques de jeu sur leur profil de joueur.
  • Testez la configuration des statistiques provisoires pour les comptes de test.