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







