Biometric ID - SDK - IOS¶
En este documento encontrará una explicación de cómo se realiza la integración con el SDK BiometricID en iOS
Pre requisitos¶
- Para hacer uso del SDK debe contar con un API Key válido.
- El Bundle Identifier debe ser previamente autorizado para activar el uso del SDK
Flujo de uso¶
El SDK está diseñado para utilizarse de manera secuencial, el flujo es el siguiente:
flowchart LR
A([Consulta de documento]) --> B([Verificación biometrica])
B --> C([Consulta de información adicional])
Modo de uso¶
Existen 2 formas de usar el SDK
- Haciendo uso de los View predefinidos
- Haciendo uso de los ViewModel predefindos
Nota
El SDK está diseñado usando el patron MVVM
- Puede descargar un demo desde acá: Demo.zip
Ejecución del demo¶
Para correr el proyecto demo incluido en Demo.zip, configure primero las credenciales:
- Ubique el archivo
Config.xcconfig.exampley cópielo con el nombreConfig.xcconfig. - Edite
Config.xcconfigy reemplace los valores deAPI_KEYyUSER_EMAILcon las credenciales que le fueron proporcionadas.
Nota
El archivo Config.xcconfig está incluido en .gitignore para evitar commitear credenciales. El valor de API_URL ya viene preconfigurado con el endpoint público de la API y normalmente no requiere cambios.
Instalación del SDK¶
Prerequisitos de instalación¶
- Debe descargar el zip con los componentes de instalación Demo.zip
Instalación¶
Siga estos pasos para instalar (o actualizar) el SDK en su proyecto:
1. Agregue el SDK como dependencia SPM al proyecto.
2. Agregue los Assets (runtime_data) al proyecto.
Arrastre la carpeta de assets runtime_data al proyecto en Xcode.
Importante: los assets deben quedar como file reference individuales
Al agregar los assets, seleccione la opción "Create groups" (grupos amarillos), no "Create folder references" (carpeta azul).
Cada archivo debe quedar referenciado de forma individual como una file reference (icono de grupo amarillo). Si los recursos quedan como una folder reference (carpeta azul), el SDK no podrá localizarlos en tiempo de ejecución y la captura biométrica fallará.
3. Copie los FaceModels a la raíz del target de la aplicación.
Los archivos de modelo facial (FaceModels) deben ubicarse en el nivel raíz del target de la app. Si no se encuentran en esa ubicación, el reconocimiento facial no se inicializará correctamente.
4. Verifique que el SDK esté embebido y firmado.
En Targets → General → Frameworks, Libraries, and Embedded Content, asegúrese de que el SDK aparezca con la opción Embed & Sign. Si está configurado como "Do Not Embed", la aplicación fallará al iniciar por no encontrar el framework.
Actualización del SDK¶
Para actualizar el SDK a una nueva versión, repita los pasos de instalación:
- Actualice la versión de la dependencia SPM.
- Vuelva a copiar los assets (
runtime_data) respetando que queden como file reference individuales (grupos amarillos, no carpeta azul). - Vuelva a copiar los
FaceModelsa la raíz del target de la app si cambiaron. - Confirme que el framework permanezca en modo Embed & Sign.
Parametros de configuración¶
Debe inicializar el SDK con el ApiKey y la Url del api
let apiUrl = "https://apibiometricid.racsa.go.cr/bioapi"
let apiKey = ""
BiometricIdSDK.Initialize(URL: apiUrl, API_KEY: apiKey, SHOW_DEBUG: false)
Views¶
En caso de hacer uso de las vistas, estas están diseñadas con la siguiente secuencia, sin embargo cada una funciona de manera independiente, permitiendo al desarrollador control en el paso a paso de las vistas.
flowchart LR
A([DocumentQueryView]) --> B([BiometricQueryView])
B --> C([BiometricMatchView])
DocumentQueryView¶
Esta vista permite ingresar los datos de consulta, en Tipo de documento y Número de documento
El constructor de la vista contiene 3 parametros:
- model
Debe ser de tipo DocumentQueryViewModel
- onNext
Acción a ser llamada al oprimirse el botón de Continuar
- content
El contenido entre el TextField de número de documento y el Button de Continuar es un ViewContent que permite ingresar lo que se necesite.
@ObservedObject var documentQueryViewModel = DocumentQueryViewModel()
DocumentQueryView(
model: documentQueryViewModel,
onNext:{
print("onNext")
//Paso sugerido:
//Usar documentQueryViewModel.Query para consultar el documento
})
{
VStack{
Text("Antes de continuar").padding(.bottom, 20)
Text("Por favor, lea atentamente lo siguiente.\nAl continuar, usted confirma que está de acuerdo con las siguientes declaraciones:").padding(.bottom, 20)
Link("Ver términos y condiciones", destination: URL(string: "https://biometricid.racsa.go.cr/terminoscondiciones")!).padding(.bottom, 20)
Text("He leído y estoy de acuerdo con estos términos y condiciones").padding(.bottom, 20)
}
}
BiometricQueryView¶
Esta vista permite iniciar la verificación biometrica por reconocimiento facial o captura de huella según estén disponibles los metodos de validación para el documento consultado.
Info
A partir de esta vista se puede identificar el ID asociado a esta transacción.
var available = DocumentAvailableResponse()
Nota
DocumentAvailableResponse es la respuesta obtenida al consultar si un documento está disponible para su verificación biometrica usando DocumentQueryViewModel.Query
var biometricQueryViewModel = BiometricQueryViewModel(model: available, documentNumber: documentQueryViewModel.documentNumber, documentType: documentQueryViewModel.documentType))
BiometricQueryView(model: biometricQueryViewModel, onFaceCaptured: { image in
//la imagen del rostro fue capturada
biometricQueryViewModel.QueryByPhoto(fullFacePhoto: image) { response in
//Resultado de verificación biometrica
onBiometricQueryResponse(response: response, viewModel: viewModel)
}
}, onFingerCaptured: { finger , fingerPrint in
//la imagen de la huella fue capturada
biometricQueryViewModel.QueryByFinger(finger: finger, fingerPrint: fingerPrint) { response in
//Resultado de verificación biometrica
onBiometricQueryResponse(response: response, viewModel: viewModel)
}
}, onFaceFailed: { error in
//La captura del rostro falló
}, onFingerFailed: { error
in
//La captura de la huella falló
})
func onBiometricQueryResponse(response:Result<BiometricVerificationResponseBase?, Error>, viewModel:BiometricQueryViewModel){
switch response {
case .success(let data):
if let match = data as? BiometricVerifiedResponse, match.hit == true
{
//La verificación biometrica fue exitosa
//Paso sugerido, Mostrar resultado en BiometricMatchView
}else{
//La verificación biometrica no exitosa
if(data?.remainingTries ?? 0 <= 0){
//Se alcanzó el limite de intentos
}else{
//Aún cuenta con intentos disponibles
}
}
break;
case .failure(let error):
if let validationProblem = error as? ValidationProblemDetails{
//Ocurrió un error de validación
if(validationProblem.errors != nil && !validationProblem.errors!.isEmpty){
//Fallas de validación de entrada
var message = "";
validationProblem.errors?.forEach({ key, errors in
message += errors.joined(separator: "\n")
})
}else {
//Ocurrió otro error de validación
}
} lse if let problem = error as? ProblemDetails {
//Ocurrió un error en el servidor
}else{
//Ocurrió un error inesperado o de red
}
}
}
BiometricMatchView¶
Esta vista permite mostrar el resultado de la verificación biometrica exitosa en un formato estandarizado.
var biometricMatchViewModel = BiometricMatchViewModel(
currentBiometricResult: match,
currentQuery: biometricQueryViewModel.currentQuery,
documentNumber: biometricQueryViewModel.documentNumber)
BiometricMatchView(model: biometricMatchViewModel,
onFinish: {
//Acción a ser ejecutada al finalizar el contador de tiempo
},
onGetMoreInformation: {
//Acción a ser ejecutada al oprimir el botón de más información
//Paso suguerido:
//Mostrar fuentes adicionales disponibles
})
ViewModels:¶
DocumentQueryViewModel¶
- Query
Metodo que permite ejecutar la consulta de documento.
documentQueryViewModel.Query(completionHandler: { response in
switch response {
case .success(let data):
if let available = data as? DocumentAvailableResponse, available.biometricAvailable == true
{
//El número de documento está disponible para su consulta
//Paso sugerido:
//Mostrar view para capturar huella o foto del rostro según corresponda.
}else{
//El número de documento no está disponible para su verificación
}
case .failure(let error):
if let validationProblem = error as? ValidationProblemDetails{
//Ocurrio un error de validación de la entrada
}else if let problem = error as? ProblemDetails {
//"Ocurrió un error en el servidor")
}else{
//Ocurrió un error inesperado
}
}
})
BiometricQueryViewModel¶
- Constructor
Recibe como modelo la respuesta a la llamada de documentQueryViewModel.Query cuando el documento esta disponible para su consulta.
init(model:DocumentAvailableResponse,
documentNumber:String,
documentType:DocumentTypeEnumeration)
- StartFaceCapture
Inicia la camara del dispositivo para el proceso de captura facial.
Nota
Solo funciona en dispositivos fisicos. En caso de usar el SDK para emulador, esta función no ejecuta código
func StartFaceCapture(
isUseBackCamera:Bool,
isAutoCapture:Bool,
isFastCapture:Bool,
isoEnabled:Bool,
isGetFullFrontalCrop:Bool,
useCompresion:Bool,
onFaceCaptured: @escaping (NSData?,[String],[String]) -> Void,
onCancelled: @escaping() -> Void,
onFaceCaptureFailed: @escaping (String) -> Void,
onTimedout: @escaping (NSData?) -> Void) -> Void
Ejecuta la consulta de verificación biometrica por rostro usando una imagen en base64
func QueryByPhoto(
fullFacePhoto:String,
completionHandler:
@escaping (Result< BiometricVerificationResponseBase?, Error>) -> Void
Inicia la camara del dispositivo para el proceso de captura de huella.
Nota
Solo funciona en dispositivos fisicos. En caso de usar el SDK para emulador, esta función no ejecuta código
func StartFingerCapture(
finger:Finger,
onFingersCaptured: @escaping ([CapturedFinger]) -> Void,
onFingerCaptureFailed: @escaping (String)->Void) -> Void
Ejecuta la consulta de verificación biometrica por huella usando una huella WSQ en base64
func QueryByFinger(
finger:Finger,
fingerPrint:String,
completionHandler:
@escaping (Result< BiometricVerificationResponseBase?, Error>) -> Void
BiometricMatchViewModel¶
-
Constructor
Recibe el resultado exitoso de una verificación biometrica y el resultado exitoso de la consulta de documento
init(currentBiometricResult: BiometricVerifiedResponse,
currentQuery:DocumentAvailableResponse,
documentNumber:String)
Novedades / Historial de versiones¶
Resumen de las mejoras incluidas en cada versión de la aplicación Biometric ID RACSA.
Versión 1.63 — 25/05/2026¶
Mejora en la velocidad de captura
Se optimizaron los algoritmos de detección y procesamiento de imagen, reduciendo el tiempo de respuesta entre la colocación del dedo y la confirmación de captura exitosa.
Opción para captura de forma vertical
Se activa la posibilidad de captura de los dedos desde el frente del dispositivo, aumentando el área de captura en la pantalla. Se permite la captura únicamente en modo vertical (Portrait).
Versión 1.60 — 30/04/2026¶
Mejora en la velocidad de captura
Aumento en la rapidez de la autocaptura de huellas. Se mantienen las guías visuales de posicionamiento del dedo en pantalla durante todo el proceso.
Validación cantidad de dígitos tanto para Cédula como para DIMEX
La consulta de Nacionales exige 9 caracteres (cédula) y la de Extranjeros 12 caracteres (DIMEX) antes de iniciar la transacción, evitando errores por datos incompletos.
Tiempo de inactividad de sesión ampliado
El inicio de sesión permanece activo hasta 8 horas de inactividad antes de solicitar nuevamente las credenciales por seguridad.