実装
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.plistのUIBackgroundModesにaudioを追加してください。バックグラウンド認識はアプリが実行中の間に動作します。アプリが終了すると、認識も停止します。
エラーハンドリング
認識エラーは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")
}
}