Captura de Selfie
Esta guía está diseñada para ayudarlo a implementar el SDK Web de forma rápida y fácil. Se proporcionan conceptos básicos, ejemplos de implementación de SDK y de cómo interactuar con las API REST del motor biométrico.
A través de esta guía, se puede:
- Implementar la apertura de la cámara y la captura de imágenes;
- Manipular los datos de devolución;
- Utilizar la devolución del SDK con las API del motor biométrico.
Antes de comenzar, asegúrese de haber seguido las instrucciones paso a paso para instalar e importar el SDK en esta guía.
RECURSOS DISPONIBLES
SDK Web ofrece un componente de captura de selfies que contiene una silueta que ayuda al usuario a posicionarse correctamente para la foto. La captura de selfie se puede realizar de tres maneras, que son:
CAPTURA MANUAL
En este tipo de experiencia existe un frame de captura para ayudar al usuario a posicionar su rostro correctamente. Luego de posicionar correctamente, el usuario debe hacer clic en un botón para capturar la imagen.
El SDK no realiza ningún tipo de validación de lo que se está capturando. Si la imagen capturada no tiene un rostro biométricamente válido, las API rechazan el encrypted del motor biométrico.
CAPTURA AUTOMÁTICA
En este tipo de experiencia, el rostro del usuario se identifica automáticamente a través de algoritmos de visión computacional y se le ayuda a posicionarse correctamente dentro del área de captura. Después de posicionarse correctamente, la imagen se captura automáticamente.
Al ayudar al usuario a encuadrar su rostro en el área de captura, esta opción puede reducir los problemas al enviar el encrypted a las API del motor biométrico.
SMARTLIVE CON INTERACCIÓN FACETEC
En este tipo de experiencia, se instruye al usuario para que realice unos simples movimientos durante la captura, los cuales van acompañados de algoritmos de visión computacional para garantizar que en ese momento está tomando una foto.
Como requiere el movimiento del usuario, este tipo de captura tiene una capa extra de seguridad contra el fraude. Al igual que con la Captura Automática, la imagen se captura sin necesidad de que el usuario presione un botón. De esta forma se tiende a reducir los problemas a la hora de enviar el encrypted a las API backend del motor biométrico.
La activación de la funcionalidad se puede verificar en el portal del cliente, como se explica en este artículo.
IMPLEMENTACIÓN
Al seguir esta guía paso a paso, tendrá todo el potencial del SDK integrado en su aplicación Web.
INICIALIZAR EL SDK
Como primer paso, debes realizar 3 sencillos pasos en su proyecto:
Instancie un nuevo Builder:
const unicoCameraBuilder = new UnicoCheckBuilder();
Especifique el camino de los archivos adicionales (caso agregado en su proyecto):
Ya no es obligatorio incluir recursos adicionales en su aplicación si usa el SDK con Interactive LivenessA partir de la versión 3.18.0, para que el SDK busque automáticamente recursos adicionales, basta con que no esté implementado el método
setResourceDirectory
y la configuración de CSP para uso del SDK se aplican correctamente.unicoCameraBuilder.setResourceDirectory("/resources");
Especifique el camino de los archivos de los modelos de IA si usa la función de Cámara Inteligente.
unicoCameraBuilder.setModelsPath("https://meusite.com.br/models");
CONFIGURACIÓN DE IDIOMAS DE LA EXPERIENCIA DE CAPTURA
Es posible configurar la experiencia de los mensajes informativos de los marcos de captura cambiando su idioma. Para eso, utiliza el enumerador
LocaleTypes
que contiene los siguientes valores:LocaleTypes.PT_BR
: para Portugués (Brasil)LocaleTypes.ES_MX
: para Español(México)LocaleTypes.ES_ES
: para Español(España)LocaleTypes.EN_US
: para Inglés(EUA)A continuación, puedes ver un ejemplo de cómo implementar la configuración de idioma:
import {
...
UnicoCheckBuilder,
LocaleTypes
...
} from "unico-webframe"
unicoCameraBuilder.setLocale(LocaleTypes.EN_US);Configuración predeterminadaSi no se configura, por defecto, el SDK Web utiliza el Portugués (Brasil) como idioma principal.
InformativaSi desea personalizar las cadenas de forma remota, comuníquese con el CSM de la cuenta;
CONFIGURACIÓN DE ENTORNOS
Configuración predeterminadaEn caso de que no se haya configurado, por defecto el SDK web utiliza el entorno de producción.
Es posible configurar el entorno que se utilizará en la ejecución del SDK. Utilice el enumerado
SDKEnvironmentTypes
que contiene los siguientes enumerados:SDKEnvironmentTypes.PROD
: para entorno de producciónSDKEnvironmentTypes.UAT
: para entorno de homologaciónVea cómo implementarlo en el ejemplo a continuación:
import {
...
UnicoCheckBuilder,
SDKEnvironmentTypes
...
} from "unico-webframe"
unicoCameraBuilder.setEnvironment(SDKEnvironmentTypes.UAT);CONFIGURAR EL TAMAÑO DEL FRAME
PASO NO DEMANDADO PARA MODO SMARTLIVE CON INTERACCIÓN FACETEC Este paso solo es necesario si no está utilizando Smartlive con la interacción FaceTec, ya que en este modo el SDK renderiza un frame que ocupa todo el espacio de la pantalla y se ajusta automáticamente.
Si no está utilizando Smartlive con interacción FaceTec, SE RECOMIENDA que configure el tamaño del frame dentro de su aplicación, para optimizar el área de captura dentro de su WebApp. Consulte a continuación cómo realizar esta configuración para Web Desktop o Mobile.
SUGERENCIAMuchas veces el funcionamiento del frame puede verse afectado por algunos design-systems que tienen algún tipo de grid-system, como por ejemplo, bootstrap o material-ui. Para minimizar este riesgo, asegúrese de posicionar el frame (
id="box-camera"
) en algún lugar del código que no herede reglas indeseadas de css.- Desktop
- Mobile
En las versiones Web Desktop, es posible restringir el tamaño del frame para que no utilice toda la dimensión de su WebApp. Para ello, simplemente envuelva el frame (
id="box-camera"
) en otra tag html, como en el siguiente ejemplo:<div class="container">
<div id="box-camera"></div>
</div>Idealmente, debe intentar de mantener una proporción adecuada entre el alto y ancho, lo que facilita encuadrar el rostro del usuario. A continuación un ejemplo:
.container {
width: 800px;
height: 600px;
position: relative;
}Siguiendo el ejemplo anterior, el frame respeta el tamaño del elemento "padre", en este caso representado por el contenedor. De esta manera, tiene la flexibilidad de implementar el frame de la manera más conveniente para su aplicación (Como en un modal, por ejemplo).
PROBAR DIVERSOS TAMAÑOS DE PANTALLALas pruebas que cambian el tamaño de la pantalla a través del modo de desarrollador de su browser no funcionan. Se recomienda que este tipo de prueba se realice cambiando el tamaño de la ventana de su browser.
Para una view Web Mobile, se recomienda que el marco de captura ocupe el 100% de la pantalla para evitar problemas con los algoritmos de visión computacional. Si el área de captura está distorsionada, la función de captura automática (Cámara Inteligente) podría tener problemas en el cálculo del seguimiento facial de los usuarios.
Por lo tanto, se recomienda que en la view Web Mobile:
- El marco de captura ocupe el 100% de la pantalla del dispositivo (
100vw/vh
); - Evitar el scroll horizontal o vertical (esto se puede minimizar con un modal);
Puedes revisar un ejemplo de implementación a través del proyecto en esta página (Angular).
PRUEBAS CON SIMULADOR DE DISPOSITIVOSLas pruebas de dispositivos utilizando el modo desarrollador de tu navegador no funcionan, ya que la cámara utilizada por tu navegador es la misma de tu escritorio, que tiene una resolución totalmente diferente a la cámara de un dispositivo móvil. Se recomienda que este tipo de prueba se realice directamente en el dispositivo.
CONFIGURAR DISPOSICIÓN DEL FRAME
Esta es una etapa opcional, sin embargo, muy recomendable.
Para personalizar el frame de captura con Theme Builder, simplemente genere una instancia de la clase
UnicoThemeBuilder
e invoque los métodos que personalizan cada una de las propiedades del frame de captura, como se ejemplifica a continuación:const unicoTheme = new UnicoThemeBuilder()
.setColorSilhouetteSuccess("#0384fc")
.setColorSilhouetteError("#D50000")
.setColorSilhouetteNeutral("#fcfcfc")
.setBackgroundColor("#dff1f5")
.setColorText("#0384fc")
.setBackgroundColorComponents("#0384fc")
.setColorTextComponents("#dff1f5")
.setBackgroundColorButtons("#0384fc")
.setColorTextButtons("#dff1f5")
.setBackgroundColorBoxMessage("#fff")
.setColorTextBoxMessage("#000")
.setColorCancelButton("#0384fc")
.setColorProgressBar("#0384fc")
.setHtmlPopupLoading(`<div style="position: absolute; top: 45%; right: 50%; transform:
translate(50%, -50%); z-index: 10; text-align: center;">Carregando...</div>`)
.build();Después de generar el objeto de tema, como se ejemplificó anteriormente, debe pasarse como parámetro al método
setTheme
del builderunicoCameraBuilder
unicoCameraBuilder.setTheme(unicoTheme);
CÓMO PERSONALIZAR VIVENCIA INTERACTIVA CON TU LOGO
Para una experiencia de autenticación más asociada a tu marca, puedes insertar y personalizar tu logotipo en tiempo real.
Paso 1
En una carpeta pública (mismo lugar donde se agregan las carpetas de modelos y recursos) del proyecto, agregue una carpeta con el nombre
unico_custom_footer_logo
. En la carpetaunico_custom_footer_logo
agregue su archivo de logotipo en formato .svg con el nombreunico_custom_footer_logo.svg
Nota de precauciónLos nombres de carpeta y archivo deben ser correctos. De lo contrario, la implementación no funciona.
Paso 2
Haga referencia al nombre de la carpeta creada en la compilación del SDK usando el método
setCustomFooterLogoDirectory
, por ejemplo:unicoCameraBuilder.setCustomFooterLogoDirectory('/unico_custom_footer_logo')
Después de completar los pasos, la personalización estará lista y podrá ver su logotipo en el marco de captura interactivo de Liveness.
IMPLEMENTAR LAS FUNCIONES DE CALLBACK
Uno de los objetos que se debe pasar como parámetro al método responsable de renderizar el frame de captura es el callback. Este objeto deberá contener funciones de callback para casos de éxito y error, como se ejemplifica a continuación.
const callback = {
on: {
success: (obj) => {
console.log(obj.base64);
console.log(obj.encrypted);
},
error: (error) => {
console.error(error)
//confira na aba "Configurações" sobre os tipos de erros
}
}
};Este objeto es obligatorio y si no se implementa correctamente (incluyendo todos los eventos de
success
oerror
) genera una excepción, que si no se trata, se muestra en la consola del usuario.::alert importante
El atributo Encrypted está estrictamente destinado a enviar la imagen a través de las API de Unico. No debes abrir ni serializar este atributo, ya que sus características pueden cambiar sin previo aviso. Su uso debe ser exclusivo en interacciones con APIs para garantizar la integridad y seguridad de los datos. Unico no es responsable de ningún daño resultante de esta práctica, ya que pueden ocurrir cambios de manera impredecible. :::
Para obtener más detalles sobre los códigos de error devueltos por el SDK, consulte esta guía.
CONFIGURAR MODO DE CAPTURA E INICIAR LA CÁMARA
Para iniciar la cámara con las configuraciones realizadas hasta aquí, se debe crear una instancia del builder a través del método
build()
.const unicoCamera = unicoCameraBuilder.build();
Luego, con la cámara "montada", se debe configurar el modo de captura de la cámara.
Si no está utilizando el modo Smartlive con la interacción FaceTec, en este paso puede elegir entre el modo de captura Manual o Automático.
SUGERENCIASi está utilizando el modo Smartlive con la interacción FaceTec, la configuración del tipo de cámara se vuelve irrelevante, ya que este modo ofrece una experiencia predefinida que no se puede cambiar.
Sin embargo, se recomienda que configure un tipo de cámara en su builder (como se describe en este paso), porque si deshabilita el modo Liveness con la interacción FaceTec en su portal de clientes (y genera un nuevo JSON), no necesita cambiar su código.
La cámara se preparará a partir del método
prepareSelfieCamera()
, disponible a partir del builder. Este método recibe 2 parámetros:- El archivo JSON con sus credenciales (generado a través de este guía);
- Modo de cámara deseado, ellos son:
SelfieCameraTypes.NORMAL
para el modo cámara normal;SelfieCameraTypes.SMART
para el modo cámara inteligente;
Este método genera una promise que al ser resuelta, devuelve un objeto que se utiliza para realmente abrir la cámara a través del método
open
, que recibe como parámetro las funciones decallback
configuradas en este paso.CONVIENE RECORDARPara optimizar la apertura de la cámara se puede separar las llamadas de los métodos
prepareSelfieCamera()
yopen()
. Vea un ejemplo en esta POC realizada en React con TypeScript.- Captura Manual
- Captura Automática
Captura manual
Si desea utilizar la captura manual, cambie el parámetro
Unico.SelfieCameraTypes.NORMAL
al métodoprepareSelfieCamera
.Usando la clase UnicoConfig:
const config = new UnicoConfig()
.setProjectNumber("<YOUR_PROJECT_NUMBER>")
.setProjectId("<YOUR_PROJECT_ID>")
.setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
.setHostname("<YOUR_HOSTNAME>")
.setHostInfo("<YOUR_HOST_INFO>")
.setHostKey("<YOUR_HOST_KEY>");
unicoCamera.prepareSelfieCamera(
config,
SelfieCameraTypes.NORMAL
).then(cameraOpener => {
cameraOpener.open(callback);
}).catch(error => {
console.error(error);
// revisa la pestaña "Referencias" para posibles errores
});Usando el archivo json:
unicoCamera.prepareSelfieCamera(
"/services.json",
SelfieCameraTypes.NORMAL
).then(cameraOpener => {
cameraOpener.open(callback);
}).catch(error => {
console.error(error);
// revisa la pestaña "Referencias" para posibles errores
});Captura inteligente (automática)
Si desea utilizar la captura automática, cambie el parámetro
Unico.SelfieCameraTypes.SMART
al métodoprepareSelfieCamera
.Para a captura inteligente, os modelos de visão computacional também devem ser carregados através do método
setModelsPath
, conforme explicado no primeiro passo deste guia.Usando a classe UnicoConfig:
const config = new UnicoConfig()
.setProjectNumber("<YOUR_PROJECT_NUMBER>")
.setProjectId("<YOUR_PROJECT_ID>")
.setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
.setHostname("<YOUR_HOSTNAME>")
.setHostInfo("<YOUR_HOST_INFO>")
.setHostKey("<YOUR_HOST_KEY>");
unicoCamera.prepareSelfieCamera(
config,
SelfieCameraTypes.SMART
).then(cameraOpener => {
cameraOpener.open(callback);
}).catch(error => {
console.error(error);
// revisa la pestaña "Referencias" para posibles errores
});Usando el archivo json:
unicoCamera.prepareSelfieCamera(
"/services.json",
SelfieCameraTypes.SMART
).then(cameraOpener => {
cameraOpener.open(callback);
}).catch(error => {
console.error(error);
// revisa la pestaña "Referencias" para posibles errores
});CONFIGURAR EL MODO DE CAPTURA DE VIDA INTERACTIVA EN IFRAME
Es posible utilizar el SDK web con Interactive Liveness integrado en un iFrame. Para ello, es necesario realizar una implementación similar a la sección anterior al preparar la cámara.
La preparación de la cámara se llevará a cabo utilizando el método
prepareSelfieCameraForIFrame()
, también disponible en el constructor. Este método recibe los mismos parámetros queprepareSelfieCamera()
: const unicoCamera = unicoCameraBuilder.build();
const config = new UnicoConfig()
.setProjectNumber("<YOUR_PROJECT_NUMBER>")
.setProjectId("<YOUR_PROJECT_ID>")
.setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
.setHostname("<YOUR_HOSTNAME>")
.setHostInfo("<YOUR_HOST_INFO>")
.setHostKey("<YOUR_HOST_KEY>");
unicoCamera.prepareSelfieCameraForIFrame(
config,
SelfieCameraTypes.SMART
).then(cameraOpener => {
cameraOpener.open(callback);
}).catch(error => {
console.error(error);
// revisa la pestaña "Referencias" para posibles errores
});PREPARAR EL COMPORTAMIENTO DE LA CÁMARAEl método
prepareSelfieCameraForIFrame()
solo funciona si la implementación está en un iFrame; usarlo fuera de un iFrame genera el error73724
. Al igual que usar el métodoprepareSelfieCamera()
dentro de un iFrame genera el error73724
.IMPLEMENTACIÓN DEL ELEMENTO IFRAME
Para que la captura funcione correctamente es necesario implementar el elemento
<iframe>
como en el siguiente ejemplo:<iframe enable="fullscreen;camera;geolocalización" enableFullScreen src="your_app_url"></iframe>
COMPORTAMIENTO EN PANTALLA COMPLETA
Para realizar la captura, debe estar en modo de navegador de pantalla completa para que el SDK pueda cambiar su tamaño automáticamente. Por lo tanto, al ejecutar la captura, el SDK muestra una pantalla solicitando abrir el fotograma en modo de pantalla completa. Vea el siguiente ejemplo:
Después de permitir el uso de pantalla completa, el marco de captura se abrirá normalmente:
COMPORTAMIENTO EN IPHONESApple impide el uso de API de pantalla completa específicamente en iPhone (los iPad son aceptables). Por tanto, para capturas en iPhone, es necesario configurar tú mismo el posicionamiento del iFrame.
LLAMAR LAS APIS
La captura de las imágenes es solo la primera parte del viaje. Después de capturar la imagen, es necesario enviar el Encrypted generado a las API, seleccionando uno de los flujos disponibles detallados en Flujos.
AtenciónPor motivos de seguridad, el intervalo entre la generación del Encriptado y su envío a través de uno de los flujos disponibles debe ser de un máximo de 10 minutos. Los envíos realizados más allá de este período serán rechazados automáticamente por la API.
¿Dudas?
¿No encontró algo o aún necesita ayuda? Si ya es cliente o asociado, puede contactarnos a través del Centro de Ayuda.