Реалізація трекінгу сну через мобільний застосунок

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація трекінгу сну через мобільний застосунок
Середній
~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

Реалізація трекінгу сну через мобільне приложення

Трекінг сну на телефоні без носимого — це акселерометр під подушкою або матрацом. З носимим — ЧСС + акселерометр для класифікації фаз. Обидва підходи працюють, але мають принципово різні точності та технічні складності.

Без носимого: акселерометр як датчик руху

Класика — телефон кладуть рядом на матрац. Рухи тіла під час сну передаються через матрац до телефону. Завдання: класифікувати періоди руху (неспокійний сон, пробудження) та спокою (глибокий/легкий сон).

Алгоритм:

  1. Записуємо акселерометр на 10 Гц (батарейно-оптимально, достатньо для детекції рухів тіла)
  2. Кожні 30 секунд — епоха: рахуємо activity_count = sum(|delta_x| + |delta_y| + |delta_z|) за епоху
  3. Класифікація: activity_count < threshold → SLEEP, > threshold → WAKE
  4. Паттерни з N епох → визначаємо початок та кінець сну

Поріг активності підбирається емпірично — залежить від розташування телефону, жорсткості матраца. Тому перші 3–7 ночей — калібрування через feedback («я заснув о 23:15, дані верні?»).

Точність визначення фаз сну (REM/N1/N2/N3) — нижче 60% без ЧСС. Тільки рухи — це грубе ділення на «спокійний/неспокійний». Якщо продукт претендує на медичний клас — потрібен носимий датчик.

З носимим: HealthKit Sleep / Health Connect Sleep

iOS + Apple Watch:

Apple Watch автоматично записує сон через власні алгоритми (акселерометр + ЧСС + температура шкіри на Series 8+). Результат — в HealthKit як HKCategoryValueSleepAnalysis:

let sleepType = HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!

let query = HKSampleQuery(
    sampleType: sleepType,
    predicate: HKQuery.predicateForSamples(withStart: startDate, end: endDate),
    limit: HKObjectQueryNoLimit,
    sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)]
) { _, samples, _ in
    guard let samples = samples as? [HKCategorySample] else { return }
    samples.forEach { sample in
        switch sample.value {
        case HKCategoryValueSleepAnalysis.asleepCore.rawValue:
            // N1/N2 — легкий сон (watchOS 9+)
        case HKCategoryValueSleepAnalysis.asleepDeep.rawValue:
            // N3 — глибокий сон
        case HKCategoryValueSleepAnalysis.asleepREM.rawValue:
            // REM
        case HKCategoryValueSleepAnalysis.awake.rawValue:
            // Пробудження
        default: break
        }
    }
}

До watchOS 9 була тільки inBed та asleep — без фаз. Якщо приложение повинне показувати фази сну від Apple Watch — мінімум iOS 16 / watchOS 9.

Android + Health Connect:

val response = healthConnectClient.readRecords(
    ReadRecordsRequest(
        recordType = SleepSessionRecord::class,
        timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
    )
)

response.records.forEach { session ->
    val duration = Duration.between(session.startTime, session.endTime)
    session.stages.forEach { stage ->
        when (stage.stage) {
            SleepSessionRecord.STAGE_TYPE_DEEP -> { /* глибокий */ }
            SleepSessionRecord.STAGE_TYPE_REM -> { /* REM */ }
            SleepSessionRecord.STAGE_TYPE_LIGHT -> { /* легкий */ }
            SleepSessionRecord.STAGE_TYPE_AWAKE -> { /* пробудження */ }
        }
    }
}

Запис сну (власні дані)

Якщо приложення саме аналізує сон (через акселерометр телефону):

iOS — запис в HealthKit:

let sleepSample = HKCategorySample(
    type: HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!,
    value: HKCategoryValueSleepAnalysis.asleepCore.rawValue,
    start: phaseStart,
    end: phaseEnd
)
healthStore.save(sleepSample) { success, error in }

Розумний будильник

Фішка більшості трекерів сну — будити в «легку» фазу в пределах вікна (наприклад, ±30 мін від бажаного часу). Реалізація на телефоні: приложение активно у фоні, аналізує акселерометр, при виявленні активності у вікні будильника — спрацьовує через UNUserNotificationCenter (iOS) або AlarmManager.setAlarmClock() (Android).

AlarmManager.setAlarmClock() — єдиний будильник на Android, який гарантовано спрацьовує при суворому режимі економії батареї (Doze mode). Звичайні setExact() та setAlarmClock() можуть затриматися на кілька хвилин.

Типові помилки

  • Не враховувати розрив сну (людина встала ночі на 20 хвилин) — алгоритм розбиває одну сесію на дві
  • Забути про літній/зимовий час — часові мітки в UTC, переклад у локальний час тільки для відображення
  • Не фільтрувати «сон» тривалістю < 30 хвилин — дневний відпочинок або помилки класифікації попадають у статистику

Терміни

Базовий трекер з акселерометром та будильником — 3–5 тижнів. З інтеграцією HealthKit/Health Connect, фазами сну та аналітикою за період — 6–10 тижнів.