Skip to content

実装

このガイドはiOS SDK 5.0.12を対象としています。インストールと更新の手順を参照してください。

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

recognizer.configure(configuration)

現在のマーカーUIと後続のアクティビティ補完には、SDKが管理する状態とアクティビティ結果APIを使用してください。SDKが失効、マーカーtrait、同一アクティビティの更新を管理します。既存のキャンペーン・検出コールバックとの互換性は維持されます。

順序付き連続アクティビティタイムラインの表示

以下は既存のキャンペーンコールバック向けの説明です。SDKが受理を確認した新しいアクティビティ結果には、オーディオマーカーの状態とアクティビティ結果にある正確なIDによる更新規則を使用してください。この結果は対応する過去のアクティビティも更新できます。

認識handlerは、素材のキャンペーンを最初に返した後、同じアクティビティに対して markerでリファインされたキャンペーンを返すことがあります。最初の結果はすぐに 表示しつつ、アプリケーションの状態に明示的な現在のセグメントを保持してください。 公開payload dictionaryにはactivity_idmaterial_idtrait.markerが含まれる ことがあります。

  • 空でないactivity_idは、そのIDと完全に一致する現在の行だけをリファインできます。 アクティビティ、キャンペーン、素材IDを使ってタイムライン全体を検索しないでください。
  • 古いpayloadではactivity_idが省略されることがあります。その場合、 material_idによるfallbackは現在の行だけに使用でき、グローバルな識別子にはできません。
  • 行に保存した時刻、位置、その他の初回観測metadataを保持してください。後続の コールバックはmarkerとキャンペーン表示フィールドを更新するものであり、最初の観測は変更しません。
  • 後続のmarker missや不完全な重複payloadで現在の行が以前の状態に戻らないよう、 markerとリファイン後のキャンペーン値をマージしてください。
  • 別のmaterial_idが観測されると、前のセグメントは閉じられます。その境界より 後に届いた古いアクティビティへの遅延リファインは無視してください。

したがって、A(activity-1) -> A'(activity-1, marker) -> A(activity-1, marker miss)は1つの行です。一方、A(activity-1) -> B(activity-2) -> delayed A'(activity-1)ではBが現在のままとなり、履歴上のAは書き換えられません。

認識の停止

アプリでマイクキャプチャが不要になったら、認識を停止します。

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