Guia de tratamento de retornos

Apresenta as informações necessárias sobre os diferentes tipos de retornos que o SDK fornece através da Activity do Android.

Os retornos estão explicados em detalhes, incluindo: estrutura, significado e como utilizá-los para aprimorar a funcionalidade e a jornada do usuário em seu aplicativo.

Liveness 3D

Para receber o resultado do Liveness implemente o método onActivityResult ou o ActivityResultContracts.

Exemplo de implementação

Captura de dados pelo método do ActivityResultContracts:

private var startActivityForResult: ActivityResultLauncher<Intent>? = null

private fun registerLiveness3DActivity() {
    startActivityForResult = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result: ActivityResult ->
        when (result.resultCode) {
            Activity.RESULT_OK -> onLiveness3DResultOk(result)
            Activity.RESULT_CANCELED -> onLiveness3DResultCancelled(result)
        }
    }
}

Captura de dados pelo método de Intent:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
    if (requestCode == 3D_RESULT_REQUEST) {
        when (resultCode) {
            Activity.RESULT_OK -> onLiveness3DResultSuccess(data)
            Activity.RESULT_CANCELED -> onLiveness3DResultCancelled(data)
        }
    }
}

Sucesso

O valor RESULT_OK no retorno da Activity assegura que o desafio de prova de vida foi concluído sem erros e fornece um objeto com as informações pertinentes ao resultado da validação biométrica.

PropriedadeDescrição
validIndica a autenticidade das informações verificadas na prova de vida.
codIDCódigo identificador do tipo da transação.
causeIndica por qual motivo o processo finalizou sem sucesso (Biometria ou Prova de Vida).
protocoloProtocolo da transação de prova de vida.
scanResultBlobÉ um blob criptografado para uso do SDK no tratamento do retorno.

Tabela de codID

CódigoDescrição
1.0Prova de Vida Aprovada
300.1Prova de Vida Reprovada (face não identificada; necessário retentativa)
300.2Prova de Vida Reprovada (usuário bloqueado; retentativa não disponível)

Exemplo dos valores de resposta

{
    "valid": false,
    "codID": 300.1,
    "cause": "PROVA DE VIDA",
    "protocol": "201900039067",
    "scanResultBlob": "AAAAAaaaaa123456zzzzzzz"
}

Erro

O valor RESULT_CANCELED no retorno da Activity é devolvido quando alguma falha foi capturada no desafio de prova de vida e fornece um objeto que indica o erro ocorrido.

ErroDescrição
INVALID_APP_KEYApp Key inválido.
NO_CAMERA_PERMISSIONNão foi concedida permissão de acesso à câmera do aparelho.
NO_INTERNET_CONNECTIONSem conexão à Internet.
LIVENESS_NOT_COMPLETEDLiveness não completada pelo usuário
LIVENESS_NOT_INITIALIZEDNão foi possivel inicializar a appkey corretamente.
TRANSACTION_NOT_COMPLETEDNão foi possível concluir a transação, tente novamente.

Liveness 2D

Para receber o resultado do Liveness implemente o método onActivityResult ou o ActivityResultContracts.

Exemplo de implementação

Captura de dados pelo método do ActivityResultContracts:

private var startActivityForResult: ActivityResultLauncher<Intent>? = null

private fun registerFaceCaptchaActivity() {
    startActivityForResult = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result: ActivityResult ->
        when (result.resultCode) {
            Activity.RESULT_OK -> onFaceCaptchaResultSuccess(data)
            Activity.RESULT_CANCELED -> onFaceCaptchaResultCancelled(data)
        }
    }
}

Captura de dados pelo método de Intent:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
    if (requestCode == CAPTCHA_RESULT_REQUEST) {
        when (resultCode) {
            Activity.RESULT_OK -> onFaceCaptchaResultSuccess(data)
            Activity.RESULT_CANCELED -> onFaceCaptchaResultCancelled(data)
        }
    }
}

Sucesso

O valor RESULT_OK no retorno da Activity assegura que o desafio de prova de vida foi concluído sem erros e fornece um objeto com as informações pertinentes ao resultado da validação biométrica.

