L'API Google Health suit les séances d'entraînement et l'historique des exercices des utilisateurs à l'aide du type de données de session exercise. Une session fait office de conteneur qui regroupe les métadonnées d'activité, les événements de pause et de reprise, les tours ou les intervalles, ainsi que les métriques récapitulatives.
Découvrez comment lire, écrire et structurer les entraînements dans votre application pour offrir la meilleure expérience possible à vos utilisateurs.
Types de données acceptés
L'API est compatible avec le type de données suivant pour le suivi des entraînements et des sessions d'activité :
Type de donnéesdataType
filter paramètre |
Type d'enregistrement |
Opérations disponibles |
Champ d'application | Compatibilité avec les webhooks |
Compatibilité avec les vrais zéros |
|---|---|---|---|---|---|
Exercice
exerciseexercise
|
Session | list, get, reconcile, create, update, batchDelete | activity_and_fitness |
Types de données de télémétrie associés
Bien que les sessions d'entraînement utilisent le type de données exercise comme conteneur, les trackers d'entraînement classiques écrivent et lisent des données de télémétrie détaillées à haute fréquence pendant la session. Ces mesures (telles que la fréquence cardiaque ou le nombre de pas) doivent être lues ou écrites à l'aide de leurs propres types de données.
Le tableau suivant mappe les champs de l'objet metricsSummary du type de données exercise aux types de données de télémétrie brutes correspondants de l'API Google Health :
Champ récapitulatif (metricsSummary) |
Nom du type de données de télémétrie intrajournalière | ID du type de données de télémétrie de l'API |
|---|---|---|
caloriesKcal |
Énergie active brûlée | active-energy-burned |
distanceMillimeters |
Distance | distance |
steps |
Étapes | steps |
averageHeartRateBeatsPerMinute |
Fréquence cardiaque | heart-rate |
activeZoneMinutes |
Minutes en zone active | active-zone-minutes |
Les sections suivantes fournissent des détails techniques sur le type de données exercise, y compris des exemples de représentation REST, la gestion des itinéraires GPS et des consignes d'intégration.
Sessions d'entraînement
Écrivez les activités quotidiennes ou les entraînements en tant que points de données de session exercise. Chaque point de données décrit la session globale, détaille les intervalles d'événements (tels que les actions de pause et de reprise) et fournit des métriques récapitulatives (comme la distance totale, les étapes et la fréquence cardiaque moyenne).
Attributs de session
Lorsque vous structurez un point de données d'exercice, vérifiez les composants principaux suivants :
- Heure de la session (
interval) : heure de début et de fin de la session d'entraînement globale, ainsi que les décalages de fuseau horaire actifs à ces moments-là. - Type d'activité (
exerciseType) : catégorie d'activité effectuée (par exemple,RUNNING,WALKING,BIKINGouAEROBIC_WORKOUT). Spécifiez le type exact d'entraînement physique. - Nom à afficher (
displayName) : nom convivial de la session d'entraînement (par exemple, "Course à pied en sentier l'après-midi"). - Durée active (
activeDuration) : durée active réelle de l'entraînement, à l'exclusion des intervalles de pause. Le format standard utilise le formatDuration(par exemple,"1800s").
Métriques récapitulatives
L'objet imbriqué metricsSummary contient les métriques totales et moyennes calculées sur toute la durée de la session d'exercice :
caloriesKcal: total des calories actives brûlées pendant l'entraînement, mesuré en kilocalories (kcal).distanceMillimeters: distance totale parcourue, mesurée en millimètres pour maintenir une haute précision entre les unités.steps: nombre total de pas effectués pendant l'exercice.averageHeartRateBeatsPerMinute: fréquence cardiaque moyenne de l'utilisateur pendant les minutes actives de la session.activeZoneMinutes: nombre cumulé de minutes en zone active gagnées pendant l'entraînement.averageSpeedMillimetersPerSecond: vitesse de déplacement moyenne en millimètres par seconde.averagePaceSecondsPerMeter: allure moyenne pendant les minutes actives de la session, mesurée en secondes par mètre.elevationGainMillimeters: dénivelé positif total pendant la session.
Tours et intervalles
Pour les entraînements qui impliquent des tours (comme les courses sur piste ou la natation en piscine), utilisez splitSummaries.
Chaque intervalle contient les éléments suivants :
- Un
startTimeet unendTimespécifiques. - Une
activeDurationreprésentant le temps réel du tour. - Un
metricsSummarylimité à ce segment. - Un
splitTypepour définir les limites de division (par exemple,DISTANCE,DURATIONouMANUAL).
Événements d'exercice
Pour calculer avec précision la durée active, suivez les transitions d'état (comme les événements de pause manuelle ou automatique) à l'aide de exerciseEvents.
Chaque événement contient l'horodatage (eventTime) et le type :
START/STOP: indique les horodatages limites du moment où l'utilisateur a explicitement démarré ou arrêté l'enregistrement.PAUSE/RESUME: indique quand la session a été mise en pause ou reprise manuellement.AUTO_PAUSE/AUTO_RESUME: indique les pauses/reprises automatiques déclenchées par le capteur.
Écrire une session d'entraînement
Pour créer, mettre à jour ou importer une session d'entraînement, écrivez un point de données dans la collection de types de données exercise. Utilisez le point de terminaison des points de données create.
Exemple de représentation REST
L'exemple suivant montre comment écrire une session d'entraînement à l'aide d'une méthode POST :
Requête
POST https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED"
},
"exercise": {
"interval": {
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:35:00Z",
"endUtcOffset": "0s"
},
"exerciseType": "RUNNING",
"displayName": "Morning Trail Run",
"activeDuration": "1800s",
"metricsSummary": {
"caloriesKcal": 380.0,
"distanceMillimeters": 5000000.0,
"steps": "6200",
"averageSpeedMillimetersPerSecond": 2777.78,
"averagePaceSecondsPerMeter": 360.0,
"averageHeartRateBeatsPerMinute": "148",
"activeZoneMinutes": "30"
},
"exerciseMetadata": {
"hasGps": true
},
"exerciseEvents": [
{
"eventTime": "2026-04-20T08:15:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "PAUSE"
},
{
"eventTime": "2026-04-20T08:20:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "RESUME"
}
],
"splitSummaries": [
{
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:15:00Z",
"endUtcOffset": "0s",
"splitType": "DISTANCE",
"metricsSummary": {
"distanceMillimeters": 2500000.0,
"caloriesKcal": 190.0
}
}
]
}
}Réponse
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4main.DataPoint",
"name": "users/me/dataTypes/exercise/dataPoints/morning-trail-run-123456",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"application": {
"packageName": "com.example.workoutapp"
},
"platform": "GOOGLE_WEB_API"
},
"exercise": {
"interval": {
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:35:00Z",
"endUtcOffset": "0s"
},
"exerciseType": "RUNNING",
"displayName": "Morning Trail Run",
"activeDuration": "1800s",
"metricsSummary": {
"caloriesKcal": 380.0,
"distanceMillimeters": 5000000.0,
"steps": "6200",
"averageSpeedMillimetersPerSecond": 2777.78,
"averagePaceSecondsPerMeter": 360.0,
"averageHeartRateBeatsPerMinute": "148",
"activeZoneMinutes": "30"
},
"exerciseMetadata": {
"hasGps": true
},
"exerciseEvents": [
{
"eventTime": "2026-04-20T08:15:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "PAUSE"
},
{
"eventTime": "2026-04-20T08:20:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "RESUME"
}
],
"splitSummaries": [
{
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:15:00Z",
"endUtcOffset": "0s",
"activeDuration": "900s",
"splitType": "DISTANCE",
"metricsSummary": {
"distanceMillimeters": 2500000.0,
"caloriesKcal": 190.0
}
}
]
}
}
}Itinéraires GPS et suivi de la position
L'API enregistre les résumés de session de base directement dans le point de données exercise, mais gère l'historique détaillé des positions et les coordonnées de l'itinéraire GPS en tant que flux distinct.
Pour télécharger les données d'itinéraire détaillées d'une session en extérieur, appelez la méthode personnalisée exportExerciseTcx. Ce point de terminaison renvoie l'itinéraire au format Training Center XML (TCX) standard du secteur.
Exporter un itinéraire GPS
Requête
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media Authorization: Bearer access-token
Réponse
Une charge utile HTTP avec Content-Type: application/tcx+xml et
en-têtes indiquant au navigateur d'enregistrer le fichier.
<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2">
<Activities>
<Activity Sport="Running">
<Id>2026-04-20T08:00:00Z</Id>
<Lap StartTime="2026-04-20T08:00:00Z">
<TotalTimeSeconds>1800</TotalTimeSeconds>
<DistanceMeters>5000</DistanceMeters>
<Calories>380</Calories>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2026-04-20T08:00:00Z</Time>
<Position>
<LatitudeDegrees>37.7749</LatitudeDegrees>
<LongitudeDegrees>-122.4194</LongitudeDegrees>
</Position>
<AltitudeMeters>15.0</AltitudeMeters>
<DistanceMeters>0.0</DistanceMeters>
</Trackpoint>
</Track>
</Lap>
</Activity>
</Activities>
</TrainingCenterDatabase>Champs d'application et position requis
Pour lire ou écrire des données pour les itinéraires GPS et le suivi de la position, demandez les champs d'application OAuth suivants dans le jeton d'accès de votre application :
- Accès en lecture :
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Accès en écriture :
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Accès en lecture :
https://www.googleapis.com/auth/googlehealth.location.readonly
Si un champ d'application requis est manquant dans les en-têtes d'autorisation, l'API Google Health renvoie une erreur d'autorisation.
Consignes
Lorsque vous intégrez le suivi des entraînements dans votre application, suivez ces consignes de conception et d'implémentation.
Durée active par rapport à la durée totale
Pour calculer les métriques de vitesse ou d'allure, utilisez toujours activeDuration plutôt que la différence entre startTime et endTime. Cela empêche les intervalles de pause de fausser vos métriques.
Par exemple, si un utilisateur commence un entraînement à 8h00 et le termine à 8h35, la durée totale écoulée est de 2 100 secondes. Si l'utilisateur a mis l'entraînement en pause pendant 5 minutes (300 secondes), définissez activeDuration sur "1800s" (2 100 -
300). L'API utilise la durée active pour calculer les moyennes, en divisant la distance totale par 1 800 secondes au lieu de 2 100.
Demander la position tôt
Si votre application mappe les itinéraires d'entraînement, demandez les autorisations de localisation et le champ d'application Google Health location en plus du champ d'application d'activité et de remise en forme. Expliquez aux utilisateurs pourquoi votre application nécessite le champ d'application de localisation lors de l'examen des exercices GPS.
Lorsque votre application demande le champ d'application de localisation (https://www.googleapis.com/auth/googlehealth.location.readonly), Google OAuth affiche une invite de consentement à l'utilisateur. Expliquez à vos utilisateurs que cette autorisation est nécessaire pour afficher les superpositions d'itinéraire et exporter les fichiers de suivi GPS (TCX). Si un utilisateur accorde le champ d'application d'activité, mais refuse l'autorisation d'accéder à la position, exportExerciseTcx renvoie une erreur d'autorisation, mais vous pouvez toujours accéder aux agrégats de session dans metricsSummary.
Synchronisation en temps réel à l'aide de webhooks
Abonnez-vous au type de données exercise pour informer votre backend à l'aide de webhooks lorsque de nouvelles données d'entraînement sont disponibles. Vous pouvez ainsi déclencher des expériences post-entraînement en temps réel.
Lorsque votre serveur reçoit une notification de webhook, il contient le healthUserId et l'intervalle de temps physique spécifique de l'entraînement. Votre
serveur doit traiter la notification de manière asynchrone, puis demander le nouveau
exercise point de données à partir du /users/me/dataTypes/exercise/dataPoints
point de terminaison. Pour en savoir plus sur la configuration des abonnements, consultez
Abonnements aux webhooks.
Maintenir des métriques cohérentes
Pour offrir une expérience sportive complète, votre application doit synchroniser les points de données de télémétrie à haute fréquence avec la session exercise globale.
Cela garantit que les totaux quotidiens, les tendances historiques et les graphiques détaillés de l'utilisateur restent parfaitement alignés.
Synchroniser la télémétrie et les sessions (chemin d'écriture)
Lorsque vous importez ou écrivez un entraînement terminé dans l'API Google Health, implémentez un modèle d'écriture en plusieurs étapes :
- Écrivez la session : enregistrez l'événement récapitulatif en publiant un point de données sur
POST /users/me/dataTypes/exercise/dataPoints. - Écrivez des intervalles de séries temporelles : écrivez simultanément les points de données granulaires
enregistrés pendant l’entraînement (par exemple, les pas par minute ou les
intervalles de calories brûlées) dans leurs collections respectives :
POST /users/me/dataTypes/steps/dataPointsPOST /users/me/dataTypes/active-energy-burned/dataPointsPOST /users/me/dataTypes/heart-rate/dataPoints
Interroger des données détaillées pour les graphiques (chemin de lecture)
Lorsque vous affichez des tableaux de bord d'entraînement historiques ou des graphiques de performances pour une session d'entraînement spécifique, interrogez la télémétrie granulaire à l'aide de la fenêtre temporelle de la session :
- Interrogez les résumés de session : appelez
/users/me/dataTypes/exercise/dataPointspour récupérer les détails généraux de l'entraînement et lemetricsSummaryfinal. - Récupérez les métriques du graphique : inspectez
interval.startTimeetinterval.endTimede l'entraînement. Effectuez des appelsGETsecondaires aux collections de télémétrie pour cette fenêtre temporelle spécifique :GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
- Récupérez les itinéraires GPS : si les métadonnées de la session indiquent que des données GPS sont
présentes (
exerciseMetadata.hasGpsesttrue), appelez la méthode d'assistanceexportExerciseTcxpour télécharger les coordonnées de l'itinéraire.