Использование Core Motion для реализации отслеживания шагов в фитнес-приложениях
Table of Contents
Понимание роли основного движения в отслеживании шагов
Основой для создания точных, эффективных по отбору шагов функций в фитнес-приложениях iOS является Core Motion. Абстрагируя сложности необработанных данных датчиков из акселерометра, гироскопа и педометра, Core Motion предоставляет унифицированный API, который позволяет разработчикам сосредоточиться на пользовательском опыте, а не на обработке сигналов низкого уровня. Современные фитнес-приложения полагаются на Core Motion для предоставления подсчета шагов в реальном времени и исторических оценок расстояния и даже классификаций активности - все при уважении конфиденциальности пользователей и производительности устройства.
В основе отслеживания шагов лежит класс CMPedometer, который раскрывает данные о шагах, расстоянии, темпе и каденции, не требуя от разработчиков прямой интерпретации форм волн акселерометра. Это упрощает реализацию и обеспечивает согласованность в различных моделях iPhone и Apple Watch. Независимо от того, создаете ли вы специальное приложение для отслеживания шагов или добавляете мониторинг активности к более широкой платформе, ориентированной на здоровье, Core Motion предлагает инструменты для предоставления надежных данных педометра, которым пользователи могут доверять.
Основные компоненты для отслеживания шагов и активности
CMPedometer - основной интерфейс отслеживания шагов
Класс CMPedometer является компонентом для получения данных шагов в приложениях iOS. Он обеспечивает как живые обновления, так и возможности исторического запроса. Ключевые свойства включают , , , , и /. Эти метрики позволяют разработчикам предоставлять пользователям подробную информацию о деятельности.
Перед использованием CMPedometer необходимо проверить наличие с . В то время как почти все современные устройства iOS поддерживают подсчет шагов, старые модели или Apple Watch без встроенного педометра могут вернуться . Надежная реализация изящно обработает такие случаи и обеспечит соответствующий запасной вариант или отключит функцию.
CMMotionManager - доступ к датчикам для расширенных вариантов использования
Хотя CMPedometer достаточен для большинства потребностей в отслеживании шагов, CMMotionManager предоставляет разработчикам доступ к акселерометру, гироскопу и магнитометру устройства. Это может быть полезно для пользовательских алгоритмов обнаружения шагов, необычного анализа походки или когда вам нужно комбинировать данные шага с показаниями ориентации. Однако, поскольку постоянно работающий CMMotionManager может разряжать батарею, его лучше всего зарезервировать для коротких всплесков или в качестве дополнения к CMPedometer, когда требуются высокоточные исходные данные.
Обратите внимание, что CMMotionManager не вычисляет автоматически количество шагов; вы должны реализовать свою собственную логику фильтрации и подсчета с использованием необработанных значений ускорения. Этот подход является более сложным и обычно оправданным только в том случае, если вам нужно настроить чувствительность или обнаружить шаги в сценариях без ходьбы (например, использование инвалидной коляски).
Уничтожение CMStepCounter и миграция
Более ранние версии iOS использовали для отслеживания шагов, но этот класс был исключен в iOS 13. Все новые разработки должны использовать CMPedometer исключительно. Если вы поддерживаете унаследованный код, миграция включает замену вызовов эквивалентными методами. Различия API незначительны: становится , и становится . Модель данных по существу та же, что и миграция.
Реализация рабочего процесса Step Tracking
Проверка доступности и запрос разрешений
Каждая реализация отслеживания шагов должна начинаться с проверки аппаратного обеспечения и поддержки системы. Используйте статический метод , чтобы убедиться, что устройство может предоставить данные шага. Если шаги недоступны, отобразите четкое объяснение пользователю и отключите соответствующие элементы пользовательского интерфейса.
Конфиденциальность пользователя имеет решающее значение: Core Motion автоматически запрашивает разрешение у пользователя при первой попытке вашего приложения получить доступ к данным о движении. Вы должны включить ключ в файл , предоставляя краткое объяснение того, почему вашему приложению нужны данные о движении. Без этого ключа система откажет в доступе, и ваши звонки будут отключаться. Для интеграции HealthKit (см. более поздний раздел), вам также нужен ключ .
Обновление педометра в реальном времени
Для получения обновлений в режиме реального времени позвоните по телефону . Параметр обычно является текущей датой и временем. Блок обработчика вызывается каждый раз, когда доступны новые данные о шагах. Внутри обработчика всегда сначала проверяйте ошибки - например, если пользователю отказано в разрешении, ошибка будет содержать или аналогичный. Затем безопасно откручивайте объект и обновляйте свой пользовательский интерфейс или модель данных.
Общим шаблоном является создание экземпляра в качестве свойства вашего класса контроллера или менеджера просмотра и запуск обновлений при появлении соответствующего экрана.
let pedometer = CMPedometer()
pedometer.startUpdates(from: Date()) { (data, error) in
guard let data = data, error == nil else { return }
DispatchQueue.main.async {
self.stepCountLabel.text = "\(data.numberOfSteps) steps"
}
}
Обновления в реальном времени идеально подходят для создания счетчиков шагов в реальном времени или интеграции с сеансами тренировки. Однако они могут быть энергоемкими, если их не оставлять на неопределенный срок. Обязательно прекратите обновления, когда пользователь переходит от просмотра отслеживания или когда приложение входит в фон (если у вас нет фоновой возможности).
Историческая информация шаг
В дополнение к живым обновлениям, CMPedometer может извлекать подсчеты шагов для любого диапазона времени с использованием . Это полезно для отображения ежедневных, еженедельных или ежемесячных резюме. Запрос выполняется асинхронно и возвращает агрегированные данные за указанный период. Обратите внимание, что система может ограничивать гранулярность исторических данных, особенно для дат далекого прошлого, и свойство расстояния может быть недоступно, если сопроцессор движения устройства не был активен.
Чтобы избежать узких мест производительности, ограничьте запросы до разумных временных окон (например, не более недели за раз) и кэшируйте результаты, если ваше приложение часто показывает исторические диаграммы.
Остановка обновлений для сохранения жизни батареи
Всегда звоните на свой педометр, когда вам больше не нужны живые данные. Неспособность остановить обновления может истощить батарею и привести к жалобам пользователей. Связать жизненный цикл обновления с методами просмотра контроллера просмотра, которые исчезнут или исчезнут. Для приложений, которые требуют постоянного отслеживания в фоновом режиме (например, трекер ходьбы), включить и рассмотреть возможность использования в сочетании с режимами выполнения фона. Обратите внимание, что обновления Core Motion не требуют, чтобы приложение было на переднем плане, но система по-прежнему накладывает ограничения на сохранение батареи.
Обработка ошибок и Edge Cases
Совместимость устройств и калибровка датчиков движения
Не все устройства iOS имеют одинаковые возможности восприятия движения. iPhone 5s и позже включает в себя сопроцессор движения Apple M-серии, который выгружает вычисления педометров с основного процессора, но точное поведение может отличаться. Например, iPhone SE (1-го поколения) поддерживает подсчет шагов, в то время как iPod touch (6-го поколения) не. Всегда проверяйте доступность и тестируйте на нескольких семействах устройств.
Датчики движения иногда требуют калибровки. Core Motion обрабатывает это автоматически, но первые несколько обновлений после перезагрузки устройства могут быть немного менее точными. На практике это редко заметно, но следует избегать отбрасывания данных, которые немного отклоняются от ожидаемых значений. Вместо этого доверяйте встроенным фильтрам платформы.
Управление прерываниями и фоновыми обновлениями
Если ваше приложение уходит в фоновом режиме, Core Motion может временно приостановить обновления. При предварительном запуске вам нужно будет перезапустить обновления педометра. Чтобы обеспечить бесшовный опыт, запросите последнюю известную точку данных от метки времени, сохраненной до прерывания, и позвоните , чтобы заполнить пробел. Этот подход гарантирует, что никакие шаги не будут потеряны, пока приложение было неактивным.
Для приложений-компаньонов watchOS данные педометра автоматически синхронизируются через сопроцессор движения Apple Watch, но ваше приложение iOS должно явно запрашивать собственный педометр устройства - он не автоматически получает шаги, записанные на часах. интеграция HealthKit (обсуждается позже) решает эту проблему синхронизации.
Лучшие практики для производительности и конфиденциальности
Оптимизация батареи и обработка накладных расходов
Чтобы минимизировать разрядку аккумулятора, следуйте этим рекомендациям:
- Используйте CMPedometer вместо CMMotionManager для подсчета шагов; педометр аппаратно оптимизирован.
- Запуск обновлений только тогда, когда пользователь явно включает отслеживание шагов или начинает тренировку.
- Немедленно прекратите обновления, когда экран отслеживания исчезнет или тренировка закончится.
- Для пассивного подсчета шагов (например, всегда на шаге), рассмотрите возможность использования HealthKit для чтения шагов, записанных системой - собственный педометр системы эффективно работает в фоновом режиме.
- Нажмите на исторические данные локально, чтобы избежать повторных запросов в течение одного и того же временного диапазона.
Соблюдение конфиденциальности и обработка данных
Данные шага считаются конфиденциальной информацией о здоровье. Apple применяет строгие правила конфиденциальности:
- Всегда включайте строку ; неспособность сделать это приводит к тому, что диалог разрешения не появляется.
- Никогда не делитесь данными о шагах со сторонней аналитикой или рекламными сетями без явного согласия пользователя.
- Если вы храните данные шага на сервере, зашифровайте их в пути и в покое и предоставьте пользователям возможность удалить свои данные.
- Уважайте решение пользователя отозвать разрешение; ваше приложение должно обрабатывать ошибку изящно и отключать функции отслеживания шагов.
Интеграция с Apple Health через HealthKit
Чтение и написание данных шагов для HealthKit
Для комплексного фитнес-решения объедините Core Motion с HealthKit. В то время как Core Motion предоставляет данные в режиме реального времени, HealthKit служит централизованным хранилищем для всех показателей здоровья. Вы можете читать подсчеты шагов, написанные другими приложениями или самой системой, и вы можете записывать свои собственные данные шагов в HealthKit, чтобы поделиться с записью о здоровье пользователя.
Чтобы написать шаги, создайте типа и сохраните его с помощью . Всегда запрашивайте авторизацию, позвонив вблизи запуска приложения. Имейте в виду, что разрешения Core Motion и HealthKit должны предоставляться отдельно.
Сохранение синхронизированных данных Step
При чтении исторических шагов вы можете использовать HealthKit для суммирования шагов за период. Это может служить в качестве резервного копия, если запросы CMPedometer не срабатывают или если вы хотите объединить данные шагов с Apple Watch. Чтобы избежать двойного учета, примите стратегию: либо полагайтесь на Core Motion для долгосрочного хранения в режиме реального времени и HealthKit, либо всегда читайте из HealthKit и игнорируйте исторические запросы Core Motion. Большинство приложений для здоровья выбирают последний для согласованности на разных устройствах.
Улучшение отслеживания шагов
Классификация активности с основным движением
Core Motion's может классифицировать текущее состояние движения пользователя - например, стационарное, ходьба, бег, езда на велосипеде или вождение. Объединение этого с данными шага позволяет вашему приложению представлять контекстно-осведомленную обратную связь, такую как «Вы шли в течение 10 минут» против «Вы все еще ездите на велосипеде». Используйте метод и сопоставьте тип активности с данными педометра для более богатой аналитики.
Метрики скорости и каденции из данных педометра
Свойства и в обеспечивают мгновенные показатели ходьбы или бега. Скорость оценивается в секундах на метр, а каденция — количество шагов в секунду. Эти значения полезны для построения приборных панелей, которые показывают текущую интенсивность тренировки пользователя. Обратите внимание, что эти свойства могут быть нулевыми, когда устройство не может их надежно оценить (например, когда пользователь движется очень медленно).
Объединение данных акселерометра для точности шага
Если вы обнаружите, что встроенные фильтры CMPedometer пропускают шаги во время определенных действий (например, подъем по лестнице с поручнями), вы можете дополнить его необработанными данными акселерометра из . Реализуйте простой алгоритм обнаружения шагов с использованием фильтра низкого прохода на величине ускорения и пороге обнаружения пика. Однако педометр Apple должен быть достаточно точным для подавляющего большинства случаев использования - сырая обработка датчиков редко необходима.
Реальные-мировые соображения и тестирование
Тестирование на различных моделях iPhone и версиях iOS
Поведение отслеживания шагов может варьироваться на разных устройствах.Проверьте приложение по крайней мере на этих конфигурациях:
- iPhone 6s или старше (без сопроцессора M9? На самом деле все iPhone 5s и более поздние имеют сопроцессоры движения, но более старые могут иметь менее точные данные).
- iPhone 8 или более поздний (новые сопроцессоры).
- iPhone с iOS 13+ (обеспечивает новейший API)
- iPad (некоторые модели iPad имеют педометры, но многие нет).
Используйте консоль на устройстве для регистрации сообщений об ошибках и проверки правильности проверки доступности. Рассмотрите возможность использования аппаратного теста (например, 100 шагов, подсчитанных вручную) для проверки вывода вашего приложения.
Проверка шага подсчета точности
Чтобы установить ожидания пользователей, опубликуйте типичный диапазон точности (например, «точность варьируется от устройства, но типичная ошибка находится в пределах 5%»). Во время разработки сравните количество шагов вашего приложения с известным хорошим базовым уровнем, таким как встроенное приложение Health. Для регрессионного тестирования автоматизируйте ходьбу с помощью таблицы встряхивания (если таковая имеется) или используйте последовательности ручного тестирования.
Создание готового шага-трекера с основным движением
Внедрение отслеживания шагов с Core Motion - это простой процесс, когда вы следуете рекомендациям Apple. Начните с CMPedometer для подсчета шагов, добавьте CMMotionActivityManager для контекста, интегрируйте с HealthKit для долгосрочного хранения и синхронизации с межустройством и всегда уважайте конфиденциальность пользователей. Тест на нескольких семействах устройств и версиях iOS для обеспечения последовательного поведения.
Для дальнейшего чтения, обратитесь к официальной документации Apple:
- Core Motion Framework — обзор и ссылка.
- Справочник класса CMPedometer — подробные описания API.
- HealthKit Framework — интеграция данных шагов с базой данных о здоровье.
- CMMotionActivityManager — классификация активности.
- Обеспечение доступности шагов — документация для проверки аппаратной поддержки.
Используя оптимизированные API Core Motion и придерживаясь лучших практик Apple, вы можете обеспечить точный, удобный для батареи и уважительный подход к конфиденциальности пользователей - критическую комбинацию для любого успешного фитнес-приложения.