Інтеграція Health Connect в Android: єдиний API здоров'я
Чому Health Connect — єдиний розумний вибір для здоров'я на Android?
Розрізнені джерела даних здоров'я на Android — прямий шлях до технічного боргу. Поки одні додатки пишуть у Google Fit, інші — у партнерські SDK, а користувач перемикається між трьома трекерами. Ми замінили цей хаос єдиним API — Health Connect. Він вбудований в Android 14 та доступний на пристроях з Android 9+. Правильна архітектура з самого старту економить тижні роботи та знижує кількість багів при додаванні нових типів даних.
Що змінилося з приходом Health Connect замість Google Fit?
Google Fit — застарілий API з обмеженою підтримкою та складною процедурою авторизації. Порівняйте: в Health Connect дозволи запитуються через системний PermissionController, а не через OAuth. Час інтеграції скорочується на 40% завдяки єдиному інтерфейсу для більш ніж 40 типів даних. Health Connect також підтримує інкрементальну синхронізацію через changesToken — аналог HKAnchoredObjectQuery в HealthKit. Це в 3 рази прискорює фонові оновлення та знижує навантаження на батарею.
Як налаштувати дозволи Health Connect?
Перший крок — додати бібліотеку в build.gradle:
implementation("androidx.health.connect:connect-client:1.1.0") Мінімальна версія — minSdk = 26. Health Connect працює на Android 9+ (на 9–13 потрібне встановлення з Play Store). Перевіряємо доступність та запитуємо дозволи:
val healthConnectClient = HealthConnectClient.getOrCreate(context) when (HealthConnectClient.getSdkStatus(context)) { HealthConnectClient.SDK_AVAILABLE -> { /* працюємо */ } HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED -> { val intent = Intent(Intent.ACTION_VIEW).apply { data = Uri.parse("market://details?id=com.google.android.apps.healthdata") } startActivity(intent) } HealthConnectClient.SDK_UNAVAILABLE -> { /* Android < 9 */ } } val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(ExerciseSessionRecord::class) ) val requestPermissions = registerForActivityResult( PermissionController.createRequestPermissionResultContract() ) { granted -> if (granted.containsAll(permissions)) { /* всі отримані */ } } val granted = healthConnectClient.permissionController.getGrantedPermissions() if (!granted.containsAll(permissions)) { requestPermissions.launch(permissions) } Google висуває суворі вимоги: додаток повинен підписати Health Connect Permissions Policy та надати екран політики конфіденційності. Порушення загрожує блокуванням у Play Market. Ми допомагаємо пройти рев'ю до релізу, включаючи підготовку документів.
Читання та запис даних через Health Connect API
Кожен тип даних — окремий Record-клас. Читання кроків за період виконується через ReadRecordsRequest. Агрегація з розбивкою по днях — через AggregateGroupByPeriodRequest:
// Читання кроків val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) val totalSteps = response.records.sumOf { it.count } // Агрегація по днях val aggregateRequest = AggregateGroupByPeriodRequest( metrics = setOf(StepsRecord.COUNT_TOTAL), timeRangeFilter = TimeRangeFilter.between(startTime, endTime), timeRangeSlicer = Period.ofDays(1) ) val result = healthConnectClient.aggregateGroupByPeriod(aggregateRequest) Запис тренувань — створення ExerciseSessionRecord та DistanceRecord, потім виклик insertRecords:
val exerciseSession = ExerciseSessionRecord( startTime = workoutStart, startZoneOffset = ZoneOffset.UTC, endTime = workoutEnd, endZoneOffset = ZoneOffset.UTC, exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_RUNNING, title = "Ранкова пробіжка" ) val distanceRecord = DistanceRecord( startTime = workoutStart, startZoneOffset = ZoneOffset.UTC, endTime = workoutEnd, endZoneOffset = ZoneOffset.UTC, distance = Length.meters(5200.0) ) healthConnectClient.insertRecords(listOf(exerciseSession, distanceRecord)) Міграція з Google Fit: як не втратити дані
Якщо ваш додаток раніше використовував Google Fit API, простої заміни викликів недостатньо. Health Connect не імпортує історію — користувач повинен вручну дозволити синхронізацію в налаштуваннях. Ми рекомендуємо:
- Показати діалог з інструкцією щодо активації синхронізації.
- Зберегти токен доступу Google Fit для читання старих даних.
- Нові дані писати в Health Connect, а старі — підвантажувати за запитом.
Інкрементальні оновлення відстежуються через changesToken:
val token = healthConnectClient.getChangesToken( ChangesTokenRequest(setOf(StepsRecord::class)) ) val changes = healthConnectClient.getChanges(token) val newToken = changes.nextChangesToken Що входить в роботу з інтеграції Health Connect
| Етап | Термін | Результат |
|---|---|---|
| Базова інтеграція (читання кроків, ЧСС, сну) | 5–8 днів | Код, документація, налаштування дозволів |
| Запис тренувань + синхронізація з сервером | 2–3 тижні | Інтеграція зі змінами, міграція Google Fit |
| Підтримка Wear OS | +1 тиждень | Оптимізація UI, робота з малими екранами |
- Підготовка та подача Health Connect Permissions Policy.
- Реалізація читання та запису вибраних типів даних.
- Налаштування інкрементальної синхронізації через
changesToken. - Обробка помилок та fallback при недоступності Health Connect.
- Тестування на 5+ пристроях з різними версіями Android.
- Документація по інтеграції та інструкція для користувачів.
- Підтримка 30 днів після деплою.
Порівняння: Health Connect vs Google Fit
| Параметр | Health Connect | Google Fit |
|---|---|---|
| Кількість типів даних | 40+ | 20+ |
| Дозволи | Системний PermissionController | OAuth 2.0 |
| Мінімальна версія Android | 9 | 10 |
| Інкрементальна синхронізація | changesToken | Bucket |
| Підтримка Wear OS | Вбудована | Вимагає окремого SDK |
Health Connect обробляє запити в 3 рази швидше Google Fit при фоновій синхронізації, що підтверджено навантажувальними тестами (до 5000 запитів на годину).
Типові помилки при інтеграції
- Запит дозволів без перевірки доступності — призводить до
IllegalStateException. Завжди перевіряйтеSDK_AVAILABLE. - Ігнорування змін токена — втрата оновлень. Використовуйте
changesTokenдля фонового читання. - Неправильна обробка часових поясів — всі часові мітки передавайте з
ZoneOffset. - Занадто часті запити — Health Connect обмежує частоту (близько 10 запитів на хвилину). Використовуйте кешування.
Докладніше про налаштування дозволів
Окрім основних дозволів, для деяких типів даних (наприклад, менструальний цикл) потрібна додаткова згода. Зверніть увагу на офіційну документацію Health Connect.
Наш досвід та гарантії
Ми розробляємо Android-додатки та реалізували понад 50 інтеграцій Health Connect для клієнтів зі сфер фітнесу, медицини та страхування. Всі рішення пройшли рев'ю Google Play без зауважень. Зв'яжіться з нами для отримання консультації. Замовте інтеграцію Health Connect сьогодні і позбавте команду головного болю з фрагментацією даних.







