L'API Google Health monitora le sessioni di allenamento e la cronologia degli esercizi degli utenti utilizzando il tipo di dati della sessione exercise. Una sessione funge da container che raggruppa i metadati dell'attività, gli eventi di pausa e ripresa, i giri o i tempi intermedi e le metriche di riepilogo.
Scopri come leggere, scrivere e strutturare gli allenamenti nella tua applicazione per offrire la migliore esperienza ai tuoi utenti.
Tipi di dati supportati
L'API supporta il seguente tipo di dati per il monitoraggio delle sessioni di allenamento e attività:
| Tipo di dati | Operazioni disponibili |
Ambito |
|---|---|---|
|
Allenamento
dataType:
exercisefilter parameter: exercise
Tipo di record: Sessione
Guida agli allenamenti con supporto webhook
Dispositivi compatibili
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Tipi di dati di telemetria correlati
Sebbene le sessioni di allenamento utilizzino il tipo di dati exercise come container, i tracker di allenamento tipici scrivono e leggono la telemetria dettagliata e ad alta frequenza durante la sessione. Queste misurazioni (come la frequenza cardiaca o il conteggio dei passi) devono essere lette o scritte utilizzando i rispettivi tipi di dati.
La tabella seguente mappa i campi all'interno dell'oggetto metricsSummary del tipo di dati exercise ai tipi di dati di telemetria non elaborati corrispondenti dell'API Google Health:
Campo di riepilogo (metricsSummary) |
Nome del tipo di dati di telemetria intraday | ID del tipo di dati di telemetria dell'API |
|---|---|---|
caloriesKcal |
Dispendio energetico durante l'attività fisica | active-energy-burned |
distanceMillimeters |
Distanza | distance |
steps |
Passaggi | steps |
averageHeartRateBeatsPerMinute |
Frequenza cardiaca | heart-rate |
activeZoneMinutes |
Minuti in zona attiva | active-zone-minutes |
Le sezioni seguenti forniscono dettagli tecnici sul tipo di dati exercise, inclusi esempi di rappresentazione REST, gestione dei percorsi GPS e linee guida per l'integrazione.
Sessioni di allenamento
Scrivi le attività quotidiane o gli allenamenti come punti dati della sessione exercise. Ogni punto dati descrive la sessione complessiva, i dettagli degli intervalli di eventi (come le azioni di pausa e ripresa) e fornisce metriche di riepilogo (come distanza complessiva, passi e frequenza cardiaca media).
Attributi sessione
Quando strutturi un punto dati di allenamento, verifica i seguenti componenti principali:
- Ora della sessione (
interval): l'ora di inizio e di fine della sessione di allenamento complessiva, insieme agli offset del fuso orario attivi in quei punti. - Tipo di attività (
exerciseType): la categoria di attività eseguita (ad esempioRUNNING,WALKING,BIKINGoAEROBIC_WORKOUT). Specifica il tipo esatto di allenamento fisico. - Nome visualizzato (
displayName): un nome descrittivo per la sessione di allenamento (ad esempio "Corsa su sentiero pomeridiana"). - Durata attiva (
activeDuration): il tempo attivo effettivo dell'allenamento, esclusi gli intervalli in pausa. La formattazione standard utilizza il formatoDuration(ad esempio,"1800s").
Metriche di riepilogo
L'oggetto nidificato metricsSummary contiene le metriche totali e medie calcolate per l'intera durata della sessione di allenamento:
caloriesKcal: totale delle calorie attive bruciate durante l'allenamento, misurato in chilocalorie (kcal).distanceMillimeters: distanza totale percorsa, misurata in millimetri per mantenere un'elevata precisione tra le unità.steps: totale dei passi effettuati durante l'allenamento.averageHeartRateBeatsPerMinute: frequenza cardiaca media dell'utente durante i minuti attivi della sessione.activeZoneMinutes: minuti cumulativi in zona attiva guadagnati durante l'allenamento.averageSpeedMillimetersPerSecond: velocità media di movimento in millimetri al secondo.averagePaceSecondsPerMeter: andatura media durante i minuti attivi della sessione, misurata in secondi al metro.elevationGainMillimeters: dislivello totale guadagnato durante la sessione.
Giri e tempi intermedi
Per gli allenamenti che prevedono giri (come le corse su pista o il nuoto in piscina), utilizza splitSummaries.
Ogni tempo intermedio contiene:
- Un
startTimee unendTimespecifici. - Un
activeDurationche rappresenta il tempo effettivo del giro. - Un
metricsSummarycon ambito limitato a quel segmento. - Un
splitTypeper definire i confini della suddivisione (ad esempioDISTANCE,DURATIONoMANUAL).
Eventi di allenamento
Per calcolare con precisione la durata attiva, monitora le transizioni di stato (come gli eventi di pausa manuale o automatica) utilizzando exerciseEvents.
Ogni evento contiene il timestamp (eventTime) e il tipo:
START/STOP: indica i timestamp di limite di quando l'utente ha avviato o interrotto esplicitamente la registrazione.PAUSE/RESUME: indica quando la sessione è stata messa in pausa o ripresa manualmente.AUTO_PAUSE/AUTO_RESUME: indica le pause/riprese automatiche basate sui sensori.
Scrivere una sessione di allenamento
Per creare, aggiornare o importare una sessione di allenamento, scrivi un punto dati nella raccolta di tipi di dati exercise. Utilizza l'endpoint create dataPoints.
Esempio di rappresentazione REST
L'esempio seguente mostra come scrivere una sessione di allenamento utilizzando un metodo POST:
Richiesta
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
}
}
]
}
}Risposta
{
"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
}
}
]
}
}
}Percorsi GPS e monitoraggio della posizione
L'API salva i riepiloghi di base delle sessioni direttamente all'interno del punto dati exercise, ma gestisce la cronologia dettagliata delle posizioni e le coordinate del percorso GPS come un flusso separato.
Per scaricare i dati dettagliati del percorso per una sessione all'aperto, chiama il metodo personalizzato exportExerciseTcx. Questo endpoint restituisce il percorso nel formato Training Center XML (TCX) standard del settore.
Esportare il percorso GPS
Richiesta
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media Authorization: Bearer access-token
Risposta
Un payload HTTP con Content-Type: application/tcx+xml e
intestazioni che indicano al browser di salvare il file.
<?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>Ambiti e posizione obbligatori
Per utilizzare la funzionalità Percorsi GPS e monitoraggio della posizione, la tua app deve richiedere i seguenti ambiti OAuth:
- Lettura:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Scrittura:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Lettura:
https://www.googleapis.com/auth/googlehealth.location.readonly
Linee guida
Quando integri il monitoraggio degli allenamenti nella tua app, segui queste linee guida per la progettazione e l'implementazione.
Durata attiva rispetto alla durata totale
Per calcolare le metriche di velocità o andatura, utilizza sempre activeDuration anziché la differenza tra startTime e endTime. In questo modo, gli intervalli in pausa non distorcono le metriche.
Ad esempio, se un utente inizia un allenamento alle 08:00 e lo termina alle 08:35, la durata totale trascorsa dell'allenamento è di 2100 secondi. Se l'utente ha messo in pausa l'
allenamento per 5 minuti (300 secondi), imposta activeDuration su "1800s" (2100 -
300). L'API utilizza la durata attiva per calcolare le medie, dividendo la distanza totale per 1800 secondi anziché 2100.
Calcolo di velocità e andatura
L'API Google Health utilizza formule standard per calcolare la velocità e l'andatura:
- Velocità =
distance / time(hour) - Andatura =
time(seconds) / distance
L'intestazione Accept-Language specificata nella richiesta determina l'unità di distanza.
Richiedere la posizione in anticipo
Se la tua app mappa i percorsi di allenamento, richiedi le autorizzazioni di accesso alla posizione e l'ambito location di Google Health, oltre all'ambito di attività e forma fisica. Spiega agli utenti perché la tua app richiede l'ambito di accesso alla posizione quando esamina gli allenamenti con GPS.
Quando la tua app richiede l'ambito di accesso alla posizione (https://www.googleapis.com/auth/googlehealth.location.readonly), Google OAuth mostra all'utente una richiesta di consenso. Spiega agli utenti che questa autorizzazione è necessaria per eseguire il rendering delle sovrapposizioni dei percorsi ed esportare i file di tracciamento GPS (TCX). Se un utente concede l'ambito di attività, ma nega l'autorizzazione di accesso alla posizione, exportExerciseTcx restituisce un errore di autorizzazione, anche se puoi comunque accedere agli aggregati delle sessioni in metricsSummary.
Sincronizzazione in tempo reale tramite webhook
Abbonati al tipo di dati exercise per ricevere una notifica al tuo backend tramite webhook quando diventano disponibili nuovi dati di allenamento. In questo modo puoi attivare le esperienze post-allenamento in tempo reale.
Quando il server riceve una notifica webhook, questa contiene healthUserId e l'intervallo di tempo fisico specifico dell'allenamento. Il
server deve elaborare la notifica in modo asincrono e quindi richiedere il nuovo
exercise punto dati dall'/users/me/dataTypes/exercise/dataPoints
endpoint. Per informazioni dettagliate su come configurare gli abbonamenti, consulta
Abbonamenti webhook.
Mantenere la coerenza delle metriche
Per offrire un'esperienza di allenamento completa, la tua app deve sincronizzare i punti dati di telemetria ad alta frequenza insieme alla sessione exercise complessiva.
In questo modo, i totali giornalieri, le tendenze storiche e i grafici dettagliati dell'utente rimangono completamente allineati.
Sincronizzare la telemetria e le sessioni (percorso di scrittura)
Quando importi o scrivi un allenamento completato nell'API Google Health, implementa un pattern di scrittura in più passaggi:
- Scrivi la session a: registra l'evento di riepilogo pubblicando un punto dati in
POST /users/me/dataTypes/exercise/dataPoints. - Scrivi gli intervalli delle serie temporali: scrivi contemporaneamente i punti dati granulari
registrati durante l'allenamento (ad esempio, i passi al minuto o gli
intervalli di dispendio calorico) nelle rispettive raccolte:
POST /users/me/dataTypes/steps/dataPointsPOST /users/me/dataTypes/active-energy-burned/dataPointsPOST /users/me/dataTypes/heart-rate/dataPoints
Eseguire query sui dati dettagliati per i grafici (percorso di lettura)
Quando esegui il rendering delle dashboard degli allenamenti storici o dei grafici del rendimento per una sessione di allenamento specifica, esegui una query sulla telemetria granulare utilizzando la finestra temporale della sessione:
- Esegui una query sui riepiloghi delle sessioni: chiama
/users/me/dataTypes/exercise/dataPointsper recuperare i dettagli complessivi dell'allenamento e ilmetricsSummaryfinale. - Recupera le metriche del grafico: esamina
interval.startTimeeinterval.endTimedell'allenamento. Esegui chiamateGETsecondarie alle raccolte di telemetria per quella finestra temporale specifica:GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
- Recupera i percorsi GPS: se i metadati della sessione indicano che sono presenti dati GPS (
exerciseMetadata.hasGpsètrue), richiama il metodo helperexportExerciseTcxper scaricare le coordinate del percorso.