Google Health API की मदद से, वर्कआउट से जुड़े अनुभव डेवलप करना

Google Health API, exercise सेशन डेटा टाइप का इस्तेमाल करके, उपयोगकर्ता के वर्कआउट सेशन और कसरत के इतिहास को ट्रैक करता है. सेशन, एक कंटेनर की तरह काम करता है. इसमें गतिविधि का मेटाडेटा, पॉज़ और फिर से शुरू करने के इवेंट, लैप या स्प्लिट, और खास जानकारी वाली मेट्रिक शामिल होती हैं.

जानें कि अपने ऐप्लिकेशन में कसरत के डेटा को कैसे पढ़ा, सेव, और स्ट्रक्चर किया जाता है, ताकि उपयोगकर्ताओं को बेहतर अनुभव दिया जा सके.

डेटा टाइप, जो इस्तेमाल किए जा सकते हैं

एपीआई, वर्कआउट और गतिविधि के सेशन को ट्रैक करने के लिए, इस डेटा टाइप का इस्तेमाल करता है:

टेबल: Google Health API के वर्कआउट डेटा टाइप
डेटा टाइप उपलब्ध
ऑपरेशन
दायरा
कसरत
dataType: exercise
filter parameter: exercise
रिकॉर्ड टाइप: सेशन

संगत डिवाइस

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly

वर्कआउट सेशन के लिए, exercise डेटा टाइप का इस्तेमाल किया जाता है. हालांकि, आम तौर पर वर्कआउट ट्रैक करने वाले डिवाइस, सेशन के दौरान ज़्यादा फ़्रीक्वेंसी वाला और ज़्यादा जानकारी वाला टेलीमेट्री डेटा सेव और ऐक्सेस करते हैं. इन मेज़रमेंट (जैसे, धड़कन की दर या कदमों की संख्या) को उनके डेटा टाइप का इस्तेमाल करके ही पढ़ा या सेव किया जाना चाहिए.

यहां दी गई टेबल में, Google Health API के रॉ टेलीमेट्री डेटा टाइप के साथ, exercise डेटा टाइप के metricsSummary ऑब्जेक्ट में मौजूद फ़ील्ड की मैपिंग दिखाई गई है:

खास जानकारी वाला फ़ील्ड (metricsSummary) इंट्राडे टेलीमेट्री डेटा टाइप का नाम एपीआई टेलीमेट्री डेटा टाइप आईडी
caloriesKcal शारीरिक गतिविधि में खर्च हुई कैलोरी का डेटा active-energy-burned
distanceMillimeters दूरी distance
steps कदम steps
averageHeartRateBeatsPerMinute धड़कन की दर heart-rate
activeZoneMinutes ऐक्टिव ज़ोन मिनट active-zone-minutes

इन सेक्शन में, exercise डेटा टाइप के बारे में तकनीकी जानकारी दी गई है. इसमें REST के उदाहरण, जीपीएस रूट को मैनेज करने का तरीका, और इंटिग्रेशन के दिशा-निर्देश शामिल हैं.

कसरत सेशन

हर दिन की गतिविधियों या वर्कआउट को exercise सेशन के डेटा पॉइंट के तौर पर सेव करें. हर डेटा पॉइंट में, पूरे सेशन की जानकारी, इवेंट इंटरवल (जैसे, पॉज़ और फिर से शुरू करने की कार्रवाइयां) की जानकारी, और खास जानकारी वाली मेट्रिक (जैसे, कुल दूरी, कदम, और धड़कन की औसत दर) शामिल होती हैं.

सेशन के एट्रिब्यूट

कसरत के डेटा पॉइंट को स्ट्रक्चर करते समय, इन मुख्य कॉम्पोनेंट की पुष्टि करें:

  • सेशन का समय (interval): पूरे वर्कआउट सेशन का शुरू होने और खत्म होने का समय. साथ ही, उन समय पर ऐक्टिव टाइमज़ोन ऑफ़सेट.
  • गतिविधि का टाइप (exerciseType): की गई गतिविधि की कैटगरी. जैसे, RUNNING, WALKING, BIKING या AEROBIC_WORKOUT. शारीरिक ट्रेनिंग का सटीक टाइप तय करें.
  • दिखने वाला नाम (displayName): वर्कआउट सेशन के लिए, उपयोगकर्ता के हिसाब से नाम. उदाहरण के लिए, "दोपहर की ट्रेल रन".
  • ऐक्टिव अवधि (activeDuration): वर्कआउट का असली ऐक्टिव समय. इसमें पॉज़ किए गए इंटरवल शामिल नहीं होते. स्टैंडर्ड फ़ॉर्मैटिंग में, Duration फ़ॉर्मैट का इस्तेमाल किया जाता है. उदाहरण के लिए, "1800s".

