Skip to main content

Video Recorder

Descripción General

El SDK VideoRecorderUI permite capturar un video selfie de 15 segundos utilizando la cámara frontal. Además, valida un token con un endpoint de verificación antes de permitir la grabación. Una vez finalizado, devuelve la ruta local del video en el dispositivo para que la app host pueda gestionar el archivo (por ejemplo, subirlo a un servidor).

Funcionalidad Principal

  1. Verificación de Token:

• El SDK recibe un token y una URL de verificación.

• Internamente realiza la consulta para verificar si el token está autorizado.

• Si el token es válido, procede a la grabación de video; de lo contrario, se cierra.

  1. Grabación de Video:

• Se solicita el uso de la cámara frontal y el micrófono para grabar un clip de 15 segundos.

• Durante la grabación se muestra un indicador con un contador regresivo y una animación de pulso que indica que la cámara está grabando.

• Al finalizar, el SDK notifica a la aplicación host y le devuelve la ruta donde se guardó el video localmente.

  1. Retorno de Resultados:

• Al completarse la grabación (o cancelarse), el flujo regresa al host. Se entrega un callback onFinish indicando si la operación fue exitosa (isSuccessful) y la ruta del archivo de video (route).

• Si isSuccessful es false, se entiende que hubo un error o el usuario canceló el flujo.

Compatibilidad

LenguajeVersión iOS
SwiftUIiOS 13+

Incrustar y firmar el framework

En Xcode iremos a la pestaña “General” en el target de la aplicación nos ubicamos en la sección “Frameworks, Libraries and Embedded Content” y en el nombre del framework VideoRecorderUI.xcframework seleccionamos la opción “Embed & Sign” de la columna “Embed”.

Requisitos Previos

Permisos de cámara y micrófono: Asegúrate de agregar los siguientes permisos en la sección Info del target del proyecto o al archivo Info.plist:

Info.plist
<key>NSCameraUsageDescription</key>
<string>Por favor, concede permisos al uso de la cámara. By Dicio</string>

<key>NSMicrophoneUsageDescription</key>
<string>Por favor, concede permisos al uso del micrófono para la prueba de vida. Liveness by Dicio</string>

Esto es fundamental para que iOS muestre el diálogo de solicitud de acceso.

Uso en SwiftUI

  1. Importar el Framework En el archivo donde vayas a invocar la grabación de video, importa el framework:
import VideoRecorderUI
  1. Inicializar y Presentar la Vista de Grabación Para iniciar el proceso, creas una instancia de la vista principal VideoRecorderVC, proporcionándole:

token: el valor que obtuviste de tu servicio/entorno Dicio.

urlVerify: la URL a donde se validará el token.

onFinish: un callback que recibirá (isSuccessful, route) al terminar.

Ejemplo básico en SwiftUI:

struct VideoRecorderExample: View {
@State private var showRecorder = false
@State private var resultPath: String = ""

var body: some View {
VStack {
Button("Iniciar grabación") {
showRecorder = true
}
// Presenta el framework a pantalla completa
.fullScreenCover(isPresented: $showRecorder) {
VideoRecorderVC(
token: "TU_TOKEN_PROPORCIONADO",
urlVerify: "https://api.devdicio.net:8444/v1/sec_dev_pagos_middleware",
onFinish: { isSuccessful, route in
if isSuccessful {
print("Video guardado en: \(route)")
resultPath = route
} else {
print("Error o cancelación")
}
}
)
}

Text("Ruta del último video: \(resultPath)")
.font(.footnote)
}
}
}

Explicación

• @State private var showRecorder = false controla si la vista del framework se presenta en fullScreenCover.

• Cuando showRecorder es true, se lanza VideoRecorderVC.

• El callback onFinish regresa el resultado:

  • isSuccessful = true => Se grabó con éxito, y route contendrá la ruta local.
  • isSuccessful = false => Hubo un error o el usuario canceló.
  1. Manejar el Resultado de la Grabación El block onFinish se ejecuta al terminar la grabación o si el flujo se cierra. Por ejemplo:
onFinish: { isSuccessful, route in
if isSuccessful {
// El video se guarda en 'route'
print("Video guardado en: \(route)")
// Aquí puedes subirlo a tu servidor o usarlo como necesites.
} else {
// Hubo algún problema o se canceló
print("Error o cancelación")
}
}
Nota: El archivo de video permanece en el directorio temporal o documentos de tu aplicación (dependiendo de la implementación exacta en el SDK).
Asegúrate de gestionar su ciclo de vida según tus necesidades (por ejemplo, copiarlo a otro directorio seguro o subirlo inmediatamente si no deseas almacenarlo en local).

Ejemplo Completo

import SwiftUI
import VideoRecorderUI

struct VideoRecorder: View {
@State private var showRecorder = false
@State private var resultPath: String = ""

var body: some View {
VStack {
Button("Iniciar grabación") {
showRecorder = true
}
.fullScreenCover(isPresented: $showRecorder) {
// Llamada al framework
VideoRecorderVC(
token: AppConfig.shared.bearerToken,
urlVerify: AppConfig.shared.laUrlVerifica,
onFinish: { isSuccessful, route in
// Maneja el resultado
if isSuccessful {
print("Video guardado en: \(route)")
resultPath = route
} else {
print("Error o cancelación")
}
}
)
}

Text("Ruta del último video: \(resultPath)")
.font(.footnote)
}
}
}
  1. El botón Iniciar grabación abre la hoja completa.
  2. Dentro de esa hoja, VideoRecorderVC ejecuta internamente la verificación del token y, si todo es correcto, realiza la grabación de video.
  3. Al concluir (ya sea éxito o error), cierra la hoja y llama a tu callback.

Consideraciones Adicionales

Manejo de Errores: El SDK internamente maneja casos de permisos denegados o token no autorizado. En caso de que el usuario deniegue la cámara o micrófono, se le mostrará una alerta indicándole que debe conceder permisos.

Estilos y UI: Puedes personalizar la presentación (por ejemplo, usar .sheet en lugar de .fullScreenCover), siempre que el contenedor sea una vista SwiftUI.

Integración en Proyectos Existentes: Asegúrate de que tu proyecto cumpla con iOS 13+ (o la versión que hayas definido). Para versiones anteriores, este SDK no es compatible.

Versionado: Verifica la versión específica de VideoRecorderUI.xcframework que recibas, en caso de que existan actualizaciones o cambios en la API.