Створення фітнес-трекера під iOS та Android
Фітнес-застосунок — це не просто лічильник кроків і красиві графіки. За кожним датчиком — окремий API з обмеженнями по частоті опитування, політиками фонового доступу та дозволами, які Apple та Google посилюють з кожним релізом. Ми розробляємо нативні фітнес-трекери під iOS та Android, які коректно працюють з CoreMotion, HealthKit, Google Fit та Health Connect одночасно — значно складніше більшості інших мобільних категорій. Оцінимо ваш проєкт за 1 день — зв'яжіться з нами для консультації.
Як працює фітнес-трекер на iOS та Android?
Які датчики та навіщо
| Датчик | iOS API | Android API | Типова частота | Споживання енергії (за годину) |
|---|---|---|---|---|
| Акселерометр | CMMotionManager | SensorManager (TYPE_ACCELEROMETER) | 50–100 Гц | 15–20% при 100 Гц |
| Гіроскоп | CMMotionManager | SensorManager (TYPE_GYROSCOPE) | 50–100 Гц | 12–18% при 100 Гц |
| Барометр | CMAltimeter | SensorManager (TYPE_PRESSURE) | 1–10 Гц | 3–5% |
| Крокомір | CMPedometer | StepCounterSensor / Health Connect | Акумулятивно | < 5% |
| Пульс | HealthKit (від Watch) | Health Connect | По події | < 2% |
| GPS | CLLocationManager | FusedLocationProviderClient | 1 Гц для трекінгу | 30–40% при постійному трекінгу |
Високочастотне опитування акселерометра (100 Гц) у фоні — прямий шлях до розряду батареї за 3–4 години. На iOS CMMotionManager.startDeviceMotionUpdates() з UIBackgroundModes: processing та BGProcessingTask дозволяє робити батчеву обробку, але фонове виконання обмежене 30 секундами. На Android WorkManager з ExpeditedWork або Foreground Service з типом FOREGROUND_SERVICE_TYPE_HEALTH. Використання системного крокоміра CMPedometer знижує енергоспоживання на 40% порівняно з власним алгоритмом.
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 — точність розпізнавання досягає 95%.
Трекінг 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 використовувати
BGAppRefreshTaskдля синхронізації статистики (не для самого трекінгу) - Кешувати дані локально в SQLite / Core Data, синхронізувати з сервером батчами по завершенню тренування
-
CMPedometerтаStepCounterSensor— системні крокоміри, вони працюють на рівні ОС без нашої участі, дані тільки читаємо
Системний крокомір CMPedometer в 3 рази швидший за власний алгоритм і споживає на 60% менше енергії. Наш досвід 10+ років у мобільній розробці дозволяє вибрати оптимальне поєднання API для кожного завдання.
Інтеграція з платформними сховищами здоров'я
На iOS всі записи тренувань потрібно зберігати через HKWorkout у HealthKit. Без цього застосунок не з'явиться в «Здоров'я» і користувачі сприймуть це як баг. HKWorkoutBuilder — правильний шлях: дозволяє додавати семпли (ЧСС, дистанція, калорії) по ходу тренування, а не пачкою в кінці. HKWorkoutRoute — зберігає GPS-трек, пов'язаний з тренуванням.
На Android — Health Connect (androidx.health.connect.client). Пишемо ExerciseSessionRecord з типом активності, DistanceRecord, TotalCaloriesBurnedRecord. Важливо: Health Connect вимагає ліцензійної угоди з Google і окремого review при публікації в Play Store, якщо застосунок читає медичні дані. Більше 50 наших проєктів пройшли цей процес.
Що ви отримуєте
В результаті ви отримуєте повністю робочий застосунок під ключ:
- Вихідний код на Swift/Kotlin/Dart з коментарями
- Документацію з API та архітектури
- Доступи до облікових записів розробника App Store та Google Play
- Інтеграцію з HealthKit/Health Connect та Google Fit
- Налаштування push-сповіщень через APNs/FCM
- Підтримку 3 місяці після релізу
- Навчання вашої команди роботі з кодом
Типові помилки при розробці фітнес-трекерів
- Ігнорування політик App Store Review щодо використання HealthKit — призводять до відхилення застосунку
- Відсутність graceful degradation при втраті GPS-сигналу — користувач бачить розірваний трек
- Надмірно часте опитування датчиків у фоні — батарея розряджається за 2–3 години
- Неправильна обробка дозволів (Away/Always) — застосунок крашиться або не працює у фоні
- Відсутність синхронізації з системними сховищами здоров'я — користувачі скаржаться на неповні дані
Кожна з цих помилок була нами виправлена в реальних проєктах. Ми гарантуємо, що ваш застосунок пройде рев'ю і не буде відхилений з цих причин.
Терміни та вартість
Застосунок з базовими активностями (ходьба, біг, велосипед), GPS-трекінгом, HealthKit/Health Connect та статистикою — 8–14 тижнів. З кастомними алгоритмами детекції активності, ML-класифікацією та соціальними функціями — від 4 місяців. Вартість розраховується індивідуально на основі ваших вимог. Отримайте консультацію та точну оцінку — зв'яжіться з нами.







