AsleepConfig

Initialize Config

Asleep.initAsleepConfig()

  • SDK를 초기화 합니다.
Asleep.initAsleepConfig(
    context: Context, 
    apiKey: String, 
    userId: String?, 
    baseUrl: String?, 
    callbackUrl: String?, 
    service: String?, 
    asleepConfigListener: Asleep.AsleepConfigListener,
    asleepLogger: AsleepLogger?
)
Parameter NameTypeDescription
contextContextapplicationContext를 입력
apiKeyStringGenerate API key 에서 발급받은 값을 입력
userIdString?초기 userId가 없을 땐 null을 입력, 이후 발급받은 userId를 입력
baseUrlString?null이면 기본값을 사용, 프록시 서버의 url을 입력
callbackUrlString?수면 세션 분석 결과를 받아올 서버의 url을 입력
serviceString?앱 이름
asleepConfigListenerAsleepConfigListeneruserId를 콜백 받을 수 있는 리스너
asleepLoggerAsleepLogger?SDK의 log를 콜백 받을 수 있는 리스너

Token 방식

setup을 Token 방식으로 호출했다면 initAsleepConfig도 같은 인증 정보로 호출합니다.

Asleep.initAsleepConfig(
    context = applicationContext,
    appId = "YOUR_APP_ID",
    appSecret = "YOUR_APP_SECRET",
    userId = userId,
    asleepConfigListener = asleepConfigListener
)
ParameterTypeDescription
appIdString?대시보드에서 발급받은 App ID
appSecretString?대시보드에서 발급받은 App Secret
isTestEnvironmentBoolean?테스트 환경을 사용할 때만 true. 기본값 null

나머지 파라미터(userId, baseUrl, callbackUrl, service, asleepConfigListener, asleepLogger)는 API Key 방식과 같습니다.

측정 도중 앱이 종료된 세션을 이어받을 때도 같은 인증 정보를 넘깁니다.

val config = Asleep.getSavedAsleepConfig(context, appId, appSecret)

Asleep.ConfigListener

interface AsleepConfigListener {
    fun onSuccess(userId: String?, asleepConfig: AsleepConfig?)
    fun onFail(errorCode: Int, detail: String)
}
  • 성공 시, onSuccess()가 호출됩니다.
Parameter NameTypeDescription
userIdString?새로 발급 하거나 입력한 userId
asleepConfigAsleepConfig?SDK를 사용하기 위해 필요한 설정값
  • 실패 시, onFail()이 호출됩니다.
Parameter NameTypeDescription
errorCodeIntAsleepErrorCode 참조
detailStringerrorCode에 관련된 메세지

Asleep.AsleepLogger

interface AsleepLogger {
  fun d(tag: String, msg: String, throwable: Throwable? = null)
  fun e(tag: String, msg: String, throwable: Throwable? = null)
  fun i(tag: String, msg: String, throwable: Throwable? = null)
  fun w(tag: String, msg: String, throwable: Throwable? = null)
}
  • SDK 내부에서 d(debug), e(error), i(info), w(warn)이 각각 발생하였을 때 호출됩니다.
Parameter NameTypeDescription
tagString"[Asleep SDK]"
msgStringlog message
throwableThrowable?SDK 실행 중 발생할 수 있는 문제를 나타내는 class

Set User ID

Asleep.setUserId()

  • SDK가 사용할 userId를 직접 설정합니다. 설정한 값은 이후 SDK 동작에 사용됩니다.
Asleep.setUserId(userId: String)
Parameter NameTypeDescription
userIdString설정할 userId

Preferred Mic

Asleep.setPreferredMicSelector()

  • 녹음에 사용할 마이크 선택 정책을 주입합니다. createSleepTrackingManager() / beginSleepTracking() 호출 전에 설정해야 해당 세션에 적용됩니다.
  • 지정 시 SDK는 선호 마이크 지정이 신뢰되도록 STEREO 캡처로 전환합니다(STEREO가 불가한 기기는 MONO로 폴백되며, 이 경우 기기에 따라 지정이 무시될 수 있습니다). null이면 기존과 동일하게 MONO 캡처 + 시스템 기본 라우팅으로 동작합니다.
  • SDK가 참조를 유지하므로, 더 이상 사용하지 않으면 null을 넘겨 해제하세요.
Asleep.setPreferredMicSelector(selector: PreferredMicSelector?)
Parameter NameTypeDescription
selectorPreferredMicSelector?마이크 선택 정책. null이면 기본 동작으로 돌아갑니다

Delete User

Asleep.deleteUser()

  • userId를 포함한 사용자의 모든 데이터를 삭제합니다.
fun deleteUser(deleteUserIdListener: DeleteUserIdListener?)
Parameter NameTypeDescription
deleteUserIdListenerDeleteUserIdListener?삭제된 userId를 콜백 받을 수 있는 리스너

Asleep.DeleteUserIdListener

interface DeleteUserIdListener {
    fun onSuccess(userId: String?)
    fun onFail(errorCode: Int, detail: String)
}
  • 성공 시, onSuccess()가 호출됩니다.
Parameter NameTypeDescription
userIdString?삭제된 userId
  • 실패 시, onFail()이 호출됩니다.
Parameter NameTypeDescription
errorCodeIntAsleepErrorCode 참조
detailStringerrorCode에 관련된 메세지

Continue Session

