SleepTrackingManager

1. Create manager

Asleep.createSleepTrackingManager()

var config: Asleep.Config?
let delegate: AsleepSleepTrackingManagerDelegate = self
var manager: Asleep.SleepTrackingManager?

if let config {
    manager = Asleep.createSleepTrackingManager(config: config,
                                                delegate: delegate)
}
Property NameTypeDescription
configAsleep.ConfigAsleep.Config 객체를 입력
delegateAsleepConfigDelegate결과와 에러를 받을 Delegate을 전달

AsleepSleepTrackingManagerDelegate

protocol AsleepSleepTrackingManagerDelegate {
    func didCreate()
    func didUpload(sequence: Int)
    func didClose(sessionId: String)
    func didFail(error: Asleep.AsleepError)
    func didInterrupt()
    func didResume()
    func micPermissionWasDenied()
    func analysing(session: Asleep.Model.Session)
}
  1. didCreate()
    tracking이 생성됩니다.

  2. didUpload()
    오디오 데이터가 업로드됩니다.

    Property NameTypeDescription
    sequenceIntepoch의 순서
  3. didClose()
    tracking이 종료됩니다.

    Property NameTypeDescription
    sessionIdStringReport 결과 조회를 위한 id 값
  4. didFail()
    에러로 인해 tracking이 종료됩니다

    Property NameTypeDescription
    errorAsleep.AsleepErrorError Codes
  5. didInterrupt()
    통화 등 interrupt가 발생하여 tracking이 중단됩니다.

  6. didResume()
    interrupt 요인이 사라져 tracking이 재개됩니다.

  7. micPermissionWasDenied()
    마이크 권한 없이는 tracking을 시작할 수 없습니다.

  8. analysing()
    현재까지 측정된 결과를 받아옵니다.

    Property NameTypeDescription
    sessionAsleep.Model.Session측정 중 트래킹 세션 정보

2. Start sleep tracking

Asleep.SleepTrackingManager.startTracking()

var manager: Asleep.SleepTrackingManager?
manager?.startTracking()

🚧

수면 측정 테스트 시 안내 사항을 따라주시기 바랍니다.

Asleep의 수면 측정/분석 기능을 정확하게 테스트하려면, 
테스트 환경 가이드를 반드시 따라주시기 바랍니다. 이 가이드를 준수하지 않은 환경에서 얻은 수면 분석 결과는 
실제 수면 패턴과 정확하게 일치하지 않을 수 있음을 유의해주세요.

🔗 Test Environment Guideline 확인하기


3. Request the latest analyzed session

Asleep.SleepTrackingManager.requestAnalysis()

var manager: Asleep.SleepTrackingManager?
manager?.requestAnalysis()

4. Stop sleep tracking

Asleep.SleepTrackingManager.stopTracking()

var manager: Asleep.SleepTrackingManager?
manager?.stopTracking()

5. Get sleep tracking status

Asleep.SleepTrackingManager.getTrackingStatus()

  • v2.1.2 <= SDK
var manager: Asleep.SleepTrackingManager?
let trackingStatus = manager?.getTrackingStatus()

6. Resume tracking

Asleep.SleepTrackingManager.resumeTracking()

  • 수면측정 중 cannotActivateInBackground 오류가 발생하였을 경우 사용자에게 notification 등으로 알리고 앱을 foreground 상태에서 Asleep.SleepTrackingManager.resumeTracking()을 실행하여야 함.
  • v2.4.5 <= SDK
var manager: Asleep.SleepTrackingManager?
manager?.resumeTracking()

7. Data Type

Asleep.SleepTrackingManager.TrackingStatus

  • v2.1.2 <= SDK
struct TrackingStatus {
    var sessionId: String?
}
Property nameTypeDescription
sessionIdString?현재 Tracking 중인 session id
AsleepSleepTrackingManagerDelegate의 didCreate 함수에서
부터 사용할수 있으며 해당 Session이 Close 될때 까지 유요하다

Asleep.Model.Session

struct Session {
    let id: String
    let state: State
    let startTime: Date
    let endTime: Date?
    let unexpectedEndTime: Date?
    let createdTimezone: String
    let sleepStages: [Int]?
    let breathStages: [Int]?
}

enum State {
    case open
    case closed
    case complete
}

Property nameTypeDescriptionVersion
idString수면 세션 ID
stateAsleep.Model.State수면 세션 상태 (OPEN, CLOSED, or COMPLETE)
startTimeDate세션 시작 시각
endTimeDate?세션 종료 시각
unexpectedEndTimeDate?비정상 세션 종료 시각. 앱 크래시 등으로 세션이 정상적으로 진행 및 종료되지 못했을 경우, 나중에 클라이언트가 initConfig 를 실행하여 세션을 종료시킨 시각이 기록됨. 이 경우 end_time은 마지막까지 업로드된 오디오 파일의 순서 번호를 기준으로 계산됨. 따라서 null이 아닐 경우 비정상 세션.2.2.0<=SDK
createdTimezoneString세션이 생성된 타임존 (Timezone List)2.2.0<=SDK
sleepStagesArray<Int>수면 단계 리스트
-1: error (invalid audio, analysis error, etc)
0 : wake
1 : light
2 : deep
3 : rem
breathStagesArray<Int>호흡 안정도 단계 리스트
-1: error (invalid audio, analysis error, etc)
0 : stable
1 : unstable