Guia de uso e integração

Apresenta as informações necessárias para uso e integração do SDK Oiti em seus aplicativos Android.

Siga as instruções detalhadas e aproveite os recursos avançados oferecidos por esta ferramenta para melhorar a segurança e a precisão da autenticação biométrica e verificação de documentos.

⚠️

Appkey em fluxos com Liveness 2D/3D + Documentoscopia

Cada appkey está associada a uma transação específica ou tem um prazo de expiração definido. Em fluxos que tenham apenas Liveness, a appkey não deve ser reutilizada.

Exceção: para os fluxos de trabalho que incluem Liveness 2D ou 3D e têm a Documentoscopia como próxima etapa, a appkey será reutilizada para realizar a análise do documento.

Liveness 3D

Passo 1: configuração do Liveness3DUser()

Crie um objeto do tipo Liveness3DUser.
Para esse objeto deve ser passada uma nova appkey para cada uso do Liveness 3D.

data class Liveness3DUser(
    val appKey: String,
    val environment: ENVIRONMENT3D? = ENVIRONMENT3D.HML,
    val liveness3DTheme: Liveness3DTheme? = null
) : Serializable

enum class ENVIRONMENT3D {
    HML,
    PRD,
}
Liveness3DUser liveness3DUser = new Liveness3DUser(appKey, ENVIRONMENT3D.HML, null);
Intent intent = new Intent(getCurrentActivity(), Liveness3DActivity.class);
intent.putExtra(Liveness3DActivity.PARAM_LIVENESS3D_USER, liveness3DUser);

Descrição dos parâmetros

parâmetrodescrição
appKeychave gerada para execução do liveness;
environmentambiente que será executado o SDK, o default é HML;
liveness3DThemeobjeto utilizado para customizar os elementos visuais no liveness.

Passo 2: configuração do Liveness3DActivity

Instancie um Intent para a classe Liveness3DActivity, com os seguintes extras:

  • Liveness3DActivity.PARAM_LIVENESS3D_USER: objeto do tipo Liveness3DUser, criado no passo anterior.
  • Liveness3DActivity.PARAM_DEBUG_ON (opcional): booleano para ajudar a depurar. Faz com que mensagens de log sejam exibidas na tela através de Toasts.
private fun startLiveness3D() {

    val liveness3DUser = Liveness3DUser(
        appKey = appKey,
        ENVIRONMENT3D.HML
    )

    startActivityForResult?.launch(Intent(this, Liveness3DActivity::class.java).apply{
		putExtra(Liveness3DActivity.PARAM_LIVENESS3D_USER, liveness3DUser)
        putExtra(Liveness3DActivity.PARAM_DEBUG_ON, true)
	})
}

Solução alternativa para realizar a chamada do Liveness3DActivity

Caso esteja utilizando uma versão mais antiga do kotlin, também existe a possibilidade de realizar a chamada passando um Intent e esperando o retorno pelo ActivityForResult.

fun onLiveness3DClick(view: View) {  
    val liveness3DUser = Liveness3DUser(
        appKey = appKey,
        ENVIRONMENT3D.HML
    )   
		val intent = Intent(this, Liveness3DActivity::class.java).apply {
        putExtra(Liveness3DActivity.PARAM_LIVENESS3D_USER, liveness3DUser)
        putExtra(Liveness3DActivity.PARAM_DEBUG_ON, true)
    }
    startActivityForResult(intent, LIVENESS3D_RESULT_REQUEST)
}

Passo 3: chamada para vínculo do activity

Chame sua função destartLiveness3D no momento que desejar iniciar o fluxo do liveness 3D:

startLiveness3D()

Passo 4: tratamento do retorno SDK

Para tratar o retorno do SDK utilizamos do método registerActivity.
Caso o desafio seja concluído com sucesso o resultCode será RESULT_OK e para casos de erro será RESULT_CANCELLED.

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

Tratamento para capturar o valor retornado do método utilizando intent

Trata-se do exemplo para capturar o retorno do Intent sem utilizar o método de contratos para realizar a chamada:

  • LIVENESS3DRESULT_REQUEST: Enum contendo apenas um identificador para capturar caso aja mais de um retorno no ActivityForResult, criado no passo anterior.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            LIVENESS3D_RESULT_REQUEST -> {
                when (resultCode) {
                    Activity.RESULT_OK -> onLiveness3DResultOk(result)
                    Activity.RESULT_CANCELED -> onLiveness3DResultCancelled(result)
                }
            }
        }
    }
}

👍

Saiba mais!

Acesse a documentação de Guia de tratamento de retorno Android.

Liveness 2D e DocCore

📝

Uso do termo Liveness 2D

Nesta seção, compreende-se por Liveness 2D o módulo FaceCaptcha dentro do SDK.

Passo 1: configuração de DocumentscopyActivity

Para realizar a chamada do liveness2D e documentsCopy podemos realizar um método semelhante ao Liveness 3D segue um exemplo utilizando do startActivityForResult

Realizando a chamada do DocumentscopyActivity

fun onDocumentscopyClick() {
    val intent = Intent(this, DocumentscopyActivity::class.java).apply{
				putExtra(DocumentscopyActivity.PARAM_ENDPOINT, ENDPOINT)
        		putExtra(DocumentscopyActivity.PARAM_APP_KEY, appKey)
        		putExtra(DocumentscopyActivity.PARAM_DEBUG_ON, false)
	}
	startActivityForResult(intent, DOCUMENTSCOPY_RESULT_REQUEST)
}

Descrição dos parâmetros

parâmetrodescrição
PARAM_ENDPOINTendpoint fornecido pelo usuário para definir em qual ambiente irá acessar em prod ou debug;
PARAM_APP_KEYAppkey que é utilizada nos demais fluxos;
Liveness3DActivity.PARAM_DEBUG_ON (opcional)booleano para depurar. Faz com que mensagens de log sejam exibidas na tela através de Toasts;
DOCUMENTSCOPY_RESULT_REQUESTEnum para controle da chamada no retorno do startActivityForResult.

Realizando a chamada do Liveness2D (FaceCaptchaActivity)

fun onStartChallengeClick(view: View) {
    val userData = UserData(
        user = "JoeDoe",
        nome = "John Doe" ,
        cpf = "999.999.999-99",
        nascimento = "31/02/1871",
        pass = "*******",
        appKey = APPKEY
    )

    val intent = Intent(this, FaceCaptchaActivity::class.java).apply{
			putExtra(FaceCaptchaActivity.PARAM_ENDPOINT, ENDPOINT)
        	putExtra(FaceCaptchaActivity.PARAM_USER_DATA, userData)
        	putExtra(FaceCaptchaActivity.PARAM_DEBUG_ON, false)
		}
		startActivityForResult(intent, CAPTCHA_RESULT_REQUEST)
}

Descrição dos parâmetros

parâmetro
appKeyChave gerada para execução do liveness;
userDataObjeto necessário passando os dados necessários para execução do liveness fornecidos pela empresa contratante;
PARAMENDPOINTEndpoint fornecido pelo usuário para definir em qual ambiente irá acessar em prod ou debug;
Liveness3DActivity.PARAM_DEBUG_ON (opcional)booleano para ajudar a depurar. Faz com que mensagens de log sejam exibidas na tela através de Toasts

Passo 2: tratamento do retorno SDK

Para tratar o retorno do SDK utilizamos do método onActivityResult.

Caso o desafio seja concluído com sucesso o ResultCode será RESULT_OK e para casos de erro será RESULT_CANCELLED. Aqui tratamos o retorno com base em um enum (requestCode) para identificar qual dos serviços foi retornado se foi o liveness 2D (CAPTCHA_RESULT_REQUEST ) ou Documentscopy (DOCUMENTSCOPY_RESULT_REQUEST ).

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    when (requestCode) {
        CAPTCHA_RESULT_REQUEST -> {
            when (resultCode) {
                Activity.RESULT_OK-> onFaceCaptchaResultSuccess(data)
                Activity.RESULT_CANCELED-> onFaceCaptchaResultCancelled(data)
            }
        }

        DOCUMENTSCOPY_RESULT_REQUEST -> {
            when (resultCode) {
                Activity.RESULT_OK-> onDocumentscopyResultSuccess()
                Activity.RESULT_CANCELED-> onDocumentscopyCancelled(data)
            }
        }
    }
}