Asleep.hasUnfinishedSession()

  • 포그라운드 서비스가 강제종료 된 후 재시작 되었을 때 종료되지 않은 세션이 존재하는지 체크합니다.
hasUnfinishedSession(context: Context): Boolean
Parameter NameTypeDescription
contextContext?applicationContext를 입력

Asleep.getSavedAsleepConfig()

🚧

DeprecatedgetSavedAsleepConfig()restoreAsleepConfig()로 이름이 변경되었습니다. 동작은 같으며, 새 코드에서는 아래의 restoreAsleepConfig()를 사용하세요.

  • 포그라운드 서비스가 강제종료 된 후 재시작 되었을 때 이전에 저장된 asleepConfig를 가져옵니다.
getSavedAsleepConfig(context: Context, apiKey: String): AsleepConfig?
Parameter NameTypeDescription
contextContext?applicationContext를 입력
apiKeyStringGenerate API key 에서 발급받은 값을 입력

Asleep.restoreAsleepConfig()

  • getSavedAsleepConfig()의 새 이름입니다. 동작은 getSavedAsleepConfig()와 동일하며, 포그라운드 서비스가 강제종료 된 후 재시작 되었을 때 이전에 저장된 asleepConfig를 가져옵니다.
  • API Key 방식과 Token 방식(appId · appSecret) 각각에 대한 오버로드를 제공합니다.
restoreAsleepConfig(context: Context, apiKey: String): AsleepConfig?
restoreAsleepConfig(context: Context, appId: String, appSecret: String): AsleepConfig?
Parameter NameTypeDescription
contextContext?applicationContext를 입력
apiKeyStringGenerate API key 에서 발급받은 값을 입력
appIdString대시보드에서 발급받은 App ID (Token 방식)
appSecretString대시보드에서 발급받은 App Secret (Token 방식)



User Metadata

사용자의 생년월일 · 성별 · 키 · 몸무게를 저장하고 조회합니다. initAsleepConfig에서 받은 AsleepConfig의 메서드로 호출합니다.

asleepConfig.saveUserMetadata()

val metadata = UserMetadata(
    birthYear = 1990,
    birthMonth = 5,
    birthDay = 21,
    gender = UserMetadata.Gender.FEMALE,
    height = 165.5f,
    weight = 55.2f
)

asleepConfig?.saveUserMetadata(metadata, object : Asleep.SaveUserMetadataListener {
    override fun onSuccess(userInfo: UserInfo) { }
    override fun onFail(errorCode: Int, detail: String) { }
})
ParameterTypeDescription
metadataUserMetadata저장할 사용자 정보
listenerSaveUserMetadataListener결과를 받을 리스너. 성공 시 갱신된 UserInfo가 전달됩니다

asleepConfig.fetchUserMetadata()

asleepConfig?.fetchUserMetadata(object : Asleep.FetchUserMetadataListener {
    override fun onSuccess(metadata: UserMetadata?) {
        // 저장된 정보가 없으면 null
    }

    override fun onFail(errorCode: Int, detail: String) { }
})
ParameterTypeDescription
listenerFetchUserMetadataListener결과를 받을 리스너. 저장된 정보가 없으면 onSuccess(null)

Listener

interface SaveUserMetadataListener {
    fun onSuccess(userInfo: UserInfo)
    fun onFail(errorCode: Int, detail: String)
}

interface FetchUserMetadataListener {
    fun onSuccess(metadata: UserMetadata?)
    fun onFail(errorCode: Int, detail: String)
}

UserMetadata

data class UserMetadata(
    val birthYear: Int? = null,
    val birthMonth: Int? = null,
    val birthDay: Int? = null,
    val gender: Gender? = null,
    val height: Float? = null,
    val weight: Float? = null
)

enum class Gender { MALE, FEMALE, NON_BINARY, OTHER, PREFER_NOT_TO_SAY }
PropertyTypeDescription
birthYearInt?출생 연도 (1900~2100)
birthMonthInt?출생 월 (1~12)
birthDayInt?출생 일 (1~31)
genderGender?성별
heightFloat?키, cm (1~500). 소수점 첫째 자리까지 저장 (그 아래는 버림)
weightFloat?몸무게, kg (1~1000). 소수점 첫째 자리까지 저장 (그 아래는 버림)
🚧

범위를 벗어난 값을 넣으면 UserMetadata를 만드는 순간 IllegalArgumentException이 발생합니다. 리스너 콜백이 아니므로, 사용자 입력값을 그대로 넣는다면 입력 단계에서 검증하거나 try-catch로 감싸세요.

  • 모든 항목은 선택입니다. null인 항목은 요청에 포함되지 않습니다.
  • 월과 일의 조합(예: 2월 31일)은 검사하지 않습니다.

UserInfo

saveUserMetadata 성공 시 전달되며, v3.3.0부터 metadata 필드가 추가되었습니다.

data class UserInfo(
    val createdTimezone: String?,
    val nickName: String?,
    val toBeDeleted: Boolean?,
    val userId: String?,
    val metadata: UserMetadata? = null
)

에러 코드

CodeName상황
27000ERR_SAVE_METADATA_FAILED저장 실패 (네트워크 · 서버 오류, userId 미설정, SDK 미초기화)
27100ERR_FETCH_METADATA_FAILED조회 실패 (네트워크 · 서버 오류, userId 미설정, SDK 미초기화)
27400ERR_SAVE_METADATA_VALIDATION서버가 값을 거부함(400). detail에 원인이 담깁니다

Did this page help you?