헬스 커넥트 데이터 유형 계획 및 검토하기

헬스 커넥트는 건강 및 피트니스 데이터를 저장하고 구조화합니다. 또한 다양한 데이터 유형의 측정 방법도 고려합니다. 이러한 데이터 유형에는 즉시 측정한 심박수, 시간 경과에 따른 걸음 수, 세션에서 측정한 수면 데이터가 포함됩니다.

앱의 요구사항을 계획할 수 있도록 먼저 헬스 커넥트에서 제공하는 데이터 유형과 권한을 이해하는 것이 중요합니다. 따라서 요구사항을 최종적으로 결정하기 전에 데이터 유형을 검토해야 합니다.

데이터 유형 카테고리

헬스 커넥트는 최대한 다양한 데이터를 제공하기 위해 대부분의 건강 및 피트니스 앱에서 사용되는 데이터 유형을 지원합니다. 헬스 커넥트는 건강 및 피트니스 데이터를 포괄적으로 확인하고 저장하는 것을 목표로 합니다. 이러한 데이터 유형은 다음과 같은 카테고리로 분류됩니다.

  • 활동: 사용자가 하는 모든 활동을 캡처합니다. 달리기, 수영과 같은 건강 및 피트니스 활동을 포함할 수 있습니다.
  • 신체 측정: 사용자의 체중 및 기초 대사율과 같이 신체와 관련된 일반적인 데이터를 캡처합니다.
  • 월경 주기 추적: 월경 주기 및 관련 데이터 포인트(예: 배란 테스트의 바이너리 결과)를 캡처합니다.
  • 영양: 수분 섭취 및 영양 데이터 유형을 캡처합니다. 수분 섭취는 사용자가 한 번에 마신 물의 양을 나타냅니다. 영양 데이터 유형에는 칼로리, 당분, 마그네슘과 같은 선택 항목이 포함되어 있습니다.
  • 수면: 사용자의 수면 시간 및 유형과 관련된 인터벌 데이터를 캡처합니다.
  • 활력 징후: 사용자의 일반적인 건강에 관한 필수 정보를 캡처합니다. 여기에는 체온, 혈당, 혈압, 혈중 산소 포화도 등의 데이터가 포함됩니다.

데이터 유형 형식

헬스 커넥트의 데이터 유형은 Record의 서브클래스인 객체에 저장됩니다.

각 데이터 유형에는 timezoneOffset와 같은 일반 필드 또는 title, count, percentage와 같은 특정 필드가 연결되어 있습니다. 일부 필드는 long, double, string과 같은 단순한 유형을 사용하는 반면, 열거형과 InstantZoneOffset와 같은 클래스와 같은 복잡한 유형을 사용하는 필드도 있습니다. 이러한 필드의 속성은 필수 또는 선택사항일 수 있습니다. 일부 속성은 읽기 전용이며 일부 속성은 특정 값 범위로 제한됩니다.

사용 가능한 데이터 유형 및 필드의 전체 목록은 Jetpack의 클래스를 참고하세요.

추가 데이터 속성

헬스 커넥트 API의 데이터에는 다음 목록에 설명된 메타데이터 속성도 포함됩니다.

  • 헬스 커넥트 ID: 생성 시 각 데이터 포인트에 고유 식별자(UID)가 할당됩니다. 이는 표준 읽기 및 쓰기 작업에 유용합니다. 자세한 내용은 헬스 커넥트 ID를 참고하세요.
  • 최종 수정 시간: 기록이 업데이트된 마지막 인스턴스의 타임스탬프를 표시합니다. 기록이 처음 생성될 때 또는 업데이트가 발생할 때마다 자동으로 생성됩니다.
  • 데이터 출처: 헬스 커넥트는 데이터의 출처인 앱에 관한 정보를 저장합니다. 생성 시 자동으로 추가되는 해당 출처의 패키지 이름을 포함합니다.
  • 기기: 헬스 커넥트는 데이터가 발생한 기기에 관한 정보를 저장합니다. 개발자가 값을 수동으로 제공하는 해당 기기의 제조업체와 모델을 포함합니다.
  • 클라이언트 ID: 클라이언트 앱에서 자체 ID를 사용하여 데이터를 참조할 수 있도록 헬스 커넥트는 클라이언트 ID를 제공합니다. 이는 충돌 해결에 도움이 되고 동기화를 더 쉽게 만듭니다. 이는 기록에 수동으로 제공됩니다.
  • 클라이언트 레코드 버전: 클라이언트 ID와 함께 헬스 커넥트는 데이터 동기화 중에 변경사항을 추적하는 데 도움이 되는 버전 관리를 제공합니다. 이는 기록에 수동으로 제공됩니다.
  • 기록 방법: 헬스 커넥트를 사용하면 데이터가 기록되는 방식을 파악할 수 있습니다. 이러한 방법에는 데이터를 수동으로 (자동으로) 기록하는 앱과 사용자가 데이터를 적극적으로 또는 수동으로 기록하는 방법이 포함됩니다.

