v3.2.0 수면 측정 중 종료 수신
변경 내용
SDK v3.2.0부터 수면 측정 중 업로드가 거부되는 모든 4xx 에러가 uploadTrackingTerminated 하나로 통합되었습니다.
기존의 uploadBadRequest, uploadUnauthorized, uploadForbidden, uploadNotFound, uploadTooLarge, uploadUnprocessable는 deprecated 처리되었으며, 실제로는 더 이상 발생하지 않습니다.
uploadFailed, uploadServerError은 변경 없이 유지됩니다.
발생 조건
수면 측정 중 SDK가 오디오 데이터를 서버에 업로드했을 때 서버가 4xx 응답을 반환하면 발생합니다. 서버 측에서 해당 세션이 더 이상
유효하지 않다고 판단한 경우입니다.
대표적인 발생 상황
1. 동일 유저가 다른 기기에서 수면 측정을 시작한 경우
A 폰에서 수면 측정 중, 같은 user_id로 B 폰에서 새로운 수면 측정을 시작하면 서버가 A 폰의 세션을 종료합니다. 이후 A 폰이 오디오를
업로드할 때 서버가 이를 거부하며 uploadTrackingTerminated가 발생합니다.
2. 24시간 이상 측정을 지속한 경우
수면 측정이 24시간을 초과하면 서버가 세션을 자동 종료합니다. 이후 업로드 시 uploadTrackingTerminated가 발생합니다.
처리 방법
uploadTrackingTerminated 발생 시 SDK가 내부적으로 세션 종료 및 녹음 중단을 자동 처리합니다. 앱에서는 didFail 콜백에서 UI 전환만 처리하면 됩니다.
func didFail(error: Asleep.AsleepError) {
switch error {
case .uploadTrackingTerminated(let msg):
// msg 예시: "Upload failed with HTTP 403: Session already closed"
showAlert("수면 측정이 종료되었습니다")
navigateToResult()
case .uploadServerError:
break
default:
break
}
}주의사항
-
수동 세션 종료 코드 제거: 기존에 업로드 에러 시 stopTracking()을 호출하던 코드가 있다면 제거하세요. SDK가 자동으로 세션을 종료하므로 중복 호출 시 불필요한 에러가 발생할 수 있습니다.
-
수면 측정 재시작: 이 에러를 수신한 후 다시 측정하려면 새 세션을 생성해야 합니다.
-
deprecated 케이스 미발생: uploadForbidden, uploadNotFound 등 기존 case는 코드에 남아 있지만 실제로는 발생하지 않습니다.
Updated about 14 hours ago
