Error Codes
Asleep.setDebugLoggerDelegate()
let delegate: AsleepDebugLoggerDelegate = self
Asleep.setDebugLoggerDelegate(self)protocol AsleepDebugLoggerDelegate {
func didPrint(message: String)
}| Property Name | Type | Description |
|---|---|---|
| message | String | Log message |
Asleep.AsleepError
enum AsleepError: Error {
case unknown(systemError: Error)
case shouldResume
case over24hours
case audioInitializationFailed
case unsupportedInDeveloperMode
case cannotActivateInBackground
case startTrackingNetworkFail(code: Int, message: String?)
case stopTrackingNetworkFail(code: Int, message: String?)
case responseResult(endpoint: String)
case httpStatus(code: Int, errorCode: Int, message: String?)
// v3.3.0
case invalidParameter(message: String?)
case insufficientStorage(message: String?)
case completeTimeout(message: String?)
case saveMetadataFailed(message: String?)
case fetchMetadataFailed(message: String?)
case metadataValidationFailed(message: String?)
case productRegisterFailed(message: String?)
case productRegisterRejected(message: String?)
// v3.3.0 — Token authentication
case tokenIssueFailed(message: String?)
case tokenRefreshFailed(message: String?)
case tokenInvalidCredentials(message: String?)
case tokenNetworkError(message: String?)
}unknown: 알 수 없는 시스템 에러
- systemError: Error - 시스템이 발생한 에러
shouldResume: 마이크 녹음 인터럽트 이후 재개할 수 없음
over24Hours: 녹음이 24시간 초과되어 강제 중지함
- 에이슬립 SDK는 24시간을 초과하는 수면 측정을 지원하지 않습니다.
audioInitializationFailed: 오디오 관련 하드웨어 설정 오류
- iOS 디바이스 오디오 초기화 오류
- Audio 설정 초기화를 위해 createSleepTrackingManager() 다시 호출
cannotActivateInBackground: 인터럽트 종료시 마이크 재시작에 실패할 경우 발생하는 오류
- 이 오류가 발생하였을 경우 사용자에게 notification 등으로 알리고 앱을 foreground 상태에서 Asleep.SleepTrackingManager.resumeTracking()을 실행하여야 함.
startTrackingNetworkFail: startTracking 초기화 시 발생 하는 네트워크 오류
- code: Int - 400 이상의 http code
- message: String - 에러 사유 설명
stopTrackingNetworkFail: stopTracking 시 발생 하는 네트워크 오류
- code: Int - 400 이상의 http code
- message: String - 에러 사유 설명
responseResult: api reponse의 result값에 문제가 발생함
- endpoint - 문제가 발생한 endpoint
httpStatus: http 에러
- code: Int - 400 이상의 http code
- errorCode: Int - 사용 안함
- message: String - 에러 사유 설명
v3.3.0 에서 추가된 케이스
| Case | 발생 상황 | 앱이 할 일 |
|---|---|---|
invalidParameter | 요청을 보내기 전 파라미터 검증 실패. 분석 구간의 시작 시각이 종료 시각보다 늦거나 같을 때 | 입력값 확인 |
insufficientStorage | 녹음 파일 저장에 필요한 여유 공간이 부족해 측정을 시작하지 못함 | 저장 공간 안내 |
completeTimeout | 측정 종료 후 30초 안에 분석 완료를 확인하지 못함. 측정 실패가 아니며 세션은 정상 종료됨 | 잠시 후 report(sessionId:) 로 조회 |
saveMetadataFailed | 사용자 메타데이터 저장 실패 (네트워크 · 서버 오류, userId 미설정) | 재시도 |
fetchMetadataFailed | 사용자 메타데이터 조회 실패 (네트워크 · 서버 오류, userId 미설정) | 재시도 |
metadataValidationFailed | 메타데이터 값이 허용 범위를 벗어남. 서버 요청 전에 던집니다 | 입력값 확인 |
productRegisterFailed | 기기(Product) 등록 일시 실패. 네트워크 · 서버 오류(5xx) · 요청 과다(429). SDK 가 재시도한 뒤의 결과 | 잠시 후 setup 재호출 |
productRegisterRejected | 기기(Product) 등록 거부. 입력값 오류(400) · 인증 실패(401) · 등록 권한 없음(403). 다시 시도해도 결과가 같음 | productInfo / API Key 확인 |
| tokenIssueFailed | 토큰 발급 실패 | 네트워크 확인 후 재시도 |
| tokenRefreshFailed | 토큰 갱신 실패 | 네트워크 확인 후 재시도 |
| tokenInvalidCredentials | 잘못된 appId / appSecret | 앱 인증 정보 확인 (재시도해도 결과 동일) |
| tokenNetworkError | 토큰 요청 중 네트워크 오류 | 네트워크 확인 후 재시도 |
각 케이스의 message 는 원인 확인(로그)용이며 문구가 예고 없이 바뀔 수 있습니다. 앱 로직은 반드시 케이스로 분기하세요.
세션 생성 · 업로드 · 종료 · 리포트 · 재분석의 서버 오류는 위 케이스가 아니라httpStatus(code:errorCode:message:)로 전달됩니다. v3.3.x 까지는 기존 클라이언트 호환을 위해 이 방식을 유지하며, 개별 케이스로의 전환은 v4.0.0 에 예정되어 있습니다. 지금은code(HTTP 상태 코드)로 분기하세요.
HTTP Status code
State: COMMON, INIT, TRACKING, REPORT
| Code | Type | Description | State | Handling |
|---|---|---|---|---|
| 401 | Unauthorized | Unauthorized | COMMON | Client Handling |
| 401 | Unauthorized | invalid user id | COMMON | Client Handling |
| 403 | Plan is expired | Plan is expired | COMMON | SDK Stop |
| 403 | Rate limit exceeded | Rate limit exceeded | COMMON | SDK Stop |
| 403 | Quota exceeded | Quota exceeded | COMMON | SDK Stop |
| 400 | Bad Request | Invalid callback url | TRACKING | Client Handling |
| 400 | Bad Request | [WARNING] Invalid session end time. format(YYYY-MM-DDTHH:mm:ssz), 'session_end_time' must always be greater than 'session_start_time’ | TRACKING | SDK Handling |
| 403 | Forbidden | the sleep session is already closed | TRACKING | SDK Stop |
| 404 | Not Found | session does not exist. | TRACKING | Client Handling |
| 409 | Conflict | previous sleep session is not closed yet | TRACKING | SDK Stop |
| 422 | Validation Error | Invalid parameter | TRACKING | SDK Handling |
| 422 | Unprocessable Entity | Invalid parameter. | TRACKING | SDK Handling |
| 400 | Bad Request | invalid timezone | REPORT | Client Handling |
| 400 | Unprocessable Entity | The format of sleep session id {session_id} is not valid | REPORT | Client Handling |
| 401 | Unauthorized | The api key is not provided | REPORT | Client Handling |
| 404 | Not Found | Unable to find the sleep session of id {session_id} | REPORT | Client Handling |
SDK Error 대응을 위한 정의
SDK 구간 동작에 대한 정의
- Init (initAsleepConfig) : SDK 초기화 상태
- Tracking (SleepTrackingManager): 수면 모니터링을 위한 Audio Recording 환경과 Server의 통신 프로토콜 관리
- Report (Reports): 수면 모니터링 결과
Error Case Definition
- SDK Stop: SDK 내부에서 종료 처리. SDK 내부적으로 종료 처리 되어서 새로 시작을 위해서는 SDK 재시작 필요. SDK 상태에 따라서 자체적으로 Session 종료 및 Audio Recording 기능에 대한 종료 처리됨. initAsleepConfig 요청 부터 새로 시작해야 SDK 활성화
- SDK Handling: SDK 내부적으로 Error 업데이트 후 다음 동작을 수행. 에러 수신 후 종료 처리를 하고 싶으면 SDK 호출된 상태에 따라서 처리가 필요. SDK 종료 처리를 위해서는 Tracking 상태에서만 stopTracking 호출해 줘야 하고 다른 구간에서는 별도 처리 필요 없음.
- Client Handling: Client에서 조치를 해줘야 하는 에러. 개발시 Error 확인 용도
- Do not used: 현재 버전에서 사용되고 있지 않는 에러
Error Handling 분류
- SDK 사용시 주로 나오는 Error Code는 붉은 색으로 표시. 취소선으로 선택된 Error Code는 나올 확률이 낮음.
Updated 3 days ago
Did this page help you?
