Combate à Fraude Docs

Combate à Fraude Docs

    ›iOS

    Introdução

    • Início
    • Token de acesso
    • Checando as respostas assinadas
    • Checklist de integração

    Android

    • Primeiros passos
    • DocumentDetector
    • PassiveFaceLiveness
    • FaceAuthenticator
    • AddressCheck
    • DeviceAnalyser
    • Customização
    • Resultado de um SDK
    • Reduzindo o tamanho dos SDKs
    • Configuração dos sensores
    • Configuração de proxy
    • Configuração de preview
    • Formulário de segurança Google
    • Analytics
    • Notas de atualização

    iOS

    • Primeiros passos
    • DocumentDetector
    • PassiveFaceLiveness
    • FaceAuthenticator
    • AddressCheck
    • DeviceAnalyser
    • Customização
    • Configuração de proxy
    • Notas de atualização

    Flutter

    • Primeiros passos
    • DocumentDetector
    • PassiveFaceLiveness
    • FaceAuthenticator
    • Notas de atualização

    React Native

    • Primeiros passos

    Ionic

    • Primeiros passos
    • DocumentDetector
    • PassiveFaceLiveness
    • FaceAuthenticator
    • Notas de atualização

    Xamarin

    • Primeiros passos

    JavaScript

    • Primeiros passos
    • DocumentDetector
    • PassiveFaceLiveness
    • FaceAuthenticator
    • Erros do SDK
    • Customização
    • Eventos do SDK
    • Segurança
    • Notas de atualização (DocumentDetector)
    • Notas de atualização (PassiveFaceLiveness)
    • Notas de atualização (FaceAuthenticator)

    API

    • Primeiros passos
    • Assinatura de respostas
    • Registro Facial
    • Autenticação Facial
    • Prova de vida passiva
    • Autenticação de dispositivos
    • Comprovante de endereço digital

    PassiveFaceLiveness

    Câmera inteligente que captura uma selfie confiável do seu usuário utilizando inteligência artificial, capaz de detectar e reprovar foto de foto e gravações. Ideal para o seu onboarding.

    Permissões necessárias

    No arquivo info.plist, adicione as permissões abaixo:

    PermissãoMotivoObrigatória?
    Privacy - Camera Usage DescriptionPara capturar a selfie do usuárioSim

    Utilização

    Primeiro, instancie um objeto do tipo PassiveFaceLiveness:

    let passiveFaceLiveness = PassiveFaceLiveness.Builder(mobileToken: "mobileToken")
        // see the table below
        .build()
    

    PassiveFaceLiveness.Builder

    ParâmetroObrigatório?
    String mobileToken

    Token de utilização associado à sua conta da CAF
    Sim
    .setPeopleId(peopleId: String?)

    Identificador do usuário para fins de identificação de perfil fraudador
    Não, usado apenas para o analytics
    .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 1.5, respectivamente
    .setCaptureSettings( beforePictureInterval: TimeInterval?)

    Altera as configurações usadas para a captura da selfie. O parâmetro indica o tempo em milisegundos entre o encaixe correto do rosto e a efetiva captura da foto.
    Não. O padrão é 2.0
    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
    .showStepLabel(show: Bool)

    Mostra/esconde o label inferior central (que contém o nome dos document)
    Não. O padrão é true
    .showStatusLabel(show: Bool)

    Mostra/esconde o label central (que contém o status)
    Não. O padrão é true
    .setNetworkSettings(requestTimeout: TimeInterval)

    Altera as configurações de rede padrão
    Não. O padrão é 60 (segundos)
    .setProxySettings(proxySettings: ProxySettings?)

    Define as configurações de proxy, como explicado aqui
    Não. O padrão é nil
    .showPreview(_ show: Bool, title: String?, subtitle: String?, confirmLabel: String?, retryLabel: String?)

    Habilita/desabilita a pré-visualização de captura. Caso show possua true, após cada captura, o SDK disponibiliza uma tela para o usuário aprovar ou realizar a captura novamente. Nos parâmetros restantes, informe nil para utilização do valor padrão ou uma String para um texto personalizado.
    Não. O padrão é false
    .setCompressSettings(compressionQuality: CGFloat)

    Permite configurar a qualidade no processo de compressão. Por padrão, todas capturas passam por compressão. O método espera como parâmetro valores entre 0 e 1.0, sendo 1.0 a compressão com melhor qualidade (recomendado).
    Não. O padrão é 1.0
    .setMessageSettings(waitMessage: String?, stepName: String?, faceNotFoundMessage: String?, faceTooFarMessage: String?, faceNotFittedMessage: String?, holdItMessage: String?, invalidFaceMessage: String?, multipleFaceDetectedMessage: String?)

    Permite personalizar mensagens exibidas no balão de "status" durante o processo de captura e análise.
    Não. O padrão é esse
    .setPersonCPF(personCPF: String)

    Vincula uma tentativa de prova de vida a um cpf
    Não, o padrão é nil
    .setPersonName(personName: String)

    Vincula uma tentativa de prova de vida a um nome
    Não, o padrão é nil
    .setGetImageUrlExpireTime(expireTime: Time)

    Permite personalizar o tempo de expiração da imageUrl. O método recebe como parâmetro o enum Time com os tempos disponíveis.
    Não. O padrão é Time.DEFAULT
    .setManualCaptureSettings(enable: Bool, time: TimeInterval)

    Habilita/desabilita captura manual. O parâmetro time define o tempo para o modo de captura ser habilitado.
    Não. O padrão é desabilitado
    .enableMultiLanguage(_ enable: Bool)

    Habilita/desabilita suporte à multi-idioma
    Não. O padrão é habilitado
    .setVideoCaptureSettings(time: TimeInterval)

    Permite habilitar e configurar a captura por vídeo.
    Não. O padrão é desativado
    .setGetImageUrlExpireTime(expireTime: String)

    Define o tempo de duração da URL da imagem no servidor até ser expirada. Espera receber um intervalo de tempo entre "30m" à "30d".
    Exemplos:
  • setGetImageUrlExpireTime("30m"): Para configurar apenas minutos
  • setGetImageUrlExpireTime("24h"): Para configurar apenas hora(s)
  • setGetImageUrlExpireTime("1h 10m"): Para configurar hora(s) e minuto(s)
  • setGetImageUrlExpireTime("10d"): Para configurar dia(s)
  • Não. O padrão é 3h
    .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 é false e para timeManualCapture o padrão é 20 (segundos).
    .setMask(type: MaskType)

    Define o tipo de máscara utilizada nas capturas. Existem três tipos:
  • .standard, com o padrão pontilhado no formato do documento;
  • .empty, que remove totalmente a máscara.
  • Não. O padrão é .standard
    .setCurrentStepDoneDelay(currentStepDoneDelay: TimeInterval)

    Aplica delay na activity após a finalização de cada etapa. Esse método pode ser utilizado para exibir uma mensagem de sucesso na própria tela após a captura, por exemplo.
    Não. O padrão é false
    .setResolutionSettings(resolution: Resolution)

    Permite configurar a resolução de captura. O método espera como parâmetro uma Resolution, que possui as seguintes opções:
    Não. O padrão é hd1280x720
    .setEyesClosedSettings(threshold: Double, isEnable: Bool)

    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, e threshold, valor entre 0.0 e 1.0
    Não. O padrão é true e 0.5
    Resolution()Descrição
    lowEspecifica as configurações de captura adequadas para vídeo de saída e taxas de bits de áudio adequadas para compartilhamento em 3G
    mediumEspecifica as configurações de captura adequadas para as taxas de bits de áudio e vídeo de saída adequadas para compartilhamento via WiFi
    highEspecifica as configurações de captura adequadas para saída de áudio e vídeo de alta qualidade
    photoEspecifica as configurações de captura adequadas para saída de qualidade de foto de alta resolução
    inputPriorityEspecifica as configurações de captura adequadas para saída de qualidade de foto de alta resolução
    hd1280x720Especifica as configurações de captura adequadas para saída de vídeo com qualidade de 720p (1280 x 720 pixels)
    hd1920x1080Configurações de captura adequadas para saída de vídeo com qualidade 1080p (1920 x 1080 pixels)
    hd4K3840x2160Configurações de captura adequadas para saída de vídeo com qualidade 2160p (3840 x 2160 pixels)

    MessageSettings

    AtributoValor padrão
    waitMessage: String

    Mensagem exibida quando SDK está em processo de abertura
    "Aguarde..."
    stepName: String

    Label estática presente na parte inferior na activity
    "Registro facial"
    faceNotFoundMessage: String

    Mensagem exibida quando o algoritmo não reconhece um rosto
    "Não encontramos nenhum rosto"
    faceNotFittedMessage: String

    Mensagem exibida quando o rosto não está encaixado corretamente na máscara
    "Encaixe seu rosto"
    faceTooFarMessage: String

    Mensagem exibida quando há um rosto muito pequeno
    "Aproxime o rosto"
    multipleFaceDetectedMessage: String

    Mensagem exibida quando é detectado mais de um rosto
    "Mais de um rosto detectado"
    holdItMessage: String

    Mensagem exibida quando o usuário está na posição correta para captura
    "Segure assim"
    invalidFaceMessage: String

    Mensagem exibida quando a verificação de prova de vida recusa a selfie
    "Não conseguimos capturar seu rosto. Tente novamente."
    verifyingLivenessMessage: String

    Mensagem exibida durante a verificação de prova de vida.
    "Verificando selfie…"
    captureProcessingErrorMessage: String

    Mensagem exibida quando ocorre um problema no processamento ou erro na response da API.
    "Ops, tivemos um problema ao processar sua imagem. Tente novamente."
    eyesClosedMessage: String

    Mensagem exibida quando os dois olhos estão fechados.
    " Não use óculos escuros e mantenha os olhos abertos."

    Após a crição do objeto do tipo PassiveFaceLiveness, inicie o PassiveFaceLivenessController passando esse objeto por parâmetro no construtor:

    let passiveVC = PassiveFaceLivenessController(passiveFaceLiveness: passiveFaceLiveness)
    passiveVC.passiveFaceLivenessDelegate = self
    present(passiveVC, animated: true, completion: nil)
    

    Obtendo o resultado

    Para obter o resultado, você deve implementar o delegate PassiveFaceLivenessControllerDelegate em seu controller:

    
    class YouController: UIViewController, PassiveFaceLivenessControllerDelegate{
    
        // MARK: - Passive Faceliveness Delegates
        func passiveFaceLivenessController(_ passiveFacelivenessController: PassiveFaceLivenessController, didFinishWithResults results: PassiveFaceLivenessResult) {
            //Called when the process was successfully executed
            //The result variable contains the data obtained
    
        }
        
        func passiveFaceLivenessControllerDidCancel(_ passiveFacelivenessController: PassiveFaceLivenessController) {
            //Called when the process was canceled by the user
        }
        
        func passiveFaceLivenessController(_ passiveFacelivenessController: PassiveFaceLivenessController, didFailWithError error: PassiveFaceLivenessFailure) {
           //Called when the process terminate with an error
           //The error variable contains info about error
    
        }
    
    }
    

    PassiveFaceLivenessResult

    ParâmetroPode ser nulo?
    image: UIImage?

    Imagem do melhor frame retirado do vídeo
    Sim, em caso de erro
    capturePath: String?

    Caminho do vídeo no dispositivo
    Sim, em caso de erro
    imageUrl: String

    Url contendo a selfie em jpeg em nosso servidor temporário
    Sim, em caso de erro
    signedResponse: String

    Resposta assinada do servidor da CAF que confirmou que a selfie capturada possui um rosto verdadeiro (não é foto de foto ou vídeo). 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 ou servidor indisponível
    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 PassiveFaceLivenessResult.LENS_FACING_FRONT ou PassiveFaceLivenessResult.LENS_FACING_FRONT para validar.
    Não

    PassiveFaceLivenessFailure

    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çãoExemplo
    InvalidTokenReasonO token informado não é válido para o produto correspondenteParametrizar "test123" como token no builder do SDK
    PermissionReasonEstá faltando alguma permissão obrigatória para executar o SDKIniciar o DocumentDetector sem a permissão de câmera concedida
    NetworkReasonFalha de conexão com a internetO usuário ficou sem internet durante o facematch no FaceAuthenticator
    ServerReasonQuando uma requisição do SDK recebe um status code de falhaEm teoria, não deve acontecer. Se acontecer, comunique-nos!
    StorageReasonNão há espaço no armazenamento interno do dispositivo do usuárioQuando não há espaço no armazenamento interno durante a captura da foto do documento

    Exemplos

    Customizando o layout

    Você pode customizar o layout criando um objeto do tipo PassiveFaceLivenessLayout e passando por parâmetro no PassiveFaceLivenessBuilder:

    let layout = PassiveFaceLivenessLayout()
    
    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.setFont = UIImage(named: "my_font")
    
    let passiveFacelivenessConfiguration = PassiveFaceLivenessBuilder(apiToken: "API_TOKEN")
        .setLayout(layout: layout)
        .build()
    
    
    ← DocumentDetectorFaceAuthenticator →
    • Permissões necessárias
    • Utilização
      • PassiveFaceLiveness.Builder
      • MessageSettings
    • Obtendo o resultado
      • PassiveFaceLivenessResult
      • PassiveFaceLivenessFailure
    • Exemplos
      • Customizando o layout
    Combate à Fraude Docs
    2021 © Combate à Fraude - Todos os direitos reservados.
    COMBATEAFRAUDE TECNOLOGIA DA INFORMACAO LTDA CNPJ: 34.102.645/0001-57
    R. Tiradentes, 1077 - 5º andar - Centro, Venâncio Aires - RS, CEP 95800-000