Google Health API, exercise oturum veri türünü kullanarak kullanıcıların antrenman seanslarını ve egzersiz geçmişini takip eder. Oturum; etkinlik meta verilerini, duraklatma ve devam ettirme etkinliklerini, turları veya bölümleri ve özet metrikleri bir araya getiren bir kapsayıcı görevi görür.
Kullanıcılarınıza en iyi deneyimi sunmak için uygulamanızda antrenmanları nasıl okuyacağınızı, yazacağınızı ve yapılandıracağınızı öğrenin.
Desteklenen veri türleri
API, antrenmanları ve aktivite seanslarını izlemek için aşağıdaki veri türünü destekler:
| Veri türü | Kullanılabilir işlemler |
Kapsam |
|---|---|---|
|
Egzersiz
dataType:
exercisefilter parameter: exercise
Kayıt türü: Oturum
Uyumlu cihazlar
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
İlgili telemetri veri türleri
Antrenman oturumları, kapsayıcı olarak exercise veri türünü kullanırken giyilebilir cihazlar da oturum sırasında ayrıntılı ve yüksek frekanslı telemetri verileri kaydeder. Google Health API'de bu ayrıntılı gün içi telemetri veri türleri salt okunurdur ve doğrudan kendi REST uç noktaları üzerinden oluşturulamaz veya değiştirilemez.
REST API aracılığıyla bir antrenman seansı yazarken exercise veri noktasının metricsSummary nesnesinde toplu antrenman metriklerini iletin.
Aşağıdaki tabloda, exercise.metricsSummary içindeki özet alanları, ilgili antrenmanın zaman aralığı için sorgulayabileceğiniz salt okunur gün içi telemetri veri türleriyle eşlenmiştir:
Özet alanı (metricsSummary) |
Gün içi telemetri verisi türü adı | API telemetri verisi türü kimliği (salt okunur) | Filtre alanı (?filter=) |
Gerekli okuma OAuth kapsamı |
|---|---|---|---|---|
caloriesKcal |
Yakılan Aktif Enerji | active-energy-burned |
active_energy_burned.interval.start_time |
activity_and_fitness.readonly |
distanceMillimeters |
Mesafe | distance |
distance.interval.start_time |
activity_and_fitness.readonly |
steps |
Adımlar | steps |
steps.interval.start_time |
activity_and_fitness.readonly |
averageHeartRateBeatsPerMinute |
Nabız | heart-rate |
heart_rate.sample_time.physical_time |
health_metrics_and_measurements.readonly |
activeZoneMinutes |
Aktif Bölge Dakikası | active-zone-minutes |
active_zone_minutes.interval.start_time |
activity_and_fitness.readonly |
Aşağıdaki bölümlerde, REST temsili örnekleri, GPS rotası işleme ve entegrasyon yönergeleri dahil olmak üzere exercise veri türüyle ilgili teknik ayrıntılar verilmiştir.
Antrenman seansları
Günlük aktiviteleri veya antrenmanları exercise oturum veri noktaları olarak yazın. Her veri noktası, genel oturumu açıklar, etkinlik aralıklarını (duraklatma ve devam ettirme işlemleri gibi) ayrıntılı olarak belirtir ve özet metrikler (toplam mesafe, adım sayısı ve ortalama nabız gibi) sağlar.
Oturum özellikleri
Egzersiz veri noktalarını yapılandırırken aşağıdaki temel bileşenleri doğrulayın:
- Oturum Süresi (
interval): Antrenman oturumunun başlangıç ve bitiş zamanı ile bu zamanlarda geçerli olan saat dilimi farkları. - Etkinlik Türü (
exerciseType): Gerçekleştirilen etkinliğin kategorisi (ör.RUNNING,WALKING,BIKINGveyaAEROBIC_WORKOUT). Fiziksel antrenmanın tam türünü belirtin. - Görünen Ad (
displayName): Antrenman oturumu için kullanıcı dostu bir ad. REST API aracılığıyla oluşturulduğunda sunucu,exerciseTypeiçin yerelleştirilmiş görünen adı doldurur (ör.RUNNINGiçin"Run"). - Etkin Süre (
activeDuration): Duraklatılan aralıklar hariç olmak üzere antrenmanın gerçek etkin süresi. Standart biçimlendirmedeDurationbiçimi kullanılır (ör."1800s"). SunucudaactiveDuration, oturumintervaldeğerindenexerciseEventsiçindekiPAUSE/RESUMEveyaAUTO_PAUSE/AUTO_RESUMEaralıkları çıkarılarak hesaplanır.
Özet metrikler
metricsSummary iç içe yerleştirilmiş nesnesi, egzersiz seansının tamamı boyunca hesaplanan toplam ve ortalama metrikleri içerir:
caloriesKcal: Antrenman sırasında yakılan toplam aktif kalori. Kilokalori (kcal) cinsinden ölçülür.distanceMillimeters: Birimler arasında yüksek hassasiyet sağlamak için milimetre cinsinden ölçülen toplam mesafe.steps: Egzersiz sırasında atılan toplam adım sayısı.averageHeartRateBeatsPerMinute: Oturumun aktif dakikaları sırasında kullanıcının ortalama nabzı.activeZoneMinutes: Antrenman sırasında kazanılan kümülatif aktif bölge dakikası.averageSpeedMillimetersPerSecond: Milimetre/saniye cinsinden ortalama hareket hızı.averagePaceSecondsPerMeter: Oturumun aktif dakikaları boyunca saniye/metre cinsinden ölçülen ortalama tempo.elevationGainMillimeters: Oturum sırasında çıkılan toplam yükseklik.
Turlar ve bölümler
Desteklenen cihazlardan senkronize edilen ve tur içeren antrenmanlarda (ör. pistte koşu veya havuzda yüzme) splitSummaries, oturumu tura veya bölüme göre segmentlere ayırır.
Her bölme şunları içerir:
- Belirli bir
startTimeveendTime. - Gerçek tur süresini temsil eden bir
activeDuration. - Yalnızca bu segment kapsamındaki bir
metricsSummary. - Bölme sınırlarını tanımlamak için
splitType(ör.DISTANCE,DURATIONveyaMANUAL).
Egzersiz etkinlikleri
Etkin süreyi doğru şekilde hesaplamak için exerciseEvents kullanarak durum geçişlerini (manuel veya otomatik duraklatma etkinlikleri gibi) izleyin.
Her etkinlikte zaman damgası (eventTime) ve tür bulunur:
START/STOP: Kullanıcının kaydı açıkça başlattığı veya durdurduğu zaman damgalarını gösterir.PAUSE/RESUME: Oturumun manuel olarak ne zaman duraklatıldığını veya devam ettirildiğini gösterir.AUTO_PAUSE/AUTO_RESUME: Sensör tarafından tetiklenen otomatik duraklatma/devam ettirme işlemlerini gösterir.
Antrenman seansı yazma
Antrenman seansı oluşturmak, güncellemek veya içe aktarmak için exercise veri türü koleksiyonuna bir veri noktası yazın. create dataPoints uç noktasını kullanın.
REST gösterimi örneği
Aşağıdaki örnekte, POST yöntemi kullanılarak antrenman oturumunun nasıl yazılacağı gösterilmektedir:
İstek
POST https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"platform": "GOOGLE_WEB_API"
},
"exercise": {
"interval": {
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:35:00Z",
"endUtcOffset": "0s"
},
"exerciseType": "RUNNING",
"activeDuration": "1800s",
"metricsSummary": {
"caloriesKcal": 380.0,
"distanceMillimeters": 5000000.0,
"steps": "6200",
"averageHeartRateBeatsPerMinute": "148",
"averagePaceSecondsPerMeter": 0.36
},
"exerciseEvents": [
{
"eventTime": "2026-04-20T08:15:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "PAUSE"
},
{
"eventTime": "2026-04-20T08:20:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "RESUME"
}
]
}
}Yanıt
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/999298779973222220/dataTypes/exercise/dataPoints/3054085373369111216",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"application": {
"googleWebClientId": "438076457939-example.apps.googleusercontent.com"
},
"platform": "GOOGLE_WEB_API"
},
"exercise": {
"interval": {
"startTime": "2026-04-20T08:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-04-20T08:35:00Z",
"endUtcOffset": "0s"
},
"exerciseType": "RUNNING",
"metricsSummary": {
"caloriesKcal": 380,
"distanceMillimeters": 5000000,
"steps": "6200",
"averagePaceSecondsPerMeter": 0.36,
"averageHeartRateBeatsPerMinute": "148"
},
"exerciseMetadata": {},
"displayName": "Run",
"activeDuration": "1800s",
"exerciseEvents": [
{
"eventTime": "2026-04-20T08:15:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "PAUSE"
},
{
"eventTime": "2026-04-20T08:20:00Z",
"eventUtcOffset": "0s",
"exerciseEventType": "RESUME"
}
],
"updateTime": "2026-04-20T08:35:10.123456Z",
"createTime": "2026-04-20T08:35:10.123456Z"
}
}
}GPS rotaları ve konum izleme
API, temel oturum özetlerini doğrudan exercise veri noktasında kaydeder ancak ayrıntılı konum geçmişini ve GPS rota koordinatlarını ayrı bir akış olarak işler.
Açık hava oturumunun ayrıntılı rota verilerini indirmek için exportExerciseTcx özel yöntemini çağırın. Bu uç nokta, rotayı endüstri standardı Training Center XML (TCX) biçiminde döndürür.
GPS rotasını dışa aktarma
İstek
GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media Authorization: Bearer access-token
Yanıt
Content-Type: application/tcx+xml içeren bir HTTP yükü ve tarayıcıya dosyayı kaydetmesini söyleyen başlıklar.
<?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>Gerekli kapsamlar ve konum
GPS rotaları ve konum izleme özelliğini kullanmak için uygulamanızın aşağıdaki OAuth kapsamlarını istemesi gerekir:
- Okuma:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly - Yazma:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly - Okuma:
https://www.googleapis.com/auth/googlehealth.location.readonly
Yönergeler
Antrenman takibini uygulamanıza entegre ederken aşağıdaki tasarım ve uygulama yönergelerini uygulayın.
Etkin süre ile toplam süre karşılaştırması
Hız veya tempo metriklerini hesaplamak için her zaman startTime ve endTime arasındaki fark yerine activeDuration değerini kullanın. Bu sayede, duraklatılan aralıkların
metriklerinizi çarpıtması önlenir.
Örneğin, bir kullanıcı saat 08:00'de antrenmana başlayıp 08:35'te bitirirse antrenmanın toplam süresi 2.100 saniyedir. Kullanıcı antrenmanı 5 dakika (300 saniye) duraklattıysa ve exerciseEvents içine PAUSE ve RESUME etkinliklerini eklerseniz aktif süre "1800s" (2.100 - 300) olur. API, ortalamaları hesaplamak için etkin süreyi kullanır ve toplam mesafeyi 2.100 saniye yerine 1.800 saniyeye böler.
Hız ve tempo hesaplama
Google Health API, hızı ve tempoyu hesaplamak için standart formüller kullanır:
- Hız =
distance / time(hour) - Tempo =
time(seconds) / distance
İstekte belirtilen Accept-Language başlığı, mesafe birimini belirler.
Konum bilgisini erkenden isteme
Uygulamanız antrenman rotalarını haritalandırıyorsa aktivite ve fitness kapsamına ek olarak konum izinleri ve Google Health location kapsamını isteyin. GPS egzersizlerini incelerken uygulamanızın neden konum kapsamına ihtiyaç duyduğunu kullanıcılara açıklayın.
Uygulamanız konum kapsamını (https://www.googleapis.com/auth/googlehealth.location.readonly) istediğinde Google OAuth, kullanıcıya bir izin istemi gösterir. Kullanıcılarınıza, rota yer paylaşımlarını oluşturmak ve GPS takibi dosyalarını (TCX) dışa aktarmak için bu iznin gerekli olduğunu açıklayın. Kullanıcı, etkinlik kapsamına izin verir ancak konum iznini reddederse exportExerciseTcx bir yetkilendirme hatası döndürür. Ancak metricsSummary üzerinden oturum toplamlarına erişmeye devam edebilirsiniz.
Webhook'ları kullanarak gerçek zamanlı senkronizasyon
Yeni antrenman verileri kullanılabilir olduğunda webhook'ları kullanarak arka ucunuzu bilgilendirmek için exercise veri türüne abone olun. Bu sayede, antrenman sonrası deneyimleri
anlık olarak tetikleyebilirsiniz.
Sunucunuz bir webhook bildirimi aldığında bu bildirim, güncellenen antrenmanın healthUserId ve sivil zaman aralığını (civilIso8601TimeInterval) içerir. Sunucunuz, bildirimi 204 No Content ile hemen onaylamalı, yükü eşzamansız olarak işlemeli ve exercise.interval.civil_start_time filtresi kullanarak mutabakatı yapılmış exercise uç noktasını sorgulamalıdır (exercise'nın yalnızca civil_start_time ile filtrelemeyi desteklediğini unutmayın):
GET https://health.googleapis.com/v4/users/healthUserId/dataTypes/exercise/dataPoints:reconcile?filter=exercise.interval.civil_start_time >= "2026-04-20T08:00:00" AND exercise.interval.civil_start_time < "2026-04-20T10:00:00"
Abonelikleri ayarlama hakkında ayrıntılı bilgi için Webhook abonelikleri başlıklı makaleyi inceleyin.
Metriklerin tutarlı olmasını sağlama
Eksiksiz bir antrenman deneyimi sunmak için exercise oturumlarını yazarken özet metrikleri ekleyin ve ayrıntı grafiklerini oluştururken zaman aralığı filtrelerini kullanarak salt okunur telemetri uç noktalarını sorgulayın.
Antrenman özeti metriklerini yazma (yazma yolu)
Tamamlanmış bir antrenmanı Google Health API'ye aktarırken veya yazarken antrenmanın toplu telemetri metriklerini (steps, caloriesKcal, distanceMillimeters, averageHeartRateBeatsPerMinute ve averagePaceSecondsPerMeter) exercise veri noktasının metricsSummary nesnesine ekleyin:
POST https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints
Grafikler için ayrıntılı verileri sorgulama (okuma yolu)
Belirli bir seans için antrenman kontrol panelleri veya grafikleri oluşturmak istiyorsanız söz konusu antrenmanın zaman aralığı için mutabık kalınan telemetri uç noktalarını sorgulayın:
intervalvemetricsSummarydeğerlerini almak içincivil_start_timefiltresini kullanarakexerciseuç noktasından antrenman oturumunu getirin:GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints:reconcile?filter=exercise.interval.civil_start_time >= "2026-04-20T00:00:00" AND exercise.interval.civil_start_time < "2026-04-21T00:00:00"
Oturumun
interval.startTimeveinterval.endTimedeğerlerini kullanarak söz konusu fiziksel zaman aralığı için telemetri uç noktalarını sorgulayın.exerciseMetadata.hasGps,trueise rota koordinatlarını indirmek içinexportExerciseTcxyöntemini çağırın.