Інтеграція Google Fit для доступу до даних здоров'я в Android

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція Google Fit для доступу до даних здоров'я в Android
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція Google Fit для доступу до даних здоров'я в Android

Google Fit API існує з 2014 року та сьогодні перебуває в стані «працює, але краще мігрувати на Health Connect». Google офіційно рекомендує переходити на Health Connect для нових проектів. Все ж таки, Google Fit залишається актуальним для пристроїв на Android 8–13 без підтримки Health Connect, для Wear OS-приложень та для проектів з існуючою базою користувачів. Розглянемо обидва підходи.

Google Fit REST API проти Fitness API

Дві принципово різні точки входу:

Android Fitness API (com.google.android.gms:play-services-fitness) — нативний Java/Kotlin SDK, працює через Google Play Services, потребує OAuth 2.0-аккаунт Google.

Google Fit REST API — HTTP API, підходить для серверної сторони та Flutter/React Native, але потребує власного керування OAuth токенами.

Для нативного Android — завжди Fitness API. REST має смисл тільки якщо дані потрібні на бекенді без участі мобільного пристрою.

Дозволи та OAuth: головний источник проблем

Google Fit потребує двох рівнів дозволів:

  1. Android-дозвіл: android.permission.ACTIVITY_RECOGNITION (Android 10+)
  2. OAuth scope: FITNESS_ACTIVITY_READ, FITNESS_BODY_READ, FITNESS_LOCATION_READ та ін.

Запросити Android-дозвіл, але не отримати OAuth scope — Fitness API повертає порожні дані без помилки. Це мовчазний сбій, який складно відловити.

val fitnessOptions = FitnessOptions.builder()
    .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
    .addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_READ)
    .build()

val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)

if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
    GoogleSignIn.requestPermissions(
        this,
        GOOGLE_FIT_REQUEST_CODE,
        account,
        fitnessOptions
    )
}

Якщо користувач відозве дозвіл через налаштування Google-аккаунту (не через Android Settings), hasPermissions() повертає false при наступному запуску. Це потрібно обробляти — без retry-логіки приложение просто перестане отримувати дані.

Читання даних: HistoryClient та SensorsClient

Історичні дані (кроки, калорії)

val readRequest = DataReadRequest.Builder()
    .read(DataType.TYPE_STEP_COUNT_DELTA)
    .aggregate(DataType.AGGREGATE_STEP_COUNT_DELTA)
    .bucketByTime(1, TimeUnit.DAYS)
    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
    .build()

Fitness.getHistoryClient(context, account)
    .readData(readRequest)
    .addOnSuccessListener { response ->
        response.buckets.forEach { bucket ->
            val steps = bucket.dataSets
                .flatMap { it.dataPoints }
                .sumOf { it.getValue(Field.FIELD_STEPS).asInt() }
        }
    }

bucketByTime — ключовий метод для агрегації. Без нього запит повертає кожний крок від кожного джерела (телефон + часи + браслет), що може бути кілька тисяч записів за день.

Дані в реальному часі

SensorsClient для підписи на живі дані:

Fitness.getSensorsClient(context, account)
    .add(SensorRequest.Builder()
        .setDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
        .setSamplingRate(10, TimeUnit.SECONDS)
        .build(),
        onDataPointListener
    )

Цей підписчик активний тільки пока приложення на передньому плані. Для фонового трекінгу — RecordingClient.subscribe(), який Google Fit акумулює сам.

Дедуплікація даних з кількох джерел

Це реальна біль: у користувача Apple Watch (через Health) + Google Fit на Android телефоні + Samsung Health — кроки задваиваються та страиваються. Google Fit частково вирішує це через DataSet.getDataSources() — у кожної точки даних є джерело (DataSource). Фільтрація по DataSource.DEVICE дозволяє брати дані тільки від конкретного пристрою.

Повністю надійної дедуплікації немає — це відома проблема екосистеми. Документуємо клієнту очікувані розбіжності та будуємо UI так, щоб користувач міг вибрати приоритетний источник.

Міграція на Health Connect

Для нових пристроїв (Android 14+) Google Fit deprecated на рівні рекомендацій. Стратегія: перевіряємо доступність Health Connect, якщо доступний — використовуємо його, fallback на Google Fit для старих пристроїв:

val healthConnectAvailable = HealthConnectClient.getSdkStatus(context) ==
    HealthConnectClient.SDK_AVAILABLE

Терміни

Базова інтеграція Google Fit (кроки, дистанція, калорії) — 4–7 робочих днів. З підтримкою Health Connect, дедупліцюванням та Wear OS — 2–4 тижні.