헬스 커넥트 ID

헬스 커넥트는 새로 삽입된 데이터 객체에 고유 식별자 (UID)를 할당합니다. 고유 식별자는 데이터 객체를 식별하고 다른 객체와 구분합니다. 헬스 커넥트 ID는 읽기 또는 쓰기 요청에 유용합니다. 헬스 커넥트 ID는 클라이언트 ID와 다릅니다. 클라이언트 앱은 클라이언트 ID를 할당하지만 헬스 커넥트는 헬스 커넥트 ID만 할당합니다.

헬스 커넥트 ID를 사용할 때는 다음 사항에 유의하세요.

  • 세션에는 단일 헬스 커넥트 ID가 있지만, 세션 내의 데이터는 자체 헬스 커넥트 ID를 가집니다.
  • 헬스 커넥트 ID는 타임스탬프에 연결되거나 관련되지 않습니다.
  • 일부 사용 사례에서는 워크플로 중에 특정 헬스 커넥트 ID를 저장해야 할 수도 있습니다. 예를 들어 사용자가 방금 기록한 데이터 항목을 가져와 사용자에게 표시하려면 특정 ID가 필요합니다.

헬스 커넥트에서의 시간

헬스 커넥트에 기록되는 모든 데이터는 시간대 오프셋 정보를 지정해야 합니다. 시간대 오프셋을 지정하면 앱이 데이터를 읽어 상용 시간으로 표시할 수 있습니다. 상용 시간은 사용자의 현지 시간으로, 협정세계시 (UTC)가 아닐 수도 있습니다.

드물지만 시간대 오프셋을 사용할 수 없는 경우도 있습니다. Android 14 (API 수준 34)에서 이 문제가 발생하면 헬스 커넥트는 기기의 시스템 기본 시간대를 기반으로 시간대 오프셋을 설정합니다. Android 13 이하 버전(API 수준 33 이하)에서는 시간대 오프셋 정보를 지정하지 않고 헬스 커넥트에 쓸 수 있습니다. 이는 가급적 피해야 합니다.

시간 및 시간대 설정

데이터를 쓰는 동안 시간대 오프셋 정보를 지정하면 헬스 커넥트에서 데이터를 읽을 때 시간대 정보가 제공됩니다. 하지만 시간대 오프셋이 제공되지 않는 경우 등의 특정 상황에서는 정보가 제공되지 않을 수도 있습니다. 앱은 특정 상황에 맞는 방식으로 두 종류의 데이터를 모두 처리할 준비가 되어 있어야 합니다.

권한

권한을 요청하기 전에 먼저 앱은 매니페스트에서 권한을 선언해야 합니다. 데이터 유형과 권한의 전체 매핑은 다음 표를 참고하세요.

1.0.0-alpha10 이상

