Skip to content

구현

recognizer 구성

SORI 프레임워크를 import하고 SORI 애플리케이션 인증 정보로 shared recognizer를 구성합니다.

swift
import SORI

let recognizer = SORIAudioRecognizer.shared()
let configuration = SORIAudioRecognizer.Configuration(
    applicationID: "YOUR_SORI_APP_ID",
    secretKey: "YOUR_SORI_SECRET_KEY"
)

recognizer.configure(configuration)

인식 시작

구성이 끝나면 startRecognition(repeat:handler:)를 호출합니다. 등록된 소재가 인식되면 handler는 SORI API가 반환한 campaign payload를 받습니다.

swift
recognizer.startRecognition(repeat: true) { media, error in
    if let error {
        print("SORI recognition error: \(error)")
        return
    }

    guard let campaign = media as? [String: Any] else {
        return
    }

    handleRecognizedCampaign(campaign)
}

오디오마커 인식 활성화

오디오마커 인식은 기본적으로 비활성화되어 있습니다. 기본 모드에서 iOS 인식은 fingerprint-only로 동작합니다. SORI Console 설정에서 오디오마커를 사용하는 경우에만 활성화하세요.

swift
let configuration = SORIAudioRecognizer.Configuration(
    applicationID: "YOUR_SORI_APP_ID",
    secretKey: "YOUR_SORI_SECRET_KEY"
)
configuration.audiomarker = true
configuration.audiomarkerChangeHandler = { marker in
    print("Audio Marker:", marker ?? "none")
}

recognizer.configure(configuration)

campaign result가 감지된 marker와 연결된 경우, recognition payload에 marker 또는 trait.marker가 포함될 수 있습니다.

swift
recognizer.startRecognition(repeat: true) { media, error in
    guard let campaign = media as? [String: Any], error == nil else {
        return
    }

    let marker = campaign["marker"] as? String
        ?? ((campaign["trait"] as? [String: Any])?["marker"] as? String)

    if let marker {
        print("Campaign marker:", marker)
    }
}

서버 측에서는 SORI Console이 감지된 marker를 오디오마커에 설정한 attributes와 연결하여 activity history, statistics, reports, webhooks에서 사용할 수 있게 합니다.

인식 중지

앱에서 더 이상 마이크 캡처가 필요하지 않을 때 인식을 중지합니다.

swift
recognizer.stopRecognition()

백그라운드 인식

앱에 백그라운드 인식이 필요하다면 Info.plistUIBackgroundModesaudio를 추가하세요. 백그라운드 인식은 앱이 실행 중일 때 작동합니다. 앱이 종료되면 인식도 중지됩니다.

오류 처리

인식 오류는 recognition handler와 SORI error notifications를 통해 전달됩니다. 오류 알림을 관찰하려면 SORIError.errorNotificationName()을 등록하세요.

swift
NotificationCenter.default.addObserver(forName: SORIError.errorNotificationName(), object: nil, queue: OperationQueue.main) { notification in
    guard let error = notification.object as? NSError,
          let code = SORIErrorCode(rawValue: error.code) else {
        print("Unknown error notification: \(notification)")
        return
    }

    if code == .authenticationFailure {
        print("Failed to authenticate")
    }
}