Розробка мобільного приложення для фітнес-трекера
Фітнес-приложення — це не просто лічильник шагів та красиві графіки. За кожним датчиком — окремий API з обмеженнями по частоті опросу, політиками фонового доступу та дозволами, які Apple та Google ускладнюють з кожним релізом. Нативне приложення, яке правильно працює з CoreMotion, HealthKit, Google Fit та Health Connect одночасно — суттєво складніше більшості інших мобільних категорій.
Ключові технічні рішення
Які датчики та чому
| Датчик | iOS API | Android API | Типова частота |
|---|---|---|---|
| Акселерометр | CMMotionManager | SensorManager (TYPE_ACCELEROMETER) | 50–100 Гц |
| Гіроскоп | CMMotionManager | SensorManager (TYPE_GYROSCOPE) | 50–100 Гц |
| Барометр | CMAltimeter | SensorManager (TYPE_PRESSURE) | 1–10 Гц |
| Шагомер | CMPedometer | StepCounterSensor / Health Connect | Кумулятивно |
| Пульс | HealthKit (від Watch) | Health Connect | По события |
| GPS | CLLocationManager | FusedLocationProviderClient | 1 Гц для трекування |
Високочастотний опрос акселерометра (100 Гц) у фоне — прямий шлях до розряду батареї за 3–4 години. На iOS CMMotionManager.startDeviceMotionUpdates() з UIBackgroundModes: processing та BGProcessingTask дозволяє робити батчеву обробку, але фоновое виконання обмежено 30 секундами. На Android WorkManager з ExpeditedWork або Foreground Service з типом FOREGROUND_SERVICE_TYPE_HEALTH.
CoreMotion та детекція активності
CMMotionActivityManager.startActivityUpdates() дає готові активності: walking, running, cycling, automotive, stationary. Це краще, ніж самостійно аналізувати акселерометр для більшості завдань. Але є нюанс: класифікація приходить з затримкою 5–30 секунд (iOS усереднює дані) та працює тільки при дозволі CMMotionActivityManager.isActivityAvailable() — на деяких iPod Touch ця функція недоступна.
Для власного алгоритму детекції кроку з акселерометра: пік вертикального прискорення (вісь Y) з порогом > 1.2g при частоті 50 Гц. Між двома піками мінімальний інтервал 300 мс (частота кроку не вище ~3.3 Гц). Це базова реалізація. Точний алгоритм враховує розташування телефону (в кармані/в руці/в рюкзаку) через класифікатор на CoreML або TensorFlow Lite.
Трекування GPS-маршруту
CLLocationManager з desiredAccuracy: kCLLocationAccuracyBest у фоне потребує дозволу Always та UIBackgroundModes: location. Без цього після 10–15 секунд фону оновлення припиняються. На Android FusedLocationProviderClient з LocationRequest.PRIORITY_HIGH_ACCURACY в Foreground Service.
Проблема: міський каньйон та тунелі — GPS втрачається, трек розривається. Рішення: при horizontalAccuracy > 30 м — не записувати точку. Dead reckoning на основі акселерометра/гіроскопа на час втрати сигналу — складніше, але дає безперервний трек.
Запис трека у форматі GPX: стандартний XML, кожна точка — <trkpt lat="..." lon="..."> з <ele> та <time>. Експорт/імпорт GPX — стандарт де-факто для сумісності з Garmin, Strava, Komoot.
Інтеграція з платформенними хранилищами здоров'я
На iOS всі записи тренувань потрібно зберігати через HKWorkout в HealthKit. Без цього приложення не з'явиться в «Здоров'ї» та користувачі сприйматимуть це як баг. HKWorkoutBuilder — правильний шлях: додавати семпли (ЧСС, дистанція, калорії) під час тренування, а не пачкою в кінці. HKWorkoutRoute — зберігає GPS-трек, пов'язаний з тренуванням.
На Android — Health Connect (androidx.health.connect.client). Пишемо ExerciseSessionRecord з типом активності, DistanceRecord, TotalCaloriesBurnedRecord. Важливо: Health Connect потребує ліцензійної угоди з Google та окремого review при публікації в Play Store якщо приложення читає медичні дані.
Фоновое виконання та батарея
Найскладніше у фітнес-приложенні — коректна робота у фоне без убивства батареї. Принципи:
- Не тримати високочастотний сенсор активним весь час — включати тільки під час активної тренування
- На iOS використовувати
BGAppRefreshTaskдля синхронізації статистики (не самого трекування) - Кешувати дані локально в SQLite / Core Data, синхронізувати з сервером батчами по завершенню тренування
-
CMPedometerтаStepCounterSensor— системні шагомери, вони працюють на рівні ОС без нашої участі, дані тільки читаємо
Терміни
Приложення з базовими активностями (ходьба, біг, велосипед), GPS-трекингом, HealthKit/Health Connect та статистикою — 8–14 тижнів. З кастомними алгоритмами детекції активності, ML-класифікацією та соціальними функціями — від 4 місяців. Оцінка після аналізу вимог до датчиків та платформ.







