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")
    }
}