Почему 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 сегодня и избавьте команду от головной боли с фрагментацией данных.