खास जानकारी वाली मेट्रिक

metricsSummary नेस्टेड ऑब्जेक्ट में, कसरत के पूरे सेशन के दौरान कैलकुलेट की गई कुल और औसत मेट्रिक शामिल होती हैं:

  • caloriesKcal: वर्कआउट के दौरान खर्च हुई कुल ऐक्टिव कैलोरी. इसे किलोकैलोरी (kcal) में मापा जाता है.
  • distanceMillimeters: तय की गई कुल दूरी. इसे मिलीमीटर में मापा जाता है, ताकि सभी यूनिट में सटीक जानकारी मिल सके.
  • steps: कसरत के दौरान लिए गए कुल कदम.
  • averageHeartRateBeatsPerMinute: सेशन के ऐक्टिव मिनट के दौरान, उपयोगकर्ता की धड़कन की औसत दर.
  • activeZoneMinutes: वर्कआउट के दौरान, कुल ऐक्टिव ज़ोन मिनट.
  • averageSpeedMillimetersPerSecond: मिलीमीटर प्रति सेकंड में, चलने की औसत रफ़्तार.
  • averagePaceSecondsPerMeter: सेशन के ऐक्टिव मिनट के दौरान, औसत पेस. इसे मीटर के हिसाब से सेकंड में मापा जाता है.
  • elevationGainMillimeters: सेशन के दौरान, कुल एलिवेशन गेन.

लैप और स्प्लिट

ऐसे वर्कआउट के लिए जिनमें लैप शामिल होते हैं, जैसे कि ट्रैक रन या पूल में तैरना, splitSummaries का इस्तेमाल करें.

हर स्प्लिट में ये शामिल होते हैं:

  • एक खास startTime और endTime.
  • एक activeDuration, जो असली लैप टाइम दिखाता है.
  • एक metricsSummary, जो सिर्फ़ उस सेगमेंट के लिए होती है.
  • स्प्लिट की सीमाएं तय करने के लिए, एक splitType. जैसे, DISTANCE, DURATION या MANUAL.

कसरत के इवेंट

ऐक्टिव अवधि का सटीक हिसाब लगाने के लिए, exerciseEvents का इस्तेमाल करके, स्टेट ट्रांज़िशन (जैसे, मैन्युअल या अपने-आप पॉज़ होने के इवेंट) को ट्रैक करें.

हर इवेंट में टाइमस्टैंप (eventTime) और टाइप शामिल होता है:

  • START / STOP: इससे यह पता चलता है कि उपयोगकर्ता ने रिकॉर्डिंग कब शुरू या बंद की.
  • PAUSE / RESUME: इससे यह पता चलता है कि सेशन को मैन्युअल तरीके से कब पॉज़ या फिर से शुरू किया गया.
  • AUTO_PAUSE / AUTO_RESUME: इससे सेंसर की मदद से, अपने-आप पॉज़/फिर से शुरू होने की जानकारी मिलती है.

वर्कआउट सेशन का डेटा सेव करना

वर्कआउट सेशन बनाने, अपडेट करने या इंपोर्ट करने के लिए, exercise डेटा टाइप कलेक्शन में एक डेटा पॉइंट सेव करें. create dataPoints एंडपॉइंट का इस्तेमाल करें.

REST के उदाहरण

यहां दिए गए उदाहरण में, POST तरीके का इस्तेमाल करके, वर्कआउट सेशन का डेटा सेव करने का तरीका बताया गया है:

अनुरोध

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
        }
      }
    ]
  }
}

जवाब

{
  "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
          }
        }
      ]
    }
  }
}

जीपीएस रूट और जगह की जानकारी ट्रैक करने की सुविधा

एपीआई, सेशन की खास जानकारी सीधे exercise डेटा पॉइंट में सेव करता है. हालांकि, जगह की जानकारी का इतिहास और जीपीएस रूट के कोऑर्डिनेट को अलग स्ट्रीम के तौर पर मैनेज करता है.