PropriedadeDescrição
validIndica a autenticidade das informações verificadas na prova de vida.
codIDCódigo identificador do tipo da transação.
causeIndica por qual motivo o processo finalizou sem sucesso (Biometria ou Prova de Vida).
uidProtocolProtocolo da transação de prova de vida.

Tabela de codID

CódigoDescrição
1.0Prova de Vida Aprovada
300.1Prova de Vida Reprovada (face não identificada; necessário retentativa)
300.2Prova de Vida Reprovada (usuário bloqueado; retentativa não disponível)

Exemplo dos valores de resposta

{
    "valid": false,
    "codID": 300.1,
    "cause": "PROVA DE VIDA",
    "uidProtocol": "201900039067"
}

Erro

O valor RESULT_CANCELED no retorno da Activity é devolvido quando alguma falha foi capturada no desafio de prova de vida e fornece um objeto que indica o erro ocorrido.

ErroDescrição
INVALID_BUNDLE_PARAMSParâmetros inválidos.
INVALID_APP_KEYApp Key inválido.
CERTIFACE_OFFCertiface offline.
NO_FRONT_CAMERAAparelho não possui câmera frontal.
NO_CAMERA_PERMISSIONNão foi concedida permissão de acesso à câmera do aparelho.
NO_INTERNET_CONNECTIONSem conexão à Internet.
REQUEST_ERRORErro na requisição.
CHALLENGE_INTERRUPTEDApp foi minimizado durante o uso do FaceCaptcha, isso faz com que o desafio seja encerrado.
LOW_MEMORYMemória do aparelho está baixa.
ERROR_CAMERA_SETUPErro ao configurar câmera.
ERROR_CAPTURE_PICTUREErro ao capturar foto.
INVALID_CUSTOM_FRAGMENTXML fornecido para a view customizada é inválido.

Doc Core

Para receber o resultado do Liveness implemente o método onActivityResult ou o ActivityResultContracts.

Exemplo de implementação

Captura de dados pelo método do ActivityResultContracts:

private var startActivityForResult: ActivityResultLauncher<Intent>? = null

private fun registerDocumentscopyActivity() {
    startActivityForResult = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result: ActivityResult ->
        when (result.resultCode) {
            Activity.RESULT_OK -> onDocumentscopyResultSuccess()
            Activity.RESULT_CANCELED -> onDocumentscopyCancelled(data)
        }
    }
}

Captura de dados pelo método de Intent:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    
    if (requestCode == DOCUMENTSCOPY_RESULT_REQUEST) {
        when (resultCode) {
            Activity.RESULT_OK -> onDocumentscopyResultSuccess()
            Activity.RESULT_CANCELED -> onDocumentscopyCancelled(data)
        }
    }
}

Sucesso

O valor RESULT_OK no retorno da Activity assegura que o desafio de prova de vida foi concluído sem erros.

Erro

O valor RESULT_CANCELED no retorno da Activity é devolvido quando alguma falha foi capturada no desafio de prova de vida e fornece um objeto que indica o erro ocorrido.

ErroDescrição
INVALID_BUNDLE_PARAMSParâmetros inválidos.
INVALID_APP_KEYApp Key inválido.
CERTIFACE_OFFCertiface offline.
NO_FRONT_CAMERAAparelho não possui câmera frontal.
NO_CAMERA_PERMISSIONNão foi concedida permissão de acesso à câmera do aparelho.
NO_INTERNET_CONNECTIONSem conexão à Internet.
REQUEST_ERRORErro na requisição.
CHALLENGE_INTERRUPTEDApp foi minimizado durante o uso do FaceCaptcha, isso faz com que o desafio seja encerrado.
LOW_MEMORYMemória do aparelho está baixa.
ERROR_CAMERA_SETUPErro ao configurar câmera.
ERROR_CAPTURE_PICTUREErro ao capturar foto.
INVALID_CUSTOM_FRAGMENTXML fornecido para a view customizada é inválido.