Die Google Health API erfasst Trainingseinheiten und den Trainingsverlauf von Nutzern mithilfe des Sitzungsdatentyps exercise. Eine Sitzung fungiert als Container, der Aktivitätsmetadaten, Ereignisse zum Anhalten und Fortsetzen, Runden oder Splits sowie zusammenfassende Messwerte bündelt.
Hier erfahren Sie, wie Sie Trainingseinheiten in Ihrer Anwendung lesen, schreiben und strukturieren, um Ihren Nutzern das bestmögliche Erlebnis zu bieten.
Unterstützte Datentypen
Die API unterstützt den folgenden Datentyp zum Erfassen von Trainingseinheiten und Aktivitätssitzungen:
DatentypdataType
filter Parameter |
Datensatztyp |
Verfügbare Vorgänge |
Umfang | Webhook Unterstützung |
Unterstützung für „Echte Nullen“ |
|---|---|---|---|---|---|
Trainingseinheit
exerciseexercise
|
Sitzung | list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Zugehörige Telemetriedatentypen
Bei Trainingseinheiten wird der Datentyp exercise als Container verwendet. Typische Trainings-Tracker schreiben und lesen jedoch während der Sitzung detaillierte Telemetriedaten mit hoher Frequenz. Diese Messungen (z. B. Herzfrequenz oder Schrittzahl) müssen mit den entsprechenden Datentypen gelesen oder geschrieben werden.
In der folgenden Tabelle werden die Felder im metricsSummary-Objekt des Datentyps exercise den entsprechenden Telemetriedatentypen der Google Health API zugeordnet:
Zusammenfassungsfeld (metricsSummary) |
Name des Telemetriedatentyps für den Tag | ID des Telemetriedatentyps der API |
|---|---|---|
caloriesKcal |
Verbrannte Kalorien bei Aktivität | active-energy-burned |
distanceMillimeters |
Entfernung | distance |
steps |
Schritte | steps |
averageHeartRateBeatsPerMinute |
Herzfrequenz | heart-rate |
activeZoneMinutes |
Aktivzonenminuten | active-zone-minutes |
In den folgenden Abschnitten finden Sie technische Details zum Datentyp exercise, einschließlich Beispielen für die REST-Darstellung, der Verarbeitung von GPS-Routen und Integrationsrichtlinien.
Trainingseinheiten
Schreiben Sie tägliche Aktivitäten oder Trainingseinheiten als exercise-Sitzungsdatenpunkte. Jeder Datenpunkt beschreibt die gesamte Sitzung, enthält Details zu Ereignisintervallen (z. B. Aktionen zum Anhalten und Fortsetzen) und liefert zusammenfassende Messwerte (z. B. Gesamtentfernung, Schritte und durchschnittliche Herzfrequenz).
Sitzungsattribute
Überprüfen Sie beim Strukturieren eines Trainingsdatenpunkts die folgenden Kernkomponenten:
- Sitzungszeit (
interval): Die Start- und Endzeit der gesamten Trainingseinheit sowie die Zeitzonen-Offsets, die zu diesen Zeitpunkten aktiv sind. - Aktivitätsart (
exerciseType): Die Kategorie der ausgeführten Aktivität (z. B.RUNNING,WALKING,BIKINGoderAEROBIC_WORKOUT). Geben Sie die genaue Art des körperlichen Trainings an. - Anzeigename (
displayName): Ein nutzerfreundlicher Name für die Trainingseinheit (z. B. „Nachmittagslauf“). - Aktive Dauer (
activeDuration): Die tatsächliche aktive Zeit des Trainings, ohne angehaltene Intervalle. Die Standardformatierung verwendet das FormatDuration(z. B."1800s").
Zusammenfassende Messwerte
Das verschachtelte Objekt metricsSummary enthält Gesamt- und Durchschnittswerte, die für die gesamte Dauer der Trainingseinheit berechnet wurden:
caloriesKcal: Insgesamt verbrannte Kalorien bei Aktivität während des Trainings, gemessen in Kilokalorien (kcal).distanceMillimeters: Zurückgelegte Gesamtentfernung, gemessen in Millimetern, um eine hohe Genauigkeit über alle Einheiten hinweg zu gewährleisten.steps: Insgesamt während des Trainings zurückgelegte Schritte.averageHeartRateBeatsPerMinute: Die durchschnittliche Herzfrequenz des Nutzers während der aktiven Minuten der Sitzung.activeZoneMinutes: Kumulative Aktivzonenminuten, die während des Trainings erreicht wurden.averageSpeedMillimetersPerSecond: Durchschnittliche Bewegungsgeschwindigkeit in Millimetern pro Sekunde.averagePaceSecondsPerMeter: Durchschnittliches Tempo während der aktiven Minuten der Sitzung, gemessen in Sekunden pro Meter.elevationGainMillimeters: Gesamter Höhenunterschied während der Sitzung.
Runden und Splits
Verwenden Sie für Trainingseinheiten mit Runden (z. B. Laufstrecken oder Schwimmen im Pool) splitSummaries.
Jeder Split enthält:
- Eine bestimmte
startTimeundendTime. - Eine
activeDuration, die die tatsächliche Rundenzeit darstellt. - Eine
metricsSummary, die nur auf dieses Segment beschränkt ist. - Einen
splitType, um die Split-Grenzen zu definieren (z. B.DISTANCE,DURATIONoderMANUAL).
Trainingsereignisse
Um die aktive Dauer genau zu berechnen, erfassen Sie Zustandsübergänge (z. B. manuelle oder automatische Pausenereignisse) mit exerciseEvents.
Jedes Ereignis enthält den Zeitstempel (eventTime) und den Typ:
START/STOP: Gibt die Zeitstempel für den Beginn und das Ende der Aufzeichnung an, die vom Nutzer explizit festgelegt wurden.PAUSE/RESUME: Gibt an, wann die Sitzung manuell angehalten oder fortgesetzt wurde.AUTO_PAUSE/AUTO_RESUME: Gibt sensorbasierte automatische Pausen/Fortsetzungen an.
Trainingseinheit schreiben
Wenn Sie eine Trainingseinheit erstellen, aktualisieren oder importieren möchten, schreiben Sie einen Datenpunkt in die Sammlung des Datentyps exercise. Verwenden Sie den Endpunkt create für Datenpunkte.
Beispiel für die REST-Darstellung
Das folgende Beispiel zeigt, wie Sie eine Trainingseinheit mit einer POST-Methode schreiben:
Anfrage
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
}
}
]
}
}Antwort
{
"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
}
}
]
}
}
}GPS-Routen und Standort-Tracking
Die API speichert grundlegende Sitzungszusammenfassungen direkt im exercise-Datenpunkt, verarbeitet aber den detaillierten Standortverlauf und die GPS-Routenkoordinaten als separaten Stream.
Wenn Sie die detaillierten Routendaten für eine Outdoor-Sitzung herunterladen möchten, rufen Sie die benutzerdefinierte Methode exportExerciseTcx auf. Dieser Endpunkt gibt die Route im Industriestandard Training Center XML (TCX) zurück.
GPS-Route exportieren
Anfrage
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media Authorization: Bearer access-token
Antwort
Eine HTTP-Nutzlast mit Content-Type: application/tcx+xml und
Headern, die den Browser anweisen, die Datei zu speichern.
<?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>Erforderliche Bereiche und Standort
Wenn Sie die Funktion GPS-Routen und Standort-Tracking verwenden möchten, muss Ihre App die folgenden OAuth-Bereiche anfordern:
- Lesen:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Schreiben:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Lesen:
https://www.googleapis.com/auth/googlehealth.location.readonly
Richtlinien
Beachten Sie bei der Integration des Trainings-Trackings in Ihre App die folgenden Richtlinien für Design und Implementierung.
Aktive vs. Gesamtdauer
Verwenden Sie zum Berechnen von Geschwindigkeits- oder Tempomesswerten immer activeDuration und nicht die Differenz zwischen startTime und endTime. So wird verhindert, dass angehaltene Intervalle Ihre Messwerte verzerren.
Wenn ein Nutzer beispielsweise um 8:00 Uhr mit dem Training beginnt und um 8:35 Uhr aufhört, beträgt die Gesamtdauer des Trainings 2.100 Sekunden. Wenn der Nutzer das
Training 5 Minuten (300 Sekunden) angehalten hat, legen Sie activeDuration auf "1800s" (2.100 –
300) fest. Die API verwendet die aktive Dauer, um Durchschnittswerte zu berechnen, indem die Gesamtentfernung durch 1.800 Sekunden anstelle von 2.100 Sekunden geteilt wird.
Standort frühzeitig anfordern
Wenn Ihre App Trainingsrouten auf einer Karte darstellt, fordern Sie zusätzlich zum Bereich für Aktivitäten und Fitness auch Standortberechtigungen und den Google Health-Bereich location an. Erklären Sie den Nutzern, warum Ihre App den Standortbereich benötigt, wenn sie GPS-Trainingseinheiten überprüft.
Wenn Ihre App den Standortbereich (https://www.googleapis.com/auth/googlehealth.location.readonly) anfordert, zeigt Google OAuth dem Nutzer eine Zustimmungsaufforderung an. Erklären Sie Ihren Nutzern, dass diese Berechtigung erforderlich ist, um Routen-Overlays zu rendern und GPS-Trackdateien (TCX) zu exportieren. Wenn ein Nutzer den Bereich für Aktivitäten gewährt, die Berechtigung zur Standortermittlung aber verweigert, gibt exportExerciseTcx einen Autorisierungsfehler zurück. Sie können jedoch weiterhin auf Sitzungsaggregate in metricsSummary zugreifen.
Echtzeitsynchronisierung mit Webhooks
Abonnieren Sie den Datentyp exercise, um Ihr Back-End mit Webhooks zu benachrichtigen, wenn neue Trainingsdaten verfügbar sind. So können Sie nach dem Training in Echtzeit Aktionen auslösen.
Wenn Ihr Server eine Webhook-Benachrichtigung erhält, enthält sie die healthUserId und das spezifische physische Zeitintervall des Trainings. Ihr
Server sollte die Benachrichtigung asynchron verarbeiten und dann den neuen
exercise Datenpunkt vom /users/me/dataTypes/exercise/dataPoints
Endpunkt anfordern. Weitere Informationen zum Einrichten von Abos finden Sie unter
Webhook-Abos.
Einheitliche Messwerte beibehalten
Um ein vollständiges Trainingserlebnis zu bieten, muss Ihre App Telemetriedatenpunkte mit hoher Frequenz zusammen mit der gesamten exercise-Sitzung synchronisieren.
So wird sichergestellt, dass die täglichen Gesamtwerte, historischen Trends und detaillierten Diagramme des Nutzers vollständig übereinstimmen.
Telemetrie und Sitzungen synchronisieren (Schreibpfad)
Wenn Sie eine abgeschlossene Trainingseinheit in die Google Health API importieren oder schreiben, implementieren Sie ein mehrstufiges Schreibmuster:
- Sitzung schreiben: Erstellen Sie das Zusammenfassungsereignis, indem Sie einen Datenpunkt an
POST /users/me/dataTypes/exercise/dataPointssenden. - Zeitreihenintervalle schreiben: Schreiben Sie gleichzeitig die detaillierten Daten
punkte, die während des Trainings protokolliert wurden (z. B. Schritte pro Minute oder
Intervalle für den Kalorienverbrauch), in die entsprechenden Sammlungen:
POST /users/me/dataTypes/steps/dataPointsPOST /users/me/dataTypes/active-energy-burned/dataPointsPOST /users/me/dataTypes/heart-rate/dataPoints
Detaillierte Daten für Diagramme abfragen (Lesepfad)
Wenn Sie Dashboards mit dem Trainingsverlauf oder Leistungsdiagramme für eine bestimmte Trainingseinheit rendern, fragen Sie die detaillierten Telemetriedaten mit dem Zeitfenster der Sitzung ab:
- Sitzungszusammenfassungen abfragen: Rufen Sie
/users/me/dataTypes/exercise/dataPointsauf, um die allgemeinen Trainings details und die endgültigemetricsSummaryabzurufen. - Diagrammmesswerte abrufen: Prüfen Sie
interval.startTimeundinterval.endTimedes Trainings. Führen Sie sekundäreGET-Aufrufe für die Telemetriesammlungen für dieses bestimmte Zeitfenster aus:GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
- GPS-Routen abrufen: Wenn die Metadaten der Sitzung angeben, dass GPS-Daten
vorhanden sind (
exerciseMetadata.hasGpsisttrue), rufen Sie dieexportExerciseTcxHilfsmethode auf, um Routenkoordinaten herunterzuladen.