Product 등록(v3.3.0)
3.2.0에서 3.3.0으로 올릴 때 꼭 바꿔야 하는 것은 두 가지입니다.
Asleep.setup()호출에productInfo(기기 정보) 를 추가합니다.setup완료(setupDidComplete)를 확인한 뒤initAsleepConfig→ 측정 시작 순서로 진행합니다.
측정 시작·종료, 리포트 조회 등 나머지 코드는 3.2.0과 같습니다.
setup은 앱 실행 시 한 번만 호출하세요.init 결과, 측정 콜백, 화면 갱신 때마다
setup을 다시 호출하면 setup ↔ init이 반복될 수 있습니다. 실패 콜백 안에서 곧바로 재호출하지 말고,productRegisterFailed는 간격을 두고 재시도하고productRegisterRejected는 재시도하지 마세요.
[앱 실행]
│
① Asleep.setup(apiKey:productInfo:delegate:) ← 앱 실행 시 한 번만. 기기 등록
│ ├ 실패 → productRegisterFailed(간격 두고 재시도) / productRegisterRejected(입력값·키 확인, 재시도 X)
│ └ setupDidComplete()
│
② Asleep.initAsleepConfig(apiKey:userId:delegate:) ← 기존 코드
│ └ userDidJoin(userId:config:)
│
③ 측정 시작 ← 기존 코드. 이때 생성된 세션이 기기에 연결됨
│
④ 측정 종료 ← 기존 코드1. SDK 버전 올리기
Swift Package Manager에서 asleep-sdk-ios를 3.3.0으로 업데이트합니다.
2. ProductInfo 준비
기기를 설명하는 세 가지 값을 준비합니다.
| 항목 | 설명 | 제약 |
|---|---|---|
model | 제품 모델명 (예: "model-123") | 1~100자 |
identifierType | 기기 식별값의 종류 | .serial 또는 .macAddress |
identifierValue | 실제 시리얼 번호 또는 MAC 주소 | 1~255자 |
let productInfo = Asleep.ProductInfo(
model: "model-123", // 제품 모델명 (≤100자)
identifierType: .serial, // .serial 또는 .macAddress
identifierValue: deviceSerial // 기기 고유값 (≤255자)
)
꼭 지켜주세요
identifierValue는 기기마다 달라야 하고, 바뀌지 않아야 합니다. 서버는 이 값으로 기기를 구분합니다.- 항상 같은 형식으로 넘겨주세요. SDK는 값을 가공하지 않고 그대로 비교·전송합니다. 대소문자, 구분자(
:/-), 앞뒤 공백이 조금만 달라도 다른 기기로 보고 등록을 다시 요청합니다. 예)AA:BB:CC:DD:EE:FF와aa-bb-cc-dd-ee-ffmodel은 처음 등록할 때 정확한 값으로 넣어주세요. 같은 식별값으로model만 바꿔 다시 등록해도 서버에 저장된 모델명은 바뀌지 않습니다.- 빈 값이나 길이를 넘는 값은 서버에 요청하지 않고 바로
productRegisterRejected로 실패합니다.
3. setup에 productInfo 추가
앱을 실행할 때 한 번(측정 시작 전), 매 실행마다 같은 productInfo로 setup을 호출합니다.
- 처음 실행: 서버에 기기를 등록합니다.
- 두 번째 실행부터: 기기에 저장된 등록 정보를 사용하므로 등록 요청 없이 바로 완료됩니다.
등록이 끝나면 SDK가 이후 세션 생성·데이터 업로드 등의 요청에 기기 정보를 자동으로 붙입니다. 앱에서 따로 할 일은 없습니다.
3.2.0
Asleep.setup(apiKey: apiKey, delegate: self)3.3.0 — productInfo만 추가합니다.
Asleep.setup(apiKey: apiKey, productInfo: productInfo, delegate: self)extension SleepController: AsleepSetupDelegate {
func setupDidComplete() {
// 기기 등록 완료 — 완료 상태를 기록하고 사용자 연결(initAsleepConfig) 진행
}
func setupDidFail(error: Asleep.AsleepError) {
switch error {
case .productRegisterFailed: break // 일시 실패 — 간격을 두고 setup 다시 호출
case .productRegisterRejected: break // 거부 — productInfo / API Key 확인 (재시도 X)
default: break // 그 외 (예: 빈 API Key)
}
}
func setupInProgress(progress: Int) { }
}
3.2.0에서setup없이initAsleepConfig만 호출하고 있었다면, 위처럼setup을 새로 추가하고 setup 완료를 확인한 뒤 기존initAsleepConfig를 호출하도록 순서만 바꾸면 됩니다.
setup 결과
| 결과 | 의미 | 앱에서 할 일 |
|---|---|---|
완료 (setupDidComplete) | 기기 등록 완료 (또는 저장된 등록 정보로 통과) | 사용자 연결(initAsleepConfig) 진행 |
productRegisterFailed | 일시 실패 — 네트워크 오류, 서버 오류. SDK가 이미 3번 재시도한 상태 | 네트워크 확인 후 간격을 두고 setup 다시 호출 |
productRegisterRejected | 거부 — 입력값 오류, API Key 오류, 등록 권한 없음 | 재시도하지 말고 productInfo와 API Key 확인. 해결되지 않으면 Asleep에 문의 |
- 실패하면 완료 콜백은 오지 않습니다.
- 실패 콜백 안에서 곧바로
setup을 다시 호출하지 마세요. 원인이 그대로면 실패 → 재호출이 끝없이 반복됩니다. - 에러와 함께 오는
message는 원인 확인용이며 문구가 바뀔 수 있습니다. 분기는 에러 케이스로 해주세요.
알아두면 좋은 점
- 첫 등록은 시간이 걸릴 수 있습니다. 보통은 금방 끝나지만, 서버가 응답하지 않아 재시도를 모두 쓰면 최대 약 75초 뒤에 실패 콜백이 옵니다. setup을 기다리는 화면에는 로딩 표시를 권장합니다.
setup은 앱 실행 시 한 번만 호출하세요. init 결과, 측정 콜백, 화면 갱신마다 호출하면 두 번째부터는 즉시 완료되기 때문에 setup ↔ init이 빠르게 반복될 수 있습니다. 연결된 기기가 바뀐 경우만 예외입니다.- setup이 진행 중일 때 다시
setup을 호출하면 무시됩니다. 이 경우 콜백이 오지 않습니다. - 측정 중에
setup을 호출해도 무시됩니다. 이 경우에도 콜백이 오지 않으니, setup은 측정을 시작하기 전에 호출해주세요.
4. 사용자 연결 — setup 완료 확인 후 initAsleepConfig
setup 완료를 확인한 뒤 기존 initAsleepConfig를 호출합니다. 파라미터는 3.2.0과 같습니다.
- init이 실패해도
setup을 다시 호출하지 마세요. 기기 등록은 이미 끝났으므로initAsleepConfig만 다시 시도하면 됩니다.
private var isSetupCompleted = false
func setupDidComplete() {
isSetupCompleted = true
connectUser()
}
func connectUser() {
guard isSetupCompleted else { return }
Asleep.initAsleepConfig(apiKey: apiKey,
userId: userId,
delegate: self)
}
// AsleepConfigDelegate
func userDidJoin(userId: String, config: Asleep.Config) {
self.config = config // 측정·리포트에 사용
}
func didFailUserJoin(error: Asleep.AsleepError) {
// setup은 다시 호출하지 않음. 필요하면 connectUser()만 재시도
}
func userDidDelete(userId: String) { }5. 측정 시작·종료 — 기존 코드 그대로
측정 시작·종료 코드는 3.2.0과 같습니다. 아래 두 가지만 지켜주세요.
- setup 완료 → 사용자 연결 성공 이후에 측정을 시작하세요. 세션이 만들어지는 순간 기기와 연결됩니다.
- 연결된 기기가 바뀐 경우(다른 시리얼 번호) 측정을 끝낸 뒤 새
productInfo로setup을 다시 호출하세요. 그 이후 만들어지는 세션부터 새 기기로 연결됩니다.
3.3.0에는 API Key 대신 앱 인증 정보(
appId·appSecret)로 인증하는 Token 방식도 추가되었습니다. Product 등록과는 별개 기능이며, 자세한 내용은 Setup 페이지를 참고하세요.
Updated 13 minutes ago
Did this page help you?
