FaceAuthenticator
Facematch com prova de vida do usuário do seu app, ideal para fluxos de login ou de operações financeiras valiosas.
Permissões necessárias
No arquivo info.plist
, adicione as permissões abaixo:
Permissão | Motivo | Obrigatória? |
---|---|---|
Privacy - Camera Usage Description | Para capturar a selfie do usuário | Sim |
Utilização
Primeiro, instancie um objeto do tipo FaceAuthenticator
:
let faceAuthenticator = FaceAuthenticator.Builder(mobileToken: "mobileToken")
// see the table below
.build()
FaceAuthenticator.Builder
Parâmetro | Obrigatório? |
---|---|
String mobileToken Token de utilização associado à sua conta da CAF | Sim |
.setPeopleId(_ cpf: String) Identificador do usuário no qual está cadastro o rosto do usuário que será realizado o facematch. Atualmente, esse valor só aceita o CPF do usuário | Sim |
.setAnalyticsSettings(useAnalytics: Bool) Habilita/desabilita a coleta de dados para o analytics | Não, o padrão é true |
.setStabilitySensorSettings(message: String?, stabilityThreshold: Double?) Altera as configurações padrão do sensor de estabilidade. O limiar desse sensor é na variação das últimas duas acelerações coletadas do dispositivo. | Não. O padrão é "Mantenha o celular parado" e 0.3, respectivamente |
setLayout(layout: PassiveFaceLivenessLayout) Troca as máscaras do documento de sucesso, falha e normal. Também permite alterar os botões de som e cancelar, que ficam no topo da tela | Não. |
.setColorTheme(color: UIColor) Alterar a cor dos botões de som e cancelar que ficam no topo da tela. Também altera a cor do botão dos popups, inflados antes de cada documento. | Não. |
.enableSound(enableSound: Bool) Habilita/desabilita sons e o ícone de som no SDK | Não. O padrão é true |
.setNetworkSettings(requestTimeout: TimeInterval) Altera as configurações de rede padrão | Não. O padrão é 60 (segundos) |
.setImageCaptureSettings(beforePictureInterval: TimeInterval!, enableManualCapture: Bool, timeManualCapture: TimeInterval) Permite configurar a captura por imagem. O atributo beforePictureInterval define o tempo que o usuário deve ficar com a face encaixada na máscara. O atributo enableManualCapture habilita ou desabilita a captura manual. E timeManualCapture define o tempo em que a captura manual será ativada. | Não. O padrão é habilitado. Para beforePictureInterval o padrão é 2 (segundos). Para enableManualCapture o padrão é true e para timeManualCapture o padrão é 10 (segundos). |
.setVideoCaptureSettings(time: TimeInterval) Método para configuração de captura por vídeo | Não. |
.setEyesClosedSettings(threshold: Double, isEnable: Bool, errorMessage: String) Permite customizar as configurações de validação de olhos abertos do SDK. O método espera como parâmetro isEnable para habilitar ou não a validação, threshold , valor entre 0.0 e 1.0, e errorMessage, para definir a mensagem para caso sejam detectados olhos fechados. | Não. O padrão é true , 0.5 é "Não use óculos escuros e mantenha os olhos abertos" |
Após a criação do objeto do tipo FaceAuthenticator
, você pode iniciar o FaceAuthenticatorController
passando esse objeto por parâmetro no construtor:
let faceAuthController = FaceAuthenticatorController(faceAuthenticator: faceAuthenticator)
faceAuthController.faceAuthenticatorDelegate = self
present(faceAuthController, animated: true, completion: nil)
Obtendo o resultado
Para obter o resultado, você deve implementar o delegate FaceAuthenticatorControllerDelegate
em seu controller:
class YouController: UIViewController, FaceAuthenticatorControllerDelegate{
// MARK: Delegates Face Auht
func faceAuthenticatorController(_ faceAuthenticatorController: FaceAuthenticatorController, didFinishWithResults results: FaceAuthenticatorResult) {
//Called when the process was successfully executed
//The result variable contains the data obtained
}
func faceAuthenticatorControllerDidCancel(_ faceAuthenticatorController: FaceAuthenticatorController) {
//Called when the process was canceled by the user
}
func faceAuthenticatorController(_ faceAuthenticatorController: FaceAuthenticatorController, didFailWithError error: FaceAuthenticatorFailure) {
//Called when the process terminate with an error
//The error variable contains info about error
}
}
FaceAuthenticatorResult
Parâmetro | Pode ser nulo? |
---|---|
authenticated: Bool Flag que indica se a selfie do usuário passou no facematch com a foto armazenada no servidor da CAF com o respectivo CPF | Não |
signedResponse: String Resposta assinada do servidor da CAF que realizou o facematch. Utilize esse parâmetro caso queira uma camada extra de segurança verificando se a assinatura da resposta não está quebrada, provocada por uma interceptação da requisição. Se estiver quebrada, há um grande indício de interceptação da requisição | Sim, em caso de erro |
trackingId: String? Identificador dessa execução em nossos servidores. Se possível, salve este campo e mande-o junto para nossa API. Assim, teremos mais dados de como o usuário se comportou durante a execução | Sim, caso o usuário configure useAnalytics = false ou as chamadas de analytics não funcionem |
lensFacing: Int Define a face da câmera que foi utilizada. Utilize FaceAuthenticatorResult.LENS_FACING_FRONT ou FaceAuthenticatorResult.LENS_FACING_FRONT para validar. | Não |
FaceAuthenticatorFailure
Superclasse que leva ao encerramento do SDK. Para saber qual foi o motivo, descubra qual a classe do objeto com o método isKindOfClass()
, equivalente ao instanceof
em Java e ao is
em Dart:
isKindOfClass() | Descrição | Exemplo |
---|---|---|
InvalidTokenReason | O token informado não é válido para o produto correspondente | Parametrizar "test123" como token no builder do SDK |
PermissionReason | Está faltando alguma permissão obrigatória para executar o SDK | Iniciar o DocumentDetector sem a permissão de câmera concedida |
NetworkReason | Falha de conexão com a internet | O usuário ficou sem internet durante o facematch no FaceAuthenticator |
ServerReason | Quando uma requisição do SDK recebe um status code de falha | Em teoria, não deve acontecer. Se acontecer, comunique-nos! |
StorageReason | Não há espaço no armazenamento interno do dispositivo do usuário | Quando não há espaço no armazenamento interno durante a captura da foto do documento |
InvalidFaceReason | Não existe um registro facial para o peopleId informado | Quando o usuário realizar uma autenticação com um peopleId que não possui registro facial |
Exemplos
Customizando o layout
Você pode customizar o layout criando um objeto do tipo FaceAuthenticatorLayout
e passando por parâmetro no FaceAuthenticatorBuilder
:
let layout = FaceAuthenticatorLayout()
layout.changeMaskImages(
greenMask: UIImage(named: "my_green_mask"),
whiteMask: UIImage(named: "my_white_mask"),
redMask: UIImage(named: "my_red_mask"))
layout.changeSoundImages(soundOn: UIImage(named: "my_sound_on_image"),
soundOff: UIImage(named: "my_sound_off_image"))
layout.closeImage = UIImage(named: "my_close_image")
layout.buttonSize = CGFloat(50)
layout.buttonContentMode = .scaleAspectFill
let faceAuthenticatorConfiguration = FaceAuthenticatorBuilder(apiToken: "API_TOKEN")
.setLayout(layout: layout)
.build()