Get Started
수면 측정 시 안내 사항을 따라주시기 바랍니다.Asleep의 수면 측정/분석 기능을 정확하게 테스트하려면, 테스트 환경 가이드를 반드시 따라주시기 바랍니다. 이 가이드를 준수하지 않은 환경에서 얻은 수면 분석 결과는 실제 수면 패턴과 정확하게 일치하지 않을 수 있음을 유의해주세요.
- 수면 측정은 최소 20분 이상의 오디오가 업로드 되어야 분석이 시작되며, 그 이후로는 플랜(계약 조건)에 따라 5분 또는 20분 간격으로 분석합니다.
🔗 Test Environment Guideline 확인하기
1. Requirements
1.1 Minimum requirements on Asleep SDK for Android
- Android 8.0 (API level 26) 혹은 더 높은 버전
- Java 1.8 혹은 더 높은 버전
- Android Gradle plugin 8.0 혹은 더 높은 버전
1.2 API Key
에이슬립 SDK를 사용하기 위해서는 API key가 필요합니다.
API key를 발급하는 방법에 대해서는 이 링크 Generate API key를 참고하세요.
2. Getting Ready
2.1 Install Asleep SDK and Settings
- Android Studio를 이용하여 프로젝트를 생성합니다.
- 생성된 프로젝트 폴더의 [root]/app/libs 폴더에 AsleepSDK.aar 파일을 추가합니다.
- AndroidManifest.xml 파일을 열어 퍼미션을 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 권한은 필수가 아닙니다.다만, 도즈 모드에 빠지는 것을 방지하기 위해 해당 권한이 있으면 도움이 될 수 있습니다.
https://developer.android.com/training/monitoring-device-state/doze-standby
FOREGROUND_SERVICE 권한은 앱 개발시 필요할 수 있습니다.개발할 앱이 사용자가 잠자는 시간에도 동작하게 하려면 이 기능을 사용하여야 합니다.
https://developer.android.com/guide/components/foreground-services
- 앱 수준의 build.gradle 파일을 열어 okhttp, gson, npy 및 libs 폴더의 *.aar을 추가합니다.
plugins {
...
}
android {
...
}
dependencies {
...
implementation 'org.jetbrains.bio:npy:0.3.5'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.google.code.gson:gson:2.9.1'
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
}- 적절한 위치에 permission 획득을 위한 source code를 작성합니다.
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), 0)
3. Sleep Tracking with Asleep SDK
3.1 Step 1: Initialize the Asleep SDK
initAsleepConfig 하여 AsleepConfig 받아옵니다.
apiKey, userId(기존에 받은 것이 없다면 null), baseUrl(proxy server의 주소, 없다면 null), callbackUrl(세션이 분석된 결과를 받는 주소), service(개발할 앱의 닉네임)을 입력합니다.
userId가 없다면 새로 생성하여 onSuccess()에서 반환해주고, 기존 사용하던 userId를 입력하면 검증을 거친 후 onSuccess()에서 반환해줍니다.
만약, 기존 사용하던 userId가 Tracking 중이라면 SDK내부에서 종료 시킵니다.
import ai.asleep.asleepsdk.Asleep
import ai.asleep.asleepsdk.data.AsleepConfig
import ai.asleep.asleepsdk.AsleepErrorCode
...
Asleep.initAsleepConfig(
context = applicationContext,
apiKey = "[input your apiKey]",
userId = "",
baseUrl = null,
callbackUrl = "",
service = "[input your AppName]",
object : Asleep.AsleepConfigListener {
override fun onSuccess(userId: String?, asleepConfig: AsleepConfig?) {
...
/* save userId and asleepConfig */
}
override fun onFail(errorCode: Int, detail: String) {
...
}
})3.2 Step 2: Create SleepTrackingManager
initAsleepConfig에서 받아온 AsleepConfig를 파라메터로 입력합니다.
import ai.asleep.asleepsdk.tracking.SleepTrackingManager
...
var sleepTrackingManager = Asleep.createSleepTrackingManager(asleepConfig, object : SleepTrackingManager.TrackingListener {
override fun onCreate() {
}
override fun onUpload(sequence: Int) {
}
override fun onClose(sessionId: String) {
...
/* save sessionId */
}
override fun onFail(errorCode: Int, detail: String) {
}
})3.3 Step 3: Start Tracking
- 측정 시작하기
시작을 하면 SleepTrackingManager 생성시 등록한 listener의 onUpload함수에서 30초에 한번씩 시퀀스 넘버가 콜백됩니다.
sleepTrackingManager?.startSleepTracking()- 측정 중 분석하기
sleepTrackingManager?.requestAnalysis(object : SleepTrackingManager.AnalysisListener {
override fun onSuccess(session: Session) {
Log.d("", "${session.toString()}")
}
}session에 대한 정보는 API>Data API>Get a session 참조
3.4 Step 4: Stop Tracking
정지를 하면 SleepTrackingManager 생성시 등록한 listener의 onClose함수에서 sessionId가 콜백됩니다.
sleepTrackingManager?.stopSleepTracking()3.5 Step 5: Create Reports
initAsleepConfig에서 받아온 AsleepConfig를 파라메터로 입력합니다.
val reports = Asleep.createReports(asleepConfig)3.6 Step 6: Get Report
- sessionId 하나의 결과 받아오기
sleepTracking을 정지했 때 받아온 sessionId를 파라메터로 입력합니다.
reports?.getReport(sessionId, object : Reports.ReportListener {
override fun onSuccess(report: Report?) {
}
override fun onFail(errorCode: Int, detail: String) {
}
})- 날짜로 결과 받아오기
val today = LocalDate.now()
reports?.getReports(today.minusDays(7).toString(), today.toString(), "DESC", 0, 20, object : Reports.ReportsListener {
override fun onSuccess(reports: List<SleepSession>?) {
}
override fun onFail(errorCode: Int, detail: String) {
}
})3.7 Step 7: Remove Session
- 측정 기록 삭제하기
sessionId를 입력하여 해당 측정 기록을 삭제합니다.
reports?.deleteReport(sessionId, object : Reports.DeleteReportListener {
override fun onSuccess(sessionId: String?) {
}
override fun onFail(errorCode: Int, detail: String) {
}
})- 나의 정보 전부 삭제하기
userId와 측정된 기록을 전부 삭제합니다. 삭제된 userId는 더이상 사용할 수 없습니다.
Asleep.deleteUser(object : Asleep.DeleteUserIdListener {
override fun onSuccess(userId: String?) {
}
override fun onFail(errorCode: Int, detail: String) {
}
})Updated over 1 year ago