레코드 클래스 유형 읽기 및 쓰기 권한 선언
ActiveCaloriesBurned android.permission.health.READ_ACTIVE_CALORIES_BURNED
android.permission.health.WRITE_ACTIVE_CALORIES_BURNED
BasalBodyTemperature android.permission.health.READ_BASAL_BODY_TEMPERATURE
android.permission.health.WRITE_BASAL_BODY_TEMPERATURE
BasalMetabolicRate android.permission.health.READ_BASAL_METABOLIC_RATE
android.permission.health.WRITE_BASAL_METABOLIC_RATE
BloodGlucose android.permission.health.READ_BLOOD_GLUCOSE
android.permission.health.WRITE_BLOOD_GLUCOSE
BloodPressure android.permission.health.READ_BLOOD_PRESSURE
android.permission.health.WRITE_BLOOD_PRESSURE
BodyFat android.permission.health.READ_BODY_FAT
android.permission.health.WRITE_BODY_FAT
BodyTemperature android.permission.health.READ_BODY_TEMPERATURE
android.permission.health.WRITE_BODY_TEMPERATURE
BodyWaterMass android.permission.health.READ_BODY_WATER_MASS
android.permission.health.WRITE_BODY_WATER_MASS
BoneMass android.permission.health.READ_BONE_MASS
android.permission.health.WRITE_BONE_MASS
CervicalMucus android.permission.health.READ_CERVICAL_MUCUS
android.permission.health.WRITE_CERVICAL_MUCUS
CyclingPedalingCadence android.permission.health.READ_EXERCISE
android.permission.health.WRITE_EXERCISE
Distance android.permission.health.READ_DISTANCE
android.permission.health.WRITE_DISTANCE
ElevationGained android.permission.health.READ_ELEVATION_GAINED
android.permission.health.WRITE_ELEVATION_GAINED
ExerciseSession android.permission.health.READ_EXERCISE
android.permission.health.WRITE_EXERCISE
FloorsClimbed android.permission.health.READ_FLOORS_CLIMBED
android.permission.health.WRITE_FLOORS_CLIMBED
HeartRate android.permission.health.READ_HEART_RATE
android.permission.health.WRITE_HEART_RATE
HeartRateVariabilityRmssd android.permission.health.READ_HEART_RATE_VARIABILITY
android.permission.health.WRITE_HEART_RATE_VARIABILITY
Height android.permission.health.READ_HEIGHT
android.permission.health.WRITE_HEIGHT
Hydration android.permission.health.READ_HYDRATION
android.permission.health.WRITE_HYDRATION
IntermenstrualBleeding android.permission.health.READ_INTERMENSTRUAL_BLEEDING
android.permission.health.WRITE_INTERMENSTRUAL_BLEEDING
LeanBodyMass android.permission.health.READ_LEAN_BODY_MASS
android.permission.health.WRITE_LEAN_BODY_MASS
MenstruationFlow android.permission.health.READ_MENSTRUATION
android.permission.health.WRITE_MENSTRUATION
MenstruationPeriod android.permission.health.READ_MENSTRUATION
android.permission.health.WRITE_MENSTRUATION
Nutrition android.permission.health.READ_NUTRITION
android.permission.health.WRITE_NUTRITION
OvulationTest android.permission.health.READ_OVULATION_TEST
android.permission.health.WRITE_OVULATION_TEST
OxygenSaturation android.permission.health.READ_OXYGEN_SATURATION
android.permission.health.WRITE_OXYGEN_SATURATION
PlannedExercise android.permission.health.READ_PLANNED_EXERCISE
android.permission.health.WRITE_PLANNED_EXERCISE
Power android.permission.health.READ_POWER
android.permission.health.WRITE_POWER
RespiratoryRate android.permission.health.READ_RESPIRATORY_RATE
android.permission.health.WRITE_RESPIRATORY_RATE
RestingHeartRate android.permission.health.READ_RESTING_HEART_RATE
android.permission.health.WRITE_RESTING_HEART_RATE
SexualActivity android.permission.health.READ_SEXUAL_ACTIVITY
android.permission.health.WRITE_SEXUAL_ACTIVITY
SkinTemperature androidx.health.permission.SkinTemperature.READ
androidx.health.permission.SkinTemperature.WRITE
SleepSession android.permission.health.READ_SLEEP
android.permission.health.WRITE_SLEEP
Speed android.permission.health.READ_SPEED
android.permission.health.WRITE_SPEED
StepsCadence android.permission.health.READ_STEPS
android.permission.health.WRITE_STEPS
Steps android.permission.health.READ_STEPS
android.permission.health.WRITE_STEPS
TotalCaloriesBurned android.permission.health.READ_TOTAL_CALORIES_BURNED
android.permission.health.WRITE_TOTAL_CALORIES_BURNED
Vo2Max android.permission.health.READ_VO2_MAX
android.permission.health.WRITE_VO2_MAX
Weight android.permission.health.READ_WEIGHT
android.permission.health.WRITE_WEIGHT
WheelchairPushes android.permission.health.READ_WHEELCHAIR_PUSHES
android.permission.health.WRITE_WHEELCHAIR_PUSHES

1.0.0-alpha09 이하

