Google Health API melacak sesi latihan fisik dan histori olahraga pengguna menggunakan jenis data sesi exercise. Sesi berfungsi sebagai penampung yang menggabungkan metadata aktivitas, peristiwa jeda dan lanjutkan, putaran atau pemisahan, serta metrik ringkasan.
Pahami cara membaca, menulis, dan menyusun olahraga di aplikasi Anda untuk memberikan pengalaman terbaik bagi pengguna.
Jenis data yang didukung
API ini mendukung jenis data berikut untuk melacak sesi olahraga dan aktivitas:
Jenis datadataType
filter parameter |
Jenis rekaman |
Operasi yang tersedia |
Cakupan | Dukungan Webhook |
Dukungan nol sebenarnya |
|---|---|---|---|---|---|
Olahraga
exerciseexercise
|
Sesi | list, get, reconcile, create, update, batchDelete | activity_and_fitness |
Jenis data telemetri terkait
Meskipun sesi latihan fisik menggunakan jenis data exercise sebagai penampung, pelacak latihan fisik umum menulis dan membaca telemetri mendetail dan berfrekuensi tinggi selama sesi. Pengukuran ini (seperti detak jantung atau jumlah langkah) harus dibaca atau ditulis menggunakan jenis data masing-masing.
Tabel berikut memetakan kolom di dalam objek metricsSummary dari jenis data exercise ke jenis data telemetri mentah yang sesuai dari Google Health API:
Kolom ringkasan (metricsSummary) |
Nama jenis data telemetri intraday | ID jenis data telemetri API |
|---|---|---|
caloriesKcal |
Energi Aktif yang Dibakar | active-energy-burned |
distanceMillimeters |
Jarak | distance |
steps |
Langkah | steps |
averageHeartRateBeatsPerMinute |
Detak Jantung | heart-rate |
activeZoneMinutes |
Menit Zona Aktif | active-zone-minutes |
Bagian berikut memberikan detail teknis untuk jenis data exercise, termasuk contoh representasi REST, penanganan rute GPS, dan panduan integrasi.
Sesi latihan fisik
Tulis aktivitas atau olahraga harian sebagai titik data sesi exercise. Setiap titik data menjelaskan sesi keseluruhan, detail interval peristiwa (seperti tindakan jeda dan lanjutkan), serta menyediakan metrik ringkasan (seperti jarak keseluruhan, langkah, dan detak jantung rata-rata).
Atribut sesi
Saat menyusun titik data olahraga, verifikasi komponen inti berikut:
- Waktu Sesi (
interval): Waktu mulai dan waktu berakhir sesi latihan fisik keseluruhan, beserta offset zona waktu yang aktif pada titik tersebut. - Jenis Aktivitas (
exerciseType): Kategori aktivitas yang dilakukan (sepertiRUNNING,WALKING,BIKING, atauAEROBIC_WORKOUT). Tentukan jenis latihan fisik yang tepat. - Nama Tampilan (
displayName): Nama yang mudah digunakan untuk sesi olahraga (misalnya, "Lari Trail Sore"). - Durasi Aktif (
activeDuration): Waktu aktif sebenarnya dari olahraga, tidak termasuk interval yang dijeda. Pemformatan standar menggunakan formatDuration(misalnya,"1800s").
Metrik ringkasan
Objek bertingkat metricsSummary berisi metrik total dan rata-rata yang dihitung selama durasi sesi olahraga:
caloriesKcal: Total kalori aktif yang dibakar selama olahraga, diukur dalam kilokalori (kcal).distanceMillimeters: Total jarak yang ditempuh, diukur dalam milimeter untuk mempertahankan presisi tinggi di seluruh unit.steps: Total langkah yang diambil selama olahraga.averageHeartRateBeatsPerMinute: Detak jantung rata-rata pengguna selama menit aktif sesi.activeZoneMinutes: Menit zona aktif kumulatif yang diperoleh selama olahraga.averageSpeedMillimetersPerSecond: Kecepatan gerakan rata-rata dalam milimeter per detik.averagePaceSecondsPerMeter: Pace rata-rata selama menit aktif sesi, diukur dalam detik per meter.elevationGainMillimeters: Total elevasi naik selama sesi.
Putaran dan pemisahan
Untuk olahraga yang melibatkan putaran (seperti lari di lintasan atau berenang di kolam), gunakan splitSummaries.
Setiap pemisahan berisi:
startTimedanendTimetertentu.activeDurationyang mewakili waktu putaran sebenarnya.metricsSummaryyang hanya dicakup ke segmen tersebut.splitTypeuntuk menentukan batas pemisahan (sepertiDISTANCE,DURATION, atauMANUAL).
Peristiwa olahraga
Untuk menghitung durasi aktif secara akurat, lacak transisi status (seperti peristiwa jeda manual atau otomatis) menggunakan exerciseEvents.
Setiap peristiwa berisi stempel waktu (eventTime) dan jenis:
START/STOP: Menunjukkan stempel waktu batas saat pengguna secara eksplisit memulai atau menghentikan rekaman.PAUSE/RESUME: Menunjukkan kapan sesi dijeda atau dilanjutkan secara manual.AUTO_PAUSE/AUTO_RESUME: Menunjukkan jeda/lanjut otomatis yang didorong sensor.
Tulis sesi latihan fisik
Untuk membuat, memperbarui, atau mengimpor sesi latihan fisik, tulis titik data ke koleksi jenis data exercise. Gunakan endpoint titik data create.
Contoh representasi REST
Contoh berikut menunjukkan cara menulis sesi olahraga menggunakan metode POST:
Permintaan
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
}
}
]
}
}Respons
{
"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
}
}
]
}
}
}Rute GPS dan pelacakan lokasi
API menyimpan ringkasan sesi dasar langsung dalam titik data exercise, tetapi menangani histori lokasi mendetail dan koordinat rute GPS sebagai aliran terpisah.
Untuk mendownload data rute mendetail untuk sesi di luar ruangan, panggil metode kustom exportExerciseTcx. Endpoint ini menampilkan rute dalam format Training Center XML (TCX) standar industri.
Mengekspor rute GPS
Permintaan
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media Authorization: Bearer access-token
Respons
Payload HTTP dengan Content-Type: application/tcx+xml dan
header yang menginstruksikan browser untuk menyimpan 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>Cakupan dan lokasi yang diperlukan
Untuk membaca atau menulis data untuk rute GPS dan pelacakan lokasi, minta cakupan OAuth berikut dalam token akses aplikasi Anda:
- Akses baca:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Akses tulis:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Akses baca:
https://www.googleapis.com/auth/googlehealth.location.readonly
Jika cakupan yang diperlukan tidak ada di header otorisasi, Google Health API akan menampilkan error otorisasi.
Panduan
Saat mengintegrasikan pelacakan latihan fisik ke dalam aplikasi, ikuti panduan desain dan implementasi ini.
Durasi aktif versus total
Untuk menghitung metrik kecepatan atau pace, selalu gunakan activeDuration, bukan selisih antara startTime dan endTime. Hal ini mencegah interval yang dijeda memiringkan metrik Anda.
Misalnya, jika pengguna memulai latihan fisik pada pukul 08.00 dan selesai pada pukul 08.35, latihan fisik tersebut memiliki total durasi yang berlalu selama 2.100 detik. Jika pengguna menjeda
olahraga selama 5 menit (300 detik), tetapkan activeDuration ke "1800s" (2.100 -
300). API menggunakan durasi aktif untuk menghitung rata-rata, membagi total jarak dengan 1.800 detik, bukan 2.100.
Meminta lokasi lebih awal
Jika aplikasi Anda memetakan rute latihan fisik, minta izin akses lokasi dan cakupan location Google Health selain cakupan aktivitas dan kebugaran. Jelaskan kepada pengguna alasan aplikasi Anda memerlukan cakupan lokasi saat meninjau olahraga GPS.
Saat aplikasi Anda meminta cakupan lokasi (https://www.googleapis.com/auth/googlehealth.location.readonly), Google OAuth akan menampilkan perintah izin kepada pengguna. Jelaskan kepada pengguna bahwa izin ini diperlukan untuk merender overlay rute dan mengekspor file trek GPS (TCX). Jika pengguna memberikan cakupan aktivitas, tetapi menolak izin akses lokasi, exportExerciseTcx akan menampilkan error otorisasi, meskipun Anda masih dapat mengakses agregat sesi di metricsSummary.
Sinkronisasi real-time menggunakan webhook
Berlangganan jenis data exercise untuk memberi tahu backend Anda menggunakan webhook saat data olahraga baru tersedia. Hal ini memungkinkan Anda memicu pengalaman pasca-olahraga secara real-time.
Saat server Anda menerima notifikasi webhook, notifikasi tersebut berisi healthUserId dan interval waktu fisik tertentu dari olahraga. Server
Anda harus memproses notifikasi secara asinkron, lalu meminta titik data
exercise baru dari /users/me/dataTypes/exercise/dataPoints
endpoint. Untuk mengetahui detail tentang cara menyiapkan langganan, lihat
Langganan webhook.
Mempertahankan metrik yang konsisten
Untuk memberikan pengalaman olahraga yang lengkap, aplikasi Anda harus menyinkronkan titik data telemetri berfrekuensi tinggi bersama dengan sesi exercise keseluruhan.
Hal ini memastikan total harian pengguna, tren historis, dan diagram detail tetap sepenuhnya selaras.
Menyinkronkan telemetri dan sesi (jalur tulis)
Saat mengimpor atau menulis latihan fisik yang telah selesai ke Google Health API, terapkan pola tulis multi-langkah:
- Menulis sesi: Ajukan peristiwa ringkasan dengan memposting titik data ke
POST /users/me/dataTypes/exercise/dataPoints. - Menulis interval deret waktu: Tulis titik data terperinci yang dicatat selama latihan fisik secara serentak (misalnya, langkah per menit atau interval pembakaran kalori) ke koleksi masing-masing:
POST /users/me/dataTypes/steps/dataPointsPOST /users/me/dataTypes/active-energy-burned/dataPointsPOST /users/me/dataTypes/heart-rate/dataPoints
Mengkueri data mendetail untuk diagram (jalur baca)
Saat merender dasbor olahraga historis atau grafik performa untuk sesi olahraga tertentu, kueri telemetri terperinci menggunakan jendela waktu sesi:
- Mengkueri ringkasan sesi: Panggil
/users/me/dataTypes/exercise/dataPointsuntuk mengambil detail latihan fisik keseluruhan danmetricsSummaryakhir. - Mengambil metrik diagram: Periksa
interval.startTimedaninterval.endTimeolahraga. Lakukan panggilanGETsekunder ke koleksi telemetri untuk jendela waktu tertentu tersebut:GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
- Mengambil rute GPS: Jika metadata sesi menunjukkan bahwa data GPS
ada (
exerciseMetadata.hasGpsadalahtrue), panggil metode helperexportExerciseTcxuntuk mendownload koordinat rute.