iOS SDK ์‹œ์ž‘ํ•˜๊ธฐ

Requirements

๐Ÿšง

Minimum requirements for AsleepTrack SDK on iOS

  • Xcode 14.1 ํ˜น์€ ๋” ๋†’์€ ๋ฒ„์ „
  • iOS 14.0 ํ˜น์€ ๋” ๋†’์€ ๋ฒ„์ „
  • Swift 5.0 ํ˜น์€ ๋” ๋†’์€ ๋ฒ„์ „

API Key

AsleepTrack SDK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” API key๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

API key๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์ด ๋งํฌ API key ์ƒ์„ฑํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


Getting Ready

AsleepTrack SDK for iOS๋Š” Xcode์— ๋‚ด์žฅ๋œ Swift Package Manager์„ ํ†ตํ•ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Install AsleepTrack SDK

  1. Xcode์—์„œ File > Add Packages๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค์ด์–ผ๋กœ๊ทธ ์ฐฝ์— repository url์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค https://github.com/asleep-ai/asleep-sdk-ios.

  1. ๋ฒ„์ „์—์„œ, Up to Next Major Version ๋ฐ ๊ธฐ๋ณธ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. Add Package ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  1. Add Package ๋ฅผ ํ•œ๋ฒˆ ๋” ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  1. Xcode์—์„œ, Targets ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ ํƒํ•œ ํ›„ Signing & Capabilities ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  1. + Capability ๋ฅผ ํด๋ฆญํ•˜๊ณ  Background Modes๋ฅผ ๋”๋ธ”ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  1. Audio, AirPlay, and Picture in Picture๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. Xcode์—์„œ, ๋ณธ์ธ์˜ Targets ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Info ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  1. +๋ฅผ ํด๋ฆญํ•˜๊ณ  Privacy - Microphone Usage Description๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๋งˆ์ดํฌ ๊ถŒํ•œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Import the AsleepTrack SDK

import AsleepSDK


Sleep Tracking with AsleepTrack SDK

Initialize the AsleepTrack SDK

  1. SDK๋ฅผ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค

    • userId๊ฐ€ nil์ด๋ฉด ์ƒˆ๋กœ์šด userId๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • baseUrl์—๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. nil์ด๋ฉด default base url์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • callbackUrl์€ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ๋ฐ›๋Š” ์„œ๋ฒ„๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. nil์ด๋ฉด ์ฝœ๋ฐฑ์ด ์—†์Šต๋‹ˆ๋‹ค.
    • service๋Š” ๊ฐœ๋ฐœํ•  ์•ฑ์˜ ๋‹‰๋„ค์ž„์ด ์žˆ๋‹ค๋ฉด ์ž…๋ ฅํ•˜์„ธ์š”.
    let apiKey: String = "YOUR_API_KEY"
    let userId: String?
    let baseUrl: URL?
    let callbackUrl: URL?
    let service: String?
    let delegate: AsleepConfigDelegate = self
    
    Asleep.initAsleepConfig(apiKey: apiKey,
                            userId: userId,
                            baseUrl: baseUrl,
                            callbackUrl: callbackUrl,
                            service: service,
                            delegate: self)
    
  2. config๊ณผ user ID๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค

    extension YourClass: AsleepConfigDelegate {
        func userDidJoin(userId: String, config: Asleep.Config) {
            self.userId = userId
            self.config = config 
        }
    
        func didFailUserJoin(error: Asleep.AsleepError) {
            print(error)
        }
    
        func userDidDelete(userId: String) {
            print("\(userId) is deleted")
        }
    }
    

โ—๏ธ

join์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ userId๋ฅผ permanent storage์— ์ €์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Create SleepTrackingManager

var config: Asleep.Config?
let delegate: AsleepSleepTrackingManagerDelegate = self
var manager: Asleep.SleepTrackingManager?

if let config {
    manager = Asleep.createSleepTrackingManager(config: config,
                                                delegate: self)
}

๐Ÿšง

userDidJoin์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ Asleep.Config์„ ์ด์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Start Tracking

var manager: Asleep.SleepTrackingManager?
manager?.startTracking()

โ—๏ธ

startTracking()์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด SDK๋Š” ๋งˆ์ดํฌ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Stop Tracking

var manager: Asleep.SleepTrackingManager?
manager?.stopTracking()
  1. ์ˆ˜๋ฉด ๋ฆฌํฌํŠธ์˜ session ID๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค
    extension YourClass: AsleepSleepTrackingManagerDelegate {
        func didClose(sessionId: String) {
          	self.sessionId = sessionId
        }
    }
    

Create Reports

var config: Asleep.Config?
var reports: Asleep.Reports?

if let config {
    reports = Asleep.createReports(config: config)
}

๐Ÿšง

userDidJoin์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ Asleep.Config์„ ์ด์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Get Report

var reports: Asleep.Reports?
var sessionId: String?

if let reports, let sessionId {
    // Closure
    reports.report(sessionId: sessionId) {
        if let error = $1 {
            print(error)
            return
        }
        
        if let report = $0 {
        }
    }

    // Async
    Task {
        do {
            let report: Asleep.Model.Report = try await reports.report(sessionId: sessionId)	
        } catch {
            print(error)
        }
    }
}

๐Ÿ“˜

Sample App์„ ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณด๋ฉด์„œ SDK๋ฅผ ๋น ๋ฅด๊ฒŒ ์ตํžˆ๊ณ , ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด์„ธ์š”.

https://github.com/asleep-ai/asleep-sdk-ios-sampleapp-public