Guia de integração
Introdução
O Certiface SDK é uma solução modular para verificação de biometria facial e validação de documentos, criada para facilitar o processo de autenticação de usuários. Ele é construído em torno do núcleo oiticore, que gerencia automaticamente dependências e fluxos de execução, garantindo uma integração simplificada e flexível.
Sua arquitetura permite que configure diferentes fluxos, com a possibilidade de customizar e capturar respostas específicas de cada solução através de interceptores.
Pré-requisitos de Compatibilidade
Para uma integração tranquila do Certiface SDK no seu projeto, basta configurar alguns detalhes essenciais de compatibilidade. Essas configurações minimizam conflitos e garantem que o SDK funcione como esperado.
Configuração Básica para Compatibilidade
O Certiface SDK foi projetado com Jetpack Compose e requer algumas configurações mínimas. Adicione ou verifique as configurações abaixo no build.gradle
para garantir que tudo esteja alinhado com o ambiente do SDK:
android {
...
compileSdk = 35 // Alinhamento com o SDK
defaultConfig {
minSdk = 26 // Compatibilidade mínima para as dependências
}
buildFeatures {
compose = true // Habilitar o Jetpack Compose
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.14" // Versão utilizada pelo SDK
}
}
Dependências Essenciais
Para evitar atrito com outras versões, recomendamos o mínimo necessário de dependências abaixo:
dependencies {
implementation "androidx.core:core-ktx:1.7.0" // Core AndroidX
implementation "androidx.appcompat:appcompat:1.4.0" // AppCompat
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0" // Lifecycle
implementation "com.google.dagger:hilt-android:2.38.1" // Injeção de dependência com Hilt
ksp "com.google.dagger:hilt-android-compiler:2.38.1" // Compilador Hilt
implementation "androidx.activity:activity-compose:1.4.0" // Suporte para Compose
implementation "androidx.compose.ui:ui:1.5.14" // Jetpack Compose
}
Permissões Necessárias
Inclua as seguintes permissões no arquivo AndroidManifest.xml
do seu aplicativo para garantir que o SDK funcione corretamente:
<!-- Permissão para acessar o estado da rede -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Permissões para utilizar a câmera -->
<uses-feature android:name="android.hardware.camera.any" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- Permissão para acesso à internet, necessária para chamadas de rede -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Permissão para detectar o estado do Wi-Fi, necessária para o monitoramento de rede -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Permissão para vibração, usada como feedback durante a verificação biométrica -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Permissão para leitura do estado do telefone para monitoramento de rede -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- Permissão de acesso aproximado à localização, necessária para conectividade em alguns dispositivos -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Permissão para gravação em armazenamento externo, necessário para armazenamento temporário -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
💡 Nota: Certifique-se de solicitar dinamicamente as permissões de Câmera e Armazenamento Externo em tempo de execução, especialmente em dispositivos com Android 6.0 (API 23) ou superior, pois são consideradas permissões sensíveis.
Resumo das Permissões
- Câmera: Necessária para captura de imagem no processo de liveness e biometria.
- Internet e Estado da Rede: Para comunicação com os servidores remotos e monitoramento de conectividade.
- Vibração: Usada para fornecer feedback tátil aos usuários, durante os desafios.
- Armazenamento Externo: Necessário para armazenamento temporário de dados.
- Localização Aproximada e Estado do Telefone: Utilizadas apenas para monitoramento de conectividade em determinados dispositivos.
Com essas configurações, você garante uma integração suave, maximizando a compatibilidade do Certiface SDK no seu projeto.
Diagrama de Funcionamento
Abaixo está o diagrama de comunicação do Certiface SDK. Ele descreve o fluxo de dados entre o Aplicativo e o SDK, o HubManager
e os provedores de liveness e documento:
Configuração do Gradle
Para utilizar o oiticore, é necessário adicionar a dependência no build.gradle
do módulo de implementação. Utilize a seguinte configuração para importar o SDK:
Importando o Oiti Core
No build.gradle
:
implementation "br.com.oiti.certiface:core:1.0.0"
No build.gradle.kts
:
implementation("br.com.oiti.certiface:core:1.0.0")
Apontamento do Maven
Para garantir que o SDK seja carregado corretamente, é essencial apontar o repositório da oiti no Maven. Esse apontamento deve ser feito no settings.gradle
:
No build.gradle
:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url "https://raw.githubusercontent.com/oititec/android-oiti-versions/master" }
}
}
No build.gradle.kts
:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven("https://raw.githubusercontent.com/oititec/android-oiti-versions/master")
}
}
Dependências Necessárias
Além do oiticore, apenas o hilt
precisa ser configurado. O SDK gerencia as demais dependências e se adapta ao ambiente da aplicação, garantindo compatibilidade com Jetpack Compose e outras bibliotecas do projeto. Toda a arquitetura é baseada em um adaptador que redireciona as chamadas para os módulos do oiticore.
Configuração na Activity
Para utilizar o SDK, é preciso inicializar o HubManagerLauncher
com uma referência da Activity
que realizará a navegação e o registro do Intent
. Essa configuração deve ser feita dentro do onCreate
da Activity
, pois o Activity.registerForActivityResult
não pode ser registrado em tempo de execução.
// Exemplo no onCreate da Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Configura o hubManagerLauncher passando a Activity
hubManagerLauncher = HubManagerLauncher(this)
}
Após garantir que o hubManagerLauncher
tem a referência correta da Activity
, é possível configurar e iniciar o SDK.
Soluções Disponíveis no SDK
O Certiface SDK oferece várias soluções para verificação de identidade, cada uma delas projetada para responder a diferentes necessidades de segurança e autenticidade:
- Facetec: Solução de liveness 3D que utiliza reconhecimento facial avançado para verificar a autenticidade do usuário. Ideal para aplicações que demandam alta segurança.
- Liveness2D: Uma solução de liveness mais leve, baseada em verificação 2D, adequada para casos de uso que demandam menos processamento.
- DocCore: Focada na validação de documentos, esta solução realiza a verificação de autenticidade de documentos de identidade, complementando as verificações de biometria facial.
Essas soluções são configuradas através de Providers, que permitem a personalização e o uso de interceptores para capturar os dados de cada verificação.
Guia de Uso dos Providers
DocCore provider e o unico provider ao qual não é vinculado um interceptor, sendo assim seu retorno é através do hubCallback
Configuração Geral dos Providers
Os Providers são componentes do SDK que representam cada uma das soluções de liveness e de validação de documentos. Eles podem ser configurados com Interceptors para capturar resultados detalhados, além de permitir a personalização das interações do usuário, como temas visuais específicos para cada provider.
Exemplo de Configuração com Interceptor
A configuração com interceptores permite que o SDK capture informações detalhadas sobre o resultado de cada provider. Esse método é útil para desenvolver um controle granular sobre o fluxo, além de facilitar a coleta de dados para análises posteriores.
// Configurando Interceptors
val facetecProviderInterceptor = FacetecProviderInterceptor(
getFacetecThemeBuilder(this), // Factory que devolve um FacetecTheme()
object : LivenessInterceptor {
override fun onIntercept(result: LivenessResult) {
// Response do interceptor
}
}
)
val liveness2DProviderInterceptor = Liveness2DProviderInterceptor(
getLiveness2DThemeBuilder(), // Factory que devolve um Liveness2dTheme()
object : LivenessInterceptor {
override fun onIntercept(result: LivenessResult) {
// Response do interceptor
}
}
)
Configuração do HubManagerUser
HubManagerUser
O HubManagerUser
deve ser configurado com os parâmetros necessários para a execução. No exemplo, utilizamos um ticket
, environment
, org
, branch
e key
.
val hubManagerUser = HubManagerUser.Builder(
ticket = ticket,
environment = HubCoreRequestParams.ENVIRONMENT.HML,
org = ORG.toInt(),
branch = BRANCH.toInt(),
key = xKey
).build()
Configuração do HubManager
HubManager
O HubManager
é configurado com o hubManagerLauncher
, hubManagerUser
, HubCallback
e os provedores (Facetec e Liveness2D) com os interceptors definidos. O HubCallback
permite tratar os eventos de conexão, sucesso, erro e cancelamento.
hubManager = HubManager.Builder(
hubManagerLauncher = hubManagerLauncher,
hubManagerUser = hubManagerUser,
hubCallback = object : HubCallback {
override fun onConnect() {
// Conexão inicializada
}
override fun onSuccess() {
// Fluxo concluído com sucesso
}
override fun onError(code: String?, message: String?) {
// Erro genérico
}
override fun onCancel() {
// Fluxo cancelado pelo usuário
}
}
)
.addProvider(facetecProviderInterceptor)
.addProvider(liveness2DProviderInterceptor)
.addGroup(group) // Parametro opcional caso possua
.addSubOrg(subOrg) // Parametro opcional caso possua
.addProvider(DocCoreOitiProvider())
.build()
hubManager?.start(this)
Configuração sem Interceptor (Execução Orquestrada)
Caso prefira executar o SDK de forma orquestrada, sem capturar os detalhes de cada provider individualmente, você pode configurar os providers sem interceptores. Nesse caso, o HubManager cuida do fluxo completo e retorna uma resposta genérica ao final.
hubManager = HubManager.Builder(
hubManagerLauncher = hubManagerLauncher,
hubManagerUser = hubManagerUser,
hubCallback = object : HubCallback {
override fun onConnect() {
// Conexão inicializada
}
override fun onSuccess() {
// Fluxo concluído com sucesso
}
override fun onError(code: String?, message: String?) {
// Erro genérico
}
override fun onCancel() {
// Fluxo cancelado pelo usuário
}
}
)
.addProvider(FacetecProvider()) // Sem interceptores para Facetec
.addProvider(Liveness2DProvider()) // Sem interceptores para Liveness2D
.addProvider(DocCoreOitiProvider())
.build()
hubManager?.start(this)
Exemplo de Implementação do Certiface SDK
Para facilitar a integração e implementação do Certiface SDK em projetos Android, disponibilizamos um projeto de exemplo no GitHub. Este projeto contém:
- Exemplo de configurações iniciais do SDK.
- Demonstrações práticas de diferentes fluxos de execução, incluindo Flow Orquestrado e Interceptor.
- Demonstrações customizando as soluções.
Acesse o Projeto de Exemplo
Você pode acessar o projeto clicando no link abaixo:
Updated 12 days ago