레코드 클래스 유형 읽기 및 쓰기 권한 선언
ActiveCaloriesBurned androidx.health.permission.ActiveCaloriesBurned.READ
androidx.health.permission.ActiveCaloriesBurned.WRITE
BasalBodyTemperature androidx.health.permission.BasalBodyTemperature.READ
androidx.health.permission.BasalBodyTemperature.WRITE
BasalMetabolicRate androidx.health.permission.BasalMetabolicRate.READ
androidx.health.permission.BasalMetabolicRate.WRITE
BloodGlucose androidx.health.permission.BloodGlucose.READ
androidx.health.permission.BloodGlucose.WRITE
BloodPressure androidx.health.permission.BloodPressure.READ
androidx.health.permission.BloodPressure.WRITE
BodyFat androidx.health.permission.BodyFat.READ
androidx.health.permission.BodyFat.WRITE
BodyTemperature androidx.health.permission.BodyTemperature.READ
androidx.health.permission.BodyTemperature.WRITE
BodyWaterMass androidx.health.permission.BodyWaterMass.READ
androidx.health.permission.BodyWaterMass.WRITE
BoneMass androidx.health.permission.BoneMass.READ
androidx.health.permission.BoneMass.WRITE
CervicalMucus androidx.health.permission.CervicalMucus.READ
androidx.health.permission.CervicalMucus.WRITE
CyclingPedalingCadence androidx.health.permission.CyclingPedalingCadence.READ
androidx.health.permission.CyclingPedalingCadence.WRITE
Distance androidx.health.permission.Distance.READ
androidx.health.permission.Distance.WRITE
ElevationGained androidx.health.permission.ElevationGained.READ
androidx.health.permission.ElevationGained.WRITE
ExerciseSession androidx.health.permission.ExerciseSession.READ
androidx.health.permission.ExerciseSession.WRITE
FloorsClimbed androidx.health.permission.FloorsClimbed.READ
androidx.health.permission.FloorsClimbed.WRITE
HeartRate androidx.health.permission.HeartRate.READ
androidx.health.permission.HeartRate.WRITE
HeartRateVariabilityRmssd androidx.health.permission.HeartRateVariabilityRmssd.READ
androidx.health.permission.HeartRateVariabilityRmssd.WRITE
Height androidx.health.permission.Height.READ
androidx.health.permission.Height.WRITE
Hydration androidx.health.permission.Hydration.READ
androidx.health.permission.Hydration.WRITE
IntermenstrualBleeding androidx.health.permission.IntermenstrualBleeding.READ
androidx.health.permission.IntermenstrualBleeding.WRITE
LeanBodyMass androidx.health.permission.LeanBodyMass.READ
androidx.health.permission.LeanBodyMass.WRITE
MenstruationFlow androidx.health.permission.MenstruationFlow.READ
androidx.health.permission.MenstruationFlow.WRITE
Nutrition androidx.health.permission.Nutrition.READ
androidx.health.permission.Nutrition.WRITE
OvulationTest androidx.health.permission.OvulationTest.READ
androidx.health.permission.OvulationTest.WRITE
OxygenSaturation androidx.health.permission.OxygenSaturation.READ
androidx.health.permission.OxygenSaturation.WRITE
Power androidx.health.permission.Power.READ
androidx.health.permission.Power.WRITE
RespiratoryRate androidx.health.permission.RespiratoryRate.READ
androidx.health.permission.RespiratoryRate.WRITE
RestingHeartRate androidx.health.permission.RestingHeartRate.READ
androidx.health.permission.RestingHeartRate.WRITE
SexualActivity androidx.health.permission.SexualActivity.READ
androidx.health.permission.SexualActivity.WRITE
SleepSession androidx.health.permission.SleepSession.READ
androidx.health.permission.SleepSession.WRITE
Speed androidx.health.permission.Speed.READ
androidx.health.permission.Speed.WRITE
StepsCadence androidx.health.permission.StepsCadence.READ
androidx.health.permission.StepsCadence.WRITE
Steps androidx.health.permission.Steps.READ
androidx.health.permission.Steps.WRITE
TotalCaloriesBurned androidx.health.permission.TotalCaloriesBurned.READ
androidx.health.permission.TotalCaloriesBurned.WRITE
Vo2Max androidx.health.permission.Vo2Max.READ
androidx.health.permission.Vo2Max.WRITE
Weight androidx.health.permission.Weight.READ
androidx.health.permission.Weight.WRITE
WheelchairPushes androidx.health.permission.WheelchairPushes.READ
androidx.health.permission.WheelchairPushes.WRITE

데이터 유형 및 권한 검토

이제 데이터 유형과 권한을 계획했으므로 개발 중에 구현할 수 있습니다.

앱을 Play 스토어에 업로드하기 전에 검토할 때 앱에 필요한 데이터 유형 및 권한 목록을 다시 확인하세요. 이를 통해 앱의 데이터 사용을 정확하게 선언할 수 있습니다.

Play 스토어에 앱을 게시할 준비를 할 때 앱에서 사용하는 헬스 커넥트 데이터 유형에 대한 액세스를 선언합니다. 그러지 않으면 사용자에게 특별한 승인이 필요하므로 앱이 헬스 커넥트 데이터 유형에 액세스할 수 없다는 오류 메시지가 표시될 수 있습니다.