Implementación
Esta guía utiliza iOS SDK 5.1.0. Consulte las instrucciones de instalación y actualización.
Configurar el reconocedor
Importe el framework SORI y configure el reconocedor compartido con las credenciales de su aplicación SORI.
import SORI
let recognizer = SORIAudioRecognizer.shared()
let configuration = SORIAudioRecognizer.Configuration(
applicationID: "YOUR_SORI_APP_ID",
secretKey: "YOUR_SORI_SECRET_KEY"
)
recognizer.configure(configuration)Iniciar el reconocimiento
Llame a startRecognition(repeat:handler:) después de realizar la configuración. El handler recibe el payload de la campaña que devuelve la API de SORI cuando se reconoce un material registrado.
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)
}Activar el reconocimiento de Audio Marker
El reconocimiento de Audio Marker está desactivado de forma predeterminada. En el modo predeterminado, el reconocimiento en iOS utiliza únicamente huellas digitales de audio. Actívelo solo si su configuración de SORI Console utiliza Audio Markers.
let configuration = SORIAudioRecognizer.Configuration(
applicationID: "YOUR_SORI_APP_ID",
secretKey: "YOUR_SORI_SECRET_KEY"
)
configuration.audiomarker = true
recognizer.configure(configuration)Para mostrar el marcador actual y enriquecer actividades posteriores, use las API de estado y resultados de actividad gestionadas por el SDK. El SDK gestiona la caducidad, los atributos de marcador y las actualizaciones de la misma actividad. Los callbacks de campaña y descubrimiento existentes siguen siendo compatibles.
Renderizar una cronología ordenada de actividad continua
La guía siguiente corresponde a los callbacks de campaña existentes. Para los nuevos resultados de actividad aceptados por el SDK, use las reglas de actualización por ID exacto de Estado de Audio Marker y resultados de actividad; estos resultados pueden actualizar la actividad histórica correspondiente.
El handler de reconocimiento puede devolver primero una campaña de un material y después una campaña refinada mediante marker para esa misma actividad. Muestre el primer resultado inmediatamente, pero mantenga un segmento actual explícito en el estado de la aplicación. El diccionario público del payload puede proporcionar activity_id, material_id y trait.marker.
- Un
activity_idno vacío solo puede refinar la fila actual con ese ID exacto. No busque en toda la cronología por ID de actividad, campaña o material. - Los payloads anteriores pueden omitir
activity_id. En ese caso, un fallback mediantematerial_idsolo es seguro para la fila actual y no debe convertirse en una identidad global. - Conserve la hora, la posición y los demás metadatos de la primera observación guardados para la fila. El callback posterior actualiza los campos de marker y presentación de campaña, no la observación original.
- Combine el marker y los valores de campaña refinados para que un marker ausente o un payload duplicado menos completo no degrade la fila actual.
- Un
material_iddiferente cierra el segmento anterior. Ignore los refinamientos retrasados de una actividad anterior después de ese límite.
Por tanto, A(activity-1) -> A'(activity-1, marker) -> A(activity-1, marker miss) es una sola fila, mientras que A(activity-1) -> B(activity-2) -> delayed A'(activity-1) mantiene B como actual y no reescribe la A histórica.
Detener el reconocimiento
Detenga el reconocimiento cuando su aplicación ya no necesite capturar audio del micrófono.
recognizer.stopRecognition()Reconocimiento en segundo plano
Si su aplicación necesita reconocimiento en segundo plano, añada audio a UIBackgroundModes en Info.plist. El reconocimiento en segundo plano funciona mientras la aplicación está en ejecución. Si la aplicación finaliza, el reconocimiento también se detiene.
Gestión de errores
Los errores de reconocimiento se entregan mediante el handler de reconocimiento y las notificaciones de error de SORI. Para observar estas notificaciones, regístrese en SORIError.errorNotificationName():
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")
}
}