आउटडोर सेशन के लिए, रूट का ज़्यादा जानकारी वाला डेटा डाउनलोड करने के लिए, exportExerciseTcx कस्टम तरीके को कॉल करें. यह एंडपॉइंट, इंडस्ट्री के स्टैंडर्ड Training Center XML (TCX) फ़ॉर्मैट में रूट की जानकारी दिखाता है.

जीपीएस रूट एक्सपोर्ट करना

अनुरोध

GET https://health.googleapis.com/v4/users/me/dataTypes/exercise/dataPoints/exercise-data-point-id:exportExerciseTcx?alt=media
Authorization: Bearer access-token

जवाब

एक एचटीटीपी पेलोड, जिसमें Content-Type: application/tcx+xml और हेडर शामिल होते हैं. ये हेडर, ब्राउज़र को फ़ाइल सेव करने का निर्देश देते हैं.

<?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>

ज़रूरी दायरे और जगह की जानकारी

जीपीएस रूट और जगह की जानकारी ट्रैक करने की सुविधा का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को OAuth के इन दायरों के लिए अनुरोध करना होगा:

  • पढ़ने की अनुमति: https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonly
  • सेव करने की अनुमति: https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly
  • पढ़ने की अनुमति: https://www.googleapis.com/auth/googlehealth.location.readonly

दिशा-निर्देश

अपने ऐप्लिकेशन में वर्कआउट ट्रैकिंग की सुविधा इंटिग्रेट करते समय, डिज़ाइन और लागू करने से जुड़े इन दिशा-निर्देशों का पालन करें.

ऐक्टिव अवधि बनाम कुल अवधि

रफ़्तार या पेस मेट्रिक का हिसाब लगाने के लिए, हमेशा activeDuration का इस्तेमाल करें. startTime और endTime के बीच के अंतर का इस्तेमाल न करें. इससे पॉज़ किए गए इंटरवल की वजह से, आपकी मेट्रिक में गड़बड़ी नहीं होगी.

उदाहरण के लिए, अगर कोई उपयोगकर्ता 08:00 बजे वर्कआउट शुरू करता है और 08:35 बजे खत्म करता है, तो वर्कआउट की कुल अवधि 2,100 सेकंड होती है. अगर उपयोगकर्ता ने पांच मिनट (300 सेकंड) के लिए वर्कआउट पॉज़ किया है, तो activeDuration को "1800s" (2,100 - 300) पर सेट करें. एपीआई, औसत का हिसाब लगाने के लिए ऐक्टिव अवधि का इस्तेमाल करता है. इसके लिए, कुल दूरी को 2,100 सेकंड के बजाय 1,800 सेकंड से भाग दिया जाता है.

रफ़्तार और पेस का हिसाब लगाना

Google Health API, रफ़्तार और पेस का हिसाब लगाने के लिए, स्टैंडर्ड फ़ॉर्मूले का इस्तेमाल करता है:

  • रफ़्तार = distance / time(hour)
  • पेस = time(seconds) / distance

अनुरोध में बताया गया Accept-Language हेडर, दूरी की यूनिट तय करता है.

शुरुआत में ही जगह की जानकारी का अनुरोध करना

अगर आपका ऐप्लिकेशन, वर्कआउट के रूट की मैपिंग करता है, तो गतिविधि और फ़िटनेस के दायरे के अलावा, जगह की जानकारी की अनुमतियों और Google Health के location दायरे के लिए अनुरोध करें. उपयोगकर्ताओं को बताएं कि जीपीएस की मदद से की जाने वाली कसरत की समीक्षा करते समय, आपके ऐप्लिकेशन को जगह की जानकारी के दायरे की ज़रूरत क्यों होती है.

जब आपका ऐप्लिकेशन, जगह की जानकारी के दायरे (https://www.googleapis.com/auth/googlehealth.location.readonly) के लिए अनुरोध करता है, तो Google OAuth, उपयोगकर्ता को सहमति का प्रॉम्प्ट दिखाता है. अपने उपयोगकर्ताओं को बताएं कि रूट ओवरले दिखाने और जीपीएस ट्रैक फ़ाइलें (टीसीएक्स) एक्सपोर्ट करने के लिए, इस अनुमति की ज़रूरत होती है. अगर कोई उपयोगकर्ता, गतिविधि के दायरे की अनुमति देता है, लेकिन जगह की जानकारी की अनुमति नहीं देता है, तो exportExerciseTcx से अनुमति से जुड़ी गड़बड़ी दिखती है. हालांकि, अब भी metricsSummary में सेशन के एग्रीगेट ऐक्सेस किए जा सकते हैं.

वेबहुक का इस्तेमाल करके, रीयल-टाइम में सिंक करने की सुविधा

exercise डेटा टाइप की सदस्यता लें, ताकि वर्कआउट का नया डेटा उपलब्ध होने पर, वेबहुक का इस्तेमाल करके अपने बैकएंड को सूचना दी जा सके. इससे, वर्कआउट के बाद के अनुभव को रीयल टाइम में ट्रिगर किया जा सकता है.

जब आपके सर्वर को वेबहुक की सूचना मिलती है, तो उसमें healthUserId और वर्कआउट का खास समय इंटरवल शामिल होता है. आपके सर्वर को सूचना को एसिंक्रोनस तरीके से प्रोसेस करना चाहिए. इसके बाद, /users/me/dataTypes/exercise/dataPoints एंडपॉइंट से, नए exercise डेटा पॉइंट का अनुरोध करना चाहिए. सदस्यताएं सेट अप करने के बारे में ज़्यादा जानने के लिए, वेबहुक की सदस्यताएं देखें.

एक जैसी मेट्रिक बनाए रखना

वर्कआउट का पूरा अनुभव देने के लिए, आपके ऐप्लिकेशन को exercise सेशन के साथ-साथ, ज़्यादा फ़्रीक्वेंसी वाले टेलीमेट्री डेटा पॉइंट को सिंक करना होगा. इससे यह पक्का होता है कि उपयोगकर्ता के हर दिन के कुल आंकड़े, पुराने रुझान, और ज़्यादा जानकारी वाले चार्ट पूरी तरह से अलाइन रहें.

टेलीमेट्री और सेशन सिंक करना (सेव करने का पाथ)

Google Health API में, पूरा हो चुके वर्कआउट को इंपोर्ट या सेव करते समय, सेव करने के लिए मल्टी-स्टेप पैटर्न लागू करें:

  1. सेशन का डेटा सेव करना: डेटा पॉइंट पोस्ट करके, खास जानकारी वाला इवेंट फ़ाइल करें POST /users/me/dataTypes/exercise/dataPoints.
  2. टाइम-सीरीज़ इंटरवल लिखें: वर्कआउट के दौरान लॉग किए गए, विस्तृत डेटा पॉइंट को उनके कलेक्शन में एक साथ लिखें. उदाहरण के लिए, मिनट-दर-मिनट के हिसाब से कदमों की संख्या या कैलोरी बर्न इंटरवल:
    • POST /users/me/dataTypes/steps/dataPoints
    • POST /users/me/dataTypes/active-energy-burned/dataPoints
    • POST /users/me/dataTypes/heart-rate/dataPoints

चार्ट के लिए ज़्यादा जानकारी वाला डेटा क्वेरी करना (पढ़ने का पाथ)

किसी खास वर्कआउट सेशन के लिए, पुराने वर्कआउट डैशबोर्ड या परफ़ॉर्मेंस ग्राफ़ दिखाते समय, सेशन की टाइम विंडो का इस्तेमाल करके, ज़्यादा जानकारी वाले टेलीमेट्री डेटा को क्वेरी करें:

  1. सेशन की खास जानकारी क्वेरी करना: वर्कआउट की पूरी जानकारी और metricsSummary को फ़ेच करने के लिए, /users/me/dataTypes/exercise/dataPoints को कॉल करें.
  2. चार्ट मेट्रिक फ़ेच करना: वर्कआउट के interval.startTime और interval.endTime की जांच करें. उस खास टाइम विंडो के लिए, टेलीमेट्री कलेक्शन को सेकंडरी GET कॉल करें:
    • GET /users/me/dataTypes/heart-rate/dataPoints?startTime=2026-04-20T08:00:00Z&endTime=2026-04-20T08:35:00Z
  3. जीपीएस रूट फ़ेच करना: अगर सेशन के मेटाडेटा से पता चलता है कि जीपीएस डेटा मौजूद है (exerciseMetadata.hasGps की वैल्यू true है), तो रूट के कोऑर्डिनेट डाउनलोड करने के लिए, exportExerciseTcx हेल्पर तरीके को लागू करें.