Die Google Health API erfasst Trainingseinheiten und den Trainingsverlauf von Nutzern mit dem Sitzungsdatentyp 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 |
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 Messwerte (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 |
Durch Aktivität verbrauchte Kalorien | 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 Richtlinien zur Integration.
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. „Trailrun am Nachmittag“). - Aktive Dauer (
activeDuration): Die tatsächliche aktive Zeit des Trainings, ohne Pausenintervalle. Bei der Standardformatierung wird das FormatDurationverwendet (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: Die insgesamt während des Trainings verbrauchten aktiven Kalorien in Kilokalorien (kcal).distanceMillimeters: Die zurückgelegte Gesamtentfernung in Millimetern, um eine hohe Genauigkeit über alle Einheiten hinweg zu gewährleisten.steps: Die insgesamt während des Trainings zurückgelegten Schritte.averageHeartRateBeatsPerMinute: Die durchschnittliche Herzfrequenz des Nutzers während der aktiven Minuten der Sitzung.activeZoneMinutes: Die kumulative Anzahl der Aktivzonenminuten, die während des Trainings erreicht wurden.averageSpeedMillimetersPerSecond: Die durchschnittliche Bewegungsgeschwindigkeit in Millimetern pro Sekunde.averagePaceSecondsPerMeter: Das durchschnittliche Tempo während der aktiven Minuten der Sitzung in Sekunden pro Meter.elevationGainMillimeters: Der gesamte Höhenunterschied während der Sitzung.
Runden und Splits
Verwenden Sie für Trainingseinheiten mit Runden (z. B. Läufe auf der Laufbahn oder Schwimmen im Pool) splitSummaries.
Jeder Split enthält Folgendes:
- Eine bestimmte
startTimeundendTime. - Eine
activeDuration, die die tatsächliche Rundenzeit darstellt. - Eine
metricsSummary, die nur auf dieses Segment beschränkt ist. - Ein
splitTypezum Definieren der Split-Grenzen (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 an, wenn der Nutzer die Aufzeichnung explizit gestartet oder beendet hat.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 der Methode POST 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 Datenpunkt exercise, 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 Daten für GPS-Routen und Standort-Tracking lesen oder schreiben möchten, fordern Sie die folgenden OAuth-Bereiche im Zugriffstoken Ihrer Anwendung an:
- Lesezugriff:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Schreibzugriff:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Lesezugriff:
https://www.googleapis.com/auth/googlehealth.location.readonly
Wenn in den Autorisierungsheadern ein erforderlicher Bereich fehlt, gibt die Google Health API einen Autorisierungsfehler zurück.
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 Tempowerten immer activeDuration und nicht die Differenz zwischen startTime und endTime. So wird verhindert, dass Pausenintervalle 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) lang 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 Tagesgesamtwerte, historischen Trends und detaillierten Diagramme des Nutzers vollständig übereinstimmen.
Telemetrie und Sitzungen synchronisieren (Schreibpfad)
Wenn Sie ein abgeschlossenes Training in die Google Health API importieren oder schreiben, implementieren Sie ein mehrstufiges Schreibmuster:
- Sitzung schreiben: Erfassen 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.