Somente esta páginaTodas as páginas
Fornecido por GitBook
1 de 99

Portuguese (Brazil)

Loading...

SOBRE O IDCLOUD

Loading...

Loading...

Loading...

Loading...

INTEGRAÇÃO

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

API

Nesta seção, você encontrará tudo relacionado as APIs REST do meio de integração by Unico

API Reference

Nesta seção, você encontrará todas as APIs REST disponíveis para utilização do meio de integração by Unico

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Controlando a experiência

Nesta seção, você entrará os componentes de experiência que podem ser utilizados com o by Unico

Loading...

Loading...

Loading...

Loading...

Recursos adicionais

Nesta seção, você encontrará os recursos adicionais relacionados ao meio de integração by Unico

Loading...

Loading...

Loading...

Loading...

API

Nesta seção, você encontrará todas as APIs REST disponíveis para utilização do meio de integração by Client

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Recursos adicionais

Nesta seção, você encontrará os recursos adicionais relacionados ao meio de integração by Client

Loading...

Loading...

Loading...

SDK

Nesta seção, você encontrará todas as especificações técnicas dos SDK's disponíveis da plataforma Unico IDCloud

Loading...

Loading...

Integração SDKs

Nesta seção, você encontrará todas as informações necessárias pra implementar os SDKs da plataforma Unico IDCloud

SDK Android

Nesta seção, você encontrará todas as informações necessárias pra implementar o SDK Android da plataforma Unico IDCloud

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

SDK iOS

Nesta seção, você encontrará todas as informações necessárias pra implementar o SDK iOS da plataforma Unico IDCloud

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

SDK Flutter

Nesta seção, você encontrará todas as informações necessárias pra implementar o SDK Flutter da plataforma Unico IDCloud

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

SDK Web

Nesta seção, você encontrará todas as informações necessárias pra implementar o SDK Web da plataforma Unico IDCloud

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Recursos adicionais

Nesta seção, você encontrará os recursos adicionais relacionados à SDK

Loading...

Loading...

help & faq

Loading...

Loading...

Loading...

Loading...

Loading...

Unico IDCloud

Conheça tudo sobre nossa plataforma de verificação de identidade Unico IDCloud


O que é a plataforma Unico IDCloud?


IDCloud é a única plataforma de verificação de identidade que combina segurança com precisão garantida. Com ela, é possível validar a identidade de usuários de maneira simples e intuitiva, utilizando apenas uma selfie, garantindo fluidez e proteção nos seus processos de verificação.


A plataforma é versátil e pode ser adaptada para diferentes casos de uso, permitindo que você a ajuste conforme as necessidades do seu cenário. Para isso, oferecemos diversas — funcionalidades da nossa plataforma que atendem a uma ampla gama de operações e demandas. E é possível utilizar a plataforma IDCloud através de dois meios de integração, . Para saber mais sobre as nossas capacidades, acesse a página a seguir:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

capacidades
by Unico e by Client
​
Central de Ajuda

Capacidades e Meios de Integração

Nesta seção, você encontrará quais capacidades estão disponíveis em cada meio de integração da plataforma Unico IDCloud


Para atender os mais variados casos de uso da sua operação, as capacidades do IDCloud possuem diferentes disponibilidades de acordo com os meios de integração. Abaixo confira a tabela com todas as possibilidades de utilização, separadas por meio de integração:

  • Em cada meio de integração é possível combinar diversas capacidades entre si. Para saber mais sobre os fluxos possíveis em cada meio de integração, acesse os respectivos menus abaixo:

  • Para ambos os meios de integração também é possível obter o retorno de similaridade da Serpro.


Introdução

Aqui você encontrará as informações técnicas das APIs REST da plataforma Unico IDCloud


Visão Geral


Bem-vindo à documentação das APIs REST da plataforma Unico IDCloud! Nesta página, você encontrará tudo o que precisa saber para melhorar a segurança e a qualidade dos seus aplicativos usando nossa REST API.

Leia mais



Guia de início rápido

Nesta seção, você encontrará um overview de como se integrar com a plataforma Unico IDCloud


Visão geral da integração


1

Se autentique

2

Defina quais capacidades você irá utilizar

Quais capacidades você precisa na sua operação? Verificação de Identidade? Prova de vida?

3

Defina qual será seu meio de integração

4

Crie um processo

5

Consulte o resultado do processo

Com o processo concluído, consulte o resultado do processo no meio de integração que você optou utilizar.

Pronto. Com o resultado em mãos, tome a decisão de aprovar ou não o cadastro usuário.


Capacidades
by Unico
by Client

Verificação de Identidade

Score de risco

Alerta de comportamento

Prova de vida

Validação (1:1)

Reaproveitamento e captura de documentos

Assinatura eletrônica

;

.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Independentemente do meio de integração que utilizar, o primeiro passo é a . Você deve possuir uma conta de serviço e realizar a autenticação OAuth2 para obter um access-token válido.

Saiba mais em .

Entenda sobre as disponíveis na plataforma Unico IDCloud e decida quais você irá utilizar na sua operação.

Saiba mais em .

Você quer a praticidade do ? Ou a liberdade do ?

De acordo com as que irá utilizar, defina qual será seu meio de integração com base na sua operação e seu contexto.

Saiba mais em .

Optou pelo ?

e;

Defina onde do seu usuário final.

Preferiu seguir pelo ?

Capture a selfie do usuário final utilizando nossos ;

.

Para otimizar sua integração, você pode utilizar o e saber quando o resultado do seu processo estiver concluído.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

by Unico
by Client
​
Central de Ajuda

☁ Sobre o IDCloud

Inicie a leitura conhecendo mais sobre a plataforma IDCloud.

🔑 Sobre a Autenticação

Veja as especificações técnicas da autenticação para utilizar APIs da plataforma IDCloud.

🔒 Sobre as APIs

Veja as especificações técnicas das APIs da plataforma IDCloud.

⚙ Sobre os SDKs

Veja o passo a passo para implementar os SDKs do IDCloud para o by Client.

​
Central de Ajuda
Autenticação
Autenticação
capacidades
Capacidades
by Unico
by Client
capacidades
Meios de Integração
by Unico
Crie um processo
será a jornada
by Client
SDKs
Crie um processo
Webhook
​
Central de Ajuda

Autenticação

Nesta seção, você encontrará toda a especificação técnica sobre a forma de autenticação para utilização das APIs REST da plataforma IDCloud


Para utilizar a plataforma IDCloud é necessário se autenticar via token de acesso, utilizando o sistema de autenticação conhecido como OAuth2.

O sistema de autenticação OAuth2 da unico suporta a interação server-to-server entre uma aplicação web e os serviços da unico.

Para este cenário, você precisará de uma conta de serviço, que é uma conta impessoal que pertence à sua aplicação e não a um usuário individual. Sua aplicação chama as APIs da unico em nome da conta de serviço, portanto usuários não estão diretamente envolvidos. Este cenário é chamado “two-legged OAuth”, ou “2LO”. Tipicamente, uma aplicação utiliza uma conta de serviço quando a aplicação chama as APIs da unico para trabalhar com seus próprios dados ao invés dos dados do usuário.

Este é o passo zero para iniciar sua implementação, portanto não pule esta etapa.


Meios de Integração

Nesta seção, você conhecerá mais sobre os meios de integração da plataforma Unico IDCloud


by Unico


Para empresas que desejam contar com um parceiro para gerenciar a experiência do usuário com melhores práticas e privacidade, além de contar com a facilidade na orquestração de fluxos com as capacidades da Unico e com a atualização automática de tecnologias, como os SDKs.

Com o by Unico, você terá um time de especialistas em segurança e melhores práticas de UX design para garantir a melhor conversão possível em sua operação. Pode ser utilizada de forma responsiva tanto no Desktop quanto no Mobile. Oferendo as seguintes possibilidades de uso:

Canal
Redirect
Open.window()
iFrame
Webview
Mensagens

Desktop

Webmobile

App mobile

Para o fluxo de mensagens, é possível enviar notificações pelos canais de: WhatsApp e/ou SMS.

Confira como é a experiência do usuário final com o by Unico na Mensageria, Webview e iFrame, respectivamente, nas abas abaixo:


by Client


Para empresas que desejam controlar a experiência dos usuários com frontend próprio, bem como a construção dos fluxos com as capacidades da Unico no backend junto às demais tecnologias e recursos utilizados para autenticação.

Com o by Client você tem a liberdade que precisa para criar e gerenciar a jornada do usuário final como preferir, aproveitando as capacidades da plataforma Unico IDCloud como julgar necessário.


Criando uma Conta de Serviço

Nesta seção, você encontrará como realizar a criação de uma conta de serviço para se autenticar na plataforma Unico IDCloud


Para utilizar interações server-to-server, é preciso solicitar a criação da conta de serviço com o gerente de projetos responsável pela sua empresa enviando os seguintes dados: nome da empresa, nome da aplicação, nome, e-mail e celular do responsável pela aplicação na empresa. É preciso criar contas diferentes para os ambientes de Homologação e Produção.

Após o recebimento desses dados, será criada uma conta de serviço responsável por autenticar a sua aplicação e enviaremos um e-mail para que seja gerado o par de chaves para a conta.

Uma credencial de conta de serviço inclui um nome único de conta, um identificador da empresa (Tenant ID) e ao menos um par de chaves (pública e privada). Ao final da geração das chaves, você recebe apenas a chave privada (arquivo .key.pem), bem como o payload que deve ser utilizado para montar o JWT. Este payload terá o seguinte formato:

Caso precise da chave pública para configurar em seu sistema, contate o gerente de projetos responsável por sua conta. Também é possível gerar uma chave pública através do comando openssl a seguir:


Recursos adicionais

Nesta seção, você encontrará recursos adicionais relacionados à autenticação


Postman Collection

Nesta seção, você encontrará a collection do Postman com a REST API para realizar a autenticação na plataforma Unico IDCloud


Faça download do arquivo abaixo, importe no Postman e substitua o valor dos parâmetros "service_account", "tenant_id" e "secret_key" para testar a chamada.


Exemplo em Javascript

Nesta seção, você encontrará um exemplo de implementação da autenticação da plataforma Unico IDCloud em Javascript



Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Confira como é a experiência de captura da selfie do usuário final com o by Client utilizando os da Unico:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

​
Central de Ajuda
SDKs
​
Central de Ajuda
openssl req -x509 -new -nodes -sha256 -days 720 \
-key fileName.key.pem -out fileName.cert.pem
LogoCapacidades | IDCloud APIs
const fs = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const request = require('request')

// settings
const basePath = 'https://identityhomolog.acesso.io'

// entry point
let options = {
    serviceAccount: 'svcapp1',
    tenant: "9ea3c3bd-4447-4c3b-ae2e-504b795d3733"
}

requestAnAccessToken(createServiceAccountToken(options), (err, accessToken) => {
    let payload = jwt.decode(accessToken.access_token)
    console.log('Response:')
    console.log(' Access Token: ', accessToken.access_token)
    console.log(' ID: ', payload.jti)
    console.log(' Issuer: ', payload.iss)
    console.log(' Subject: ', payload.sub)
    console.log(' expires_in: ', accessToken.expires_in)
    console.log(' Expiration Date: ', new Date(payload.exp))
    console.log(' Creation Date: ', new Date(payload.iat))
})

// functions
function createServiceAccountToken({tenant, serviceAccount, account = ''}) {
    // Reads the service account private key
    let privateKey = fs.readFileSync(path.resolve(`${serviceAccount}.key.pem`))

    // Prepare the request
    let payload = {
        iss: `${serviceAccount}@${tenant}.iam.acesso.io`,
        aud: basePath,
        scope: '*',
        exp: Math.floor(Date.now() / 1000) + 3600,
        iat: Math.floor(Date.now() / 1000)
    }
    // Service account is requesting an access token for another user?
    if (account) {
        payload.sub = account
    }

    // Create JWS
    return jwt.sign(payload, privateKey, { algorithm: 'RS256' })
}

function requestAnAccessToken(serviceToken, callback) {
    // Prepare the request
    let options = {
        method: 'POST',
        url: `${basePath}/oauth2/token`,
        headers: {'content-type': 'application/x-www-form-urlencoded'},
        form: {
            grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer' ,
            assertion: serviceToken
        }
    }
    console.log('Requesting Access Token with self created token:' )
    console.log('', serviceToken)

    // Ask identity and authorization server for an access token
    request(options, (error, response, body) => {
        if (error) {
            callback(new Error(error))
        }

        body = JSON.parse(body)

        if (body.error) {
            callback(new Error(`${body.error}: ${body.error_description}`))
        }

        callback(null, body)
    })
}
​
Central de Ajuda
Postman Collection
Exemplo em Javascript
Erros de autenticação
FAQ Autenticação
​
Central de Ajuda
​
Central de Ajuda

Integração by Unico

Nesta seção, você encontrará todas as especificações técnicas das APIs REST da plataforma Unico IDCloud, utilizando o meio de integração by Unico

Erros de autenticação

Nesta seção, você encontrará os possíveis erros que podem acontecer ao tentar de autenticar na plataforma Unico IDCloud


Os erros retornados na requisição podem ser identificados através dos códigos abaixo e possuem a seguinte estrutura:

{
  "error": "server_error",
  "error_description": "Falha na autenticação x.x.x"
}
Nome
Descrição

1.0.1

Verifique se o ID informado na formação do "iss" é o ID do tenant correto, fornecido na geração da chave privada¹.

1.0.14

Verifique com o responsável pelo projeto se a aplicação utilizada está ativa.

1.1.1

Parâmetro "scope" não foi informado no payload do token jwt utilizado na requisição.

1.2.4

O token jwt utilizado na requisição está expirado. Verifique o valor informado no campo "exp" do payload.

1.2.5

O token jwt utilizado na requisição não pode ser validado. Verifique os parâmetros informados e tenha certeza de tê-lo assinado da forma correta.

1.2.6

A chave privada utilizada na assinatura do token jwt utilizado na requisição não é mais aceitável. Solicite novas credenciais para a conta utilizada.

1.2.7

O token jwt utilizado na requisição não é mais aceitável, pois já foi utilizado anteriormente. Gere um novo token para fazer uma nova requisição.

1.2.11

A conta utilizada não está ativa.

1.2.14

A conta utilizada não possui as permissões necessárias.

1.2.18

A conta utilizada foi temporariamente bloqueada por ter excedido a quantidade de tentativas inválidas de autenticação.

1.2.19

A conta utilizada não está autorizada a impersonar outra conta de usuário (remova o parâmetro "sub" do payload).

1.2.20 1.2.21

Falha na decodificação do token jwt utilizado na requisição. Utilize um novo token inserindo somente os campos especificados nas seções "Campos obrigatórios" e "Campos adicionais", obedecendo à nomenclatura, semântica e tipo de cada campo.

1.2.22

O token jwt utilizado na requisição possui campos adicionais no payload que não são permitidos. Utilize um novo token inserindo somente os campos especificados nas seções "Campos obrigatórios" e "Campos adicionais", obedecendo à nomenclatura, semântica e tipo de cada campo.

1.3.1

A conta utilizada possui restrições de IP de origem.

1.3.2

A conta utilizada possui restrições de data/hora de acesso.


Criação do Processo

Nesta seção, você encontrará como criar um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Criação de Processos no by Unico. Perceba que, para utilizar as capacidades da plataforma IDCloud neste meio de integração, basta alterar o valor do parâmetro "flow" no momento de criar o processo e a Unico será a responsável por orquestrar todas as capacidades que deseja utilizar.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Criação do Processo


Os processos devem ser criados exclusivamente em uma comunicação backend-to-backend, devido à nossa política de CORS, que impede a criação de processos em uma comunicação frontend-to-backend.

A obrigatoriedade de parâmetros na criação do processo pode mudar a depender dos flows utilizados. Ex:

  • Em flows que possuem Assinatura eletrônica, é obrigatório o envio do objeto payload e todas as suas propriedades;

  • Em flows que possuem Validação (1:1), é obrigatório o envio da propriedade bioTokenId.

Dicas:


Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Entenda mais sobre a utilização das capacidades no by Unico na seção .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

​
Central de Ajuda
Visão Geral
aqui
https://api.cadastro.uat.unico.app
https://api.cadastro.unico.app
Erros
​
Central de Ajuda

Preparando para fazer uma requisição autenticada à API

Nesta seção, você encontrará como realizar o processo de autenticação na plataforma Unico IDCloud


Após a criação e configuração de uma conta de serviço, sua aplicação precisa completar as seguintes etapas:

  1. Criar um JSON Web Token (JWT), que inclui cabeçalho, payload e assinatura;

  2. Requisitar um token de acesso (AccessToken) da plataforma de autenticação OAuth2;

  3. Tratar a resposta JSON que a plataforma de autenticação retornará.

Se na resposta estiver incluso um token de acesso, você poderá usá-lo para fazer requisições às APIs dos produtos da unico para os quais a conta de serviço possui permissão de acesso. (Se na resposta não estiver incluso um token de acesso, seu JWT e requisição de obtenção do token podem estar incorretos ou a conta de serviço pode não ter as permissões necessárias para acessar os recursos solicitados.)

O token de acesso gerado na requisição mencionada acima tem validade padrão de 3600 segundos, podendo variar de acordo com a configuração de segurança estabelecida para sua empresa. Quando o token de acesso expirar, sua aplicação deverá gerar um novo JWT, fazer a assinatura e requisitar um novo token de acesso na plataforma de autenticação.

1 - Criando o JWT


Um JWT é composto por três partes: um cabeçalho, um payload e uma assinatura. O cabeçalho e o payload são objetos JSON. Esses objetos JSON são serializados em UTF-8 e então codificados usando codificação Base64url¹. Esta codificação provê resliência contra alterações de codificação em casos de repetidas operações de codificação. O cabeçalho, o payload e a assinatura são concatenadas com um caractere de ponto final ..

Um JWT é composto da seguinte forma:

{Cabeçalho em Base64url}.{Payload em Base64url}.{Assinatura em Base64url}

O texto base para a assinatura é composto pela seguinte forma:

{Cabeçalho em Base64url}.{Payload em Base64url}

1.1 - Formando o cabeçalho JWT


O cabeçalho consiste em dois campos que indicam o algorítimo de assinatura e o formato do token. Ambos os campos são obrigatórios e cada campo possui apenas um valor. Contas de serviço dependem do algorítimo RSA SHA-256 e do formato de token JWT. Como resultado, a representação JSON do cabeçalho se dá da seguinte forma:

{"alg":"RS256","typ":"JWT"}

A representação em Base64url se dá da seguinte forma:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9

1.2 - Formando o payload JWT


O payload JWT contém informações sobre o JWT, incluindo as permissões sendo requisitadas (scopes), a conta solicitando acesso, o emissor, o momento em que o token foi emitido e o tempo de vida do token. A maioria dos campos são obrigatórios. Assim como o cabeçalho JWT, o payload é um objeto JSON e é usado na composição da assinatura.

1.3 - Campos Obrigatórios


Os campos obrigatórios no JWT são mostrados na tabela abaixo. Eles podem aparecer em qualquer ordem dentro do payload.

Nome
Descrição

iss

O identificador da conta de serviço na empresa.

scope

Uma lista delimitada por espaços ou pelo sinal de positivo + das permissões que a aplicação está requisitando. Se todas as permissões da conta forem necessárias, utilizar o sinal de asterisco * para tal.

aud

Casos recorrentes que NÃO funcionam:

exp

O tempo de expiração do token, especificado em segundos desde 00:00:00 UTC, 1 de Janeiro de 1970. Este valor tem um tempo máximo de 1 hora após o momento da emissão do JWT. Este valor deve ser numérico.

Casos recorrentes que NÃO funcionam:

  • Uso de aspas na delimitação do valor. Ex.: “1524161193” é uma string e não funcionará. Já 1524161193 é um número e funcionará.

iat

O momento da emissão do JWT, especificado em segundos desde 00:00:00 UTC, 1 de Janeiro de 1970. Este valor deve ser numérico.

  • Uso de aspas na delimitação do valor. Ex.: “1524161193” é uma string e não funcionará. Já 1524161193 é um número e funcionará.

Entenda como funciona a conversão para os campos de emissão (iat) e expiração (exp) do jwt, e veja também exemplos de utilização dos valores dos campos aqui. Além disso, o campo “iat” deve ser o horário atual no formato exigido e o “exp” deve respeitar a conta abaixo:

exp = iat + 3600

A representação dos campos JSON obrigatórios no payload do JWT se dá da seguinte forma:

{
  "iss": "service_account_name@tenant_id.iam.acesso.io",
  "aud": "https://identityhomolog.acesso.io",
  "scope": "*",
  "exp": 1626296976, // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
  "iat": 1626293376 // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
}

1.4 - Calculando a assinatura


A especificação JSON Web Signature (JWS)² é a mecânica que guia o cálculo da assinatura para um JWT. O conteúdo de entrada para o cálculo da assinatura é o byte array do seguinte conteúdo:

{Cabeçalho em Base64url}.{Payload em Base64url}

O mesmo algoritmo sinalizado no cabeçalho do JWT precisa ser utilizado para o cálculo da assinatura. O único algorítimo de assinatura suportado pela plataforma de autenticação OAuth2 é o RSA usando SHA-256. Ele é expressado como RS256 no campo alg do cabeçaho do JWT.

Assine a representação UTF-8 do conteúdo de entrada utilizando SHA256withRSA (também conhecido como RSASSA-PKCS1-V1_5-SIGN com o hash SHA-256) com a chave privada que foi criada e associada à conta de serviço (arquivo .key.pem gerado pela solicitação recebida por e-mail). O conteúdo de saída será um byte array.

A assinatura precisará ser então codificada em Base64url. O cabeçalho, o payload e a assinatura deverão ser concatenadas com o caractere de ponto final .. O resultado é o JWT. Ele deve ser da seguinte forma:

{Cabeçalho em Base64url}.{Payload em Base64url}.{Assinatura em Base64url}

A seguir está um exemplo de token JWT antes da codificação em Base64url:

{"alg":"RS256","typ":"JWT"}.
{
  "iss": "service_account_name@tenant_id.iam.acesso.io",
  "aud": "https://identityhomolog.acesso.io",
  "scope": "*",
  "exp": 1626296976, // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
  "iat": 1626293376 // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
}.
[byte array da assinatura]

Abaixo está um exemplo do JWT que foi assinado e está pronto para transmissão:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzZXJ2aWNlX2FjY291bnRf
bmFtZUB0ZW5hbnRfaWQuaWFtLmFjZXNzby5pbyIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHlob21vbG9nLmFjZXNzby5pbyIsInNjb
3BlIjoiKiIsImV4cCI6MTYyNjI5Njk3NiwiaWF0IjoxNjI2MjkzMzc2fQ.JsymP3NZdgCSqeNlgsOM2
-AQ7M450NxFnZnnaKSu4Q8g12QGEIvvM4EhCokUHfwk5s7pOpm2UD_Ng3Hb5g_wgrjfiVSLWH5Q2wYg1AvfLqo
YSoJWaMHm9KL0kpv32XdDD8TZVR-MVd2VBHmCMVbV6gvk8buUoK1HZDN7g84PaY3bfgcB3RKU-
H55lR8yyJjZxToIv17-wfla2G99uaMEFNGX0ZSE7ETn5Z8-WypmFrNAK0TM58upzvfVI6_-
gY4cj4iQvmRbuvxsAaGiHA2xd0RVm2Mrx-gQtdPqtbZPuQcH7k64Z_EOQBgiGTgVjucyHD6zBijr_P-
2mhIxuecNSw


Após a geração do JWT assinado, uma aplicação pode utilizá-lo para requisitar um token de acesso (Access Token). A requisição do token de acesso é uma requisição POST HTTPS e o corpo deve ser URL encoded. A URL é a mostrada abaixo:

https://identityhomolog.acesso.io/oauth2/token

Os parâmetros abaixo são obrigatórios na requisição POST HTTPS:

Nome
Descrição

grant_type

Utilize o seguinte texto, URL-encoded se necessário: urn:ietf:params:oauth:grant-type:jwt-bearer

assertion

O JWT, incluindo a assinatura.

POST /oauth2/token HTTP/1.1
Host: identityhomolog.acesso.io
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-
bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzZXJ2aWNlX2FjY
291bnRfbmFtZUB0ZW5hbnRfaWQuaWFtLmFjZXNzby5pbyIsInN1YiI6InVzZXJfaWRlbnRpZmllciIs
ImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHlob21vbG9nLmFjZXNzby5pbyIsInNjb3BlIjoiKiIsImV4cCI
6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.TjH-mTtwP6tBB93O1sDPaAA6yUF7N2-HZDlpIPz
bf_dxO8A6KZuRWG8ZnICrxX56qj0HREiMlYy27XJgxowrUa0JHvbqc8HJkT7-6Mh7J67UnubZKG1-hi
6jDtkC9BIXBcOhtkNUfZvZetXjLzsRsSDkqxdMtzYZwkRlocvaxL5QXiQhweeEwK_Ux81Adh3z0EIhT
yl7CKJLJ69PuHS7s9IdrjUl79owipp4LF1FvtMhoe7YIL69ohPgFqSv_-Y9qpPdW6be3OEAyKlOM08S
ZBbHBwW4XMvw3uZjTY1sgJ4cBoxrftDpjYOw34oPOKxirqc5-90uOCYe1O1hRtG45w


Se o JWT e a requisição do token de acesso foram formados apropriadamente e a conta de serviço tem as permissões necessárias, então a resposta da plataforma de autenticação retorna um objeto JSON contendo um token de acesso. Segue um exemplo de resposta da plataforma:

{
  "access_token": "<access_token>",
  "token_type": "Bearer",
  "expires_in": "3600"
}


A duração do token de acesso é variável. Sua duração é especificada no campo “expires_in”, retornado juntamente com o token de acesso. Deve-se utilizar o mesmo token de acesso durante a sua validade para todas as chamdas às APIs dos produtos.

Não solicite um novo token de acesso até que a validade do token atual esteja chegando ao fim. Sugerimos uma margem de 600 segundos (10 minutos). Para isso execute o cálculo:

token decodificado:
new Date(token.exp - 600)

Sendo que token.exp é o timestamp da expiração do token.

Por padrão, o token enviado para a empresa tem duração de 1h, mas pode ser alterado. A sugestão é sempre usar o expires_in como base e subtrair 600s dele para pedir um novo token.

Exemplos:

Cenário padrão:
expires_in: 3600 (1h) - Geração do token as 14h42

Solicitar um novo token somente as 15h32 ou seja, 14:42 + (3600 - 600)
Cenário com a duração alterada:
expires_in: 7200 (2h) - Geração do token as 14h42

Solicitar um novo token somente as 16h32 ou seja, 14:42 + (7200 - 600)

Um novo token de acesso pode ser solicitado quando faltar 10 minutos pra expirar.

Não utilize um tempo fixo para a obtenção de um novo token, pois o tempo de duração do token recebido pode ser menor que o tempo estabelecido, o que ocasionará falha na utilização dos serviços.

  • ¹ De acordo com o RFC 4648 de codificação BaseN, o formato Base64url é similar ao formato Base64, com exceção do caracter = que deve ser omitido, e dos caracteres + e / que devem ser substituídospor - e _, respectivamente.


Visão Geral

Nesta seção, você encontrará todas as especificações técnicas das APIs REST do by Unico

Introdução


O by Unico é um canal que oferece uma infraestrutura de soluções de validação de identidade da plataforma IDCloud.

Tem por objetivo, simplificar o uso das capacidades da plataforma IDCloud oferecendo uma solução que pode ser integrada ao seu back-end e front-end e que aumenta a segurança das transações.

Com o by Unico, você terá um time de especialistas em segurança e melhores práticas de UX design para garantir a melhor conversão possível em sua operação. Pode ser utilizada de forma responsiva tanto no Desktop quanto no Mobile. Oferendo as seguintes possibilidades de uso:

Canal
Redirect
Open.window()
iFrame
Webview
Mensagens

Desktop

Webmobile

App mobile

Para o fluxo de mensagens, é possível enviar notificações pelos canais de: WhatsApp e/ou SMS.

Dispositivos compatíveis


Web


Compatível com todos os dispositivos com câmera frontal, seja em laptops ou mobile, respeitando a lista de navegadores oficialmente suportados abaixo:

Demais navegadores não são suportados.

Fluxos possíveis


Para isso, você irá mudar apenas o parâmetro flow no payload da REST API, e com isso terá diversas possibilidades de jornadas de verificação. Verifique abaixo a tabela relacionando os flows disponíveis e suas respectivas capacidades:

Flow
Prova de vida
Verificação de Identidade
Alerta de comportamento
Reaproveitamento e captura de documentos
Assinatura eletrônica
Validação (1:1)
Retorno de similaridade da Serpro

idlive

id

idlivetrust

idtrust

idunicodocs

idunicosign

idunicodocssign

idunicoserprodocssign

idtrustdocs

idtrustsign

idtrustdocssign

idtoken

idtokentrust

idtokensign

Caso utilize a capacidade Reaproveitamento e Captura de documentos, considere que é possível utilizar os seguintes documentos:

  • RG, CNH, CIN e Passaporte brasileiro.

Fluxos depreciados


Fluxos com Score de risco
Flow
Capacidades

idcheck

Prova de vida + Verificação de Identidade + Score de risco

iddocs

Prova de vida + Verificação de Identidade + Score de risco + Reaproveitamento e captura de documentos

idsign

Prova de vida + Verificação de Identidade + Score de risco + Assinatura eletrônica

iddocssign

Prova de vida + Verificação de Identidade + Score de risco + Reaproveitamento e captura de documentos + Assinatura eletrônica

idchecktrust

Prova de vida + Verificação de Identidade + Score de risco + Alerta de comportamento

idchecktrustdocs

Prova de vida + Verificação de Identidade + Score de risco + Alerta de comportamento + Reaproveitamento e captura de documentos

idchecktrustsign

Prova de vida + Verificação de Identidade + Score de risco + Alerta de comportamento + Assinatura eletrônica

idchecktrustdocssign

Prova de vida + Verificação de Identidade + Score de risco + Alerta de comportamento + Reaproveitamento e captura de documentos + Assinatura eletrônica

idcheckserpro

Prova de vida + Verificação de Identidade + Score de risco + Retorno de similaridade da Serpro

idcheckserprodocs

Prova de vida + Verificação de Identidade + Score de risco + Retorno de similaridade da Serpro + Reaproveitamento e captura de documentos

idcheckserprodocssign

Prova de vida + Verificação de Identidade + Score de risco + Retorno de similaridade da Serpro + Reaproveitamento e captura de documentos + Assinatura eletrônica

creditoconsignado

Prova de vida + Verificação de Identidade + Score de risco + Retorno de similaridade da Serpro + Assinatura eletrônica

Este fluxo funciona na forma de uma condicional:

  • Se o retorno de similaridade da Serpro for positivo, solicitamos a assinatura eletrônica;

  • Se o retorno de similaridade da Serpro for negativo, pedimos os documentos do usuário para realizar o facematch:

    • Se o resultado do facematch for positivo, solicitamos a assinatura eletrônica;

    • Se o resultado do facematch for negativo, finalizamos a jornada sem pedir a assinatura eletrônica.

A capacidade Score de risco está sendo descontinuada e só poderá ser utilizada em casos excepcionais.


Como integrar


1

Se autentique

Primeiramente você deve possuir uma conta de serviço e realizar a autenticação OAuth2 para obter um access-token válido.

2

Crie um processo

Com o access-token obtido no passo anterior, realize uma requisição do tipo POST no endpoint client/v1/process(aqui você informará o "flow" que deseja utilizar).

3

Defina onde será a jornada do seu usuário

Nesta etapa você irá definir onde será a jornada do seu usuário.

4

Consulte o resultado do processo

Com o access-token obtido no passo 1, realize uma requisição do tipo GET no endpoint client/v1/process/{id}(aqui você informará o "id" do processo que foi criado no passo 2), consulte o resultado do processo e tome a decisão de aprovar ou não o usuário.


Obter Conjunto Probatório do Documento Assinado

Nesta seção, você encontrará como obter o conjunto probatório do Sign de um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Obtenção do Conjunto Probatório do Documento Assinado no by Unico. Este endpoint fornecerá o conjunto probatório da assinatura do usuário final em fluxos que possuem a capacidade Assinatura Eletrônica.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:

  • UAT: https://signhom.acesso.io;

  • Produção: https://sign.acesso.io.


Obtenção do Conjunto Probatório do Documento Assinado


Exemplo de um documento gerado:


Consultar Resultado do Processo

Nesta seção, você encontrará como obter o resultado de um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Consulta do Resultado de Processos no by Unico.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Consulta do Resultado do Processo


Os processos devem ser criados exclusivamente em uma comunicação backend-to-backend, devido à nossa política de CORS, que impede a criação de processos em uma comunicação frontend-to-backend.

O conteúdo retornado no parâmetro process.services.documents.doc.data, referente à tecnologia de OCR Extração, pode ser consultado abaixo:

Caso não consigamos extrair algum campo do documento, ele não é listado no retorno da API.

Dicas:

  • Para implementar suas regras de negócio, sempre valide o retorno das capacidades analisando os parâmetros do response na seguinte ordem:

    • state = PROCESS_STATE_FINISHED E result = PROCESS_RESULT_OK;

      • ENTÃO, pode realizar a tomada de decisão analisando os retornos do parâmetro authenticationInfo.

      • Caso receba o state = PROCESS_STATE_FINISHED E result = PROCESS_RESULT_ERROR, interprete que houve algum erro no processamento da biometria e tente novamente.

  • Para melhorar a performance da sua operação, você pode utilizar nossos Webhooks e só consultar o resultado de processos que estiverem nos status finalizados;


Obter Conjunto Probatório

Nesta seção, você encontrará como obter o conjunto probatório de um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Obtenção do Conjunto Probatório no by Unico. Este endpoint fornecerá o conjunto probatório da transação biométrica finalizada, permitindo que você o armazene para possíveis contestações futuras por parte do usuário final.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Obtenção do Conjunto Probatório


Os processos devem ser criados exclusivamente em uma comunicação backend-to-backend, devido à nossa política de CORS, que impede a criação de processos em uma comunicação frontend-to-backend.

O conjunto probatório só está disponível para os processos finalizados.


Especificação do conjunto probatório

Nesta seção, você encontrará todas as especificações do conjunto probatório do by Unico


O conjunto probatório é um documento em .pdf contendo evidências de autenticação de um usuário que realizou a validação de identidade no by Unico.

A seguir, veja como este documento é representado, bem como a especificação de seus campos de retorno:

Campos do Conjunto Probatório (clique em cada um para saber mais)

Usuário
  • Foto com marca d'água;

  • Nome - indica o nome da pessoa autenticada. Esse dado é obtido através do parâmetro person.friendly_name do CreateProcess;

  • CPF do titular - indica o CPF da pessoa autenticada. Esse dado é obtido através do parâmetro person.dui_value do CreateProcess;

  • Canal de contato - indica o canal de comunicação com a pessoa autenticada. Esse dado é obtido através do parâmetro person.notifications do CreateProcess.

Processo
  • Fluxo executado - indica qual fluxo foi executado. Esse dado é obtido através do parâmetro flow do CreateProcess;

  • Identificador do processo - indica o id do processo. Esse dado é obtido através do parâmetro procees.id no retorno do CreateProcess;

  • URL - indica a URL de autenticação do processo;

  • Criação - indica a data da criação do processo. Esse dado é obtido através do parâmetro createdAt no retorno do CreateProcess;

  • Finalização - indica a data de finalização do processo. Esse dado é obtido através do parâmetro finishedAt no retorno do CreateProcess;

  • Estado - indica o status do processo. Esse dado é obtido através do parâmetro state no retorno do CreateProces;

  • Empresa - indica a empresa.

Validações
  • Tipo de validação - indica o tipo de validação da autenticação do processo;

  • Identidade - indica resultado da Verificação de Identidade;

  • Detecção de vida - indica resultado da Prova de vida.

Dados de navegação
  • Sistema operacional e navegador - indica os dados do dispositivo;

  • Endereço do IP - indica o IP do dispositivo.

Evidências de uso dos módulos nos flows iddocs, idsign e iddocssign

Quando o processo envolve os fluxos de IDDocs e Sign, o conjunto probatório também retorna dados desses fluxos como:

Documentos:

  • Tipo de documento - identifica o documento compartilhado pela pessoa. Ex: CNH / RG;

  • Modulo de coleta - caso Sim, identifica se houve a captura de um documento;

  • Documento validado - caso Sim, identifica que o documento compartilhado/reutilizado foi validado.

Assinatura:

  • Dados do Envelope - indica os documentos e seus assinantes;

  • ID do envelope - UUID que identifica o envelope no Unico Sign

Essas evidências podem ser utilizadas para garantir a autenticidade do processo.

O conjunto probatório só está disponível para os processos finalizados.


Obter Selfie do Usuário

Nesta seção, você encontrará como obter a selfie de um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Obtenção da Selfie do Usuário no by Unico. Este endpoint fornecerá a selfie, com marca d'água, do usuário final em processos concluídos, permitindo que você a utilize como suporte em casos de contestação por parte do usuário.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Obtenção da Selfie do Usuário


Os processos devem ser criados exclusivamente em uma comunicação backend-to-backend, devido à nossa política de CORS, que impede a criação de processos em uma comunicação frontend-to-backend.

Pontos importantes:

  • A liberação da permissão para obter a selfie do usuário dependerá de avaliação interna da Unico. Entenda com o responsável do seu projeto se poderá consumir este serviço;

  • Só é possível recuperar a selfie com a marca d'água.


Obter Documento Assinado

Nesta seção, você encontrará como obter o documento assinado de um processo no by Unico através da API REST


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint de Obtenção do Documento Assinado no by Unico. Este endpoint fornecerá o documento assinado do usuário final em fluxos que possuem a capacidade Assinatura Eletrônica.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Obtenção do Documento Assinado


Exemplo de um documento gerado:

Caso o retorno do documento assinado via by Unico apresente atraso no processamento, recomendamos aguardar pelo menos um minuto após a conclusão do processo antes de realizar a consulta. Adicionalmente, é importante configurar uma política de tentativa automática (retry) para os casos em que o documento assinado ainda não esteja disponível, como realizar até 10 tentativas com intervalos de 1 a 5 minutos entre elas.


Erros

Nesta seção, você encontrará a visão geral sobre os erros que pode receber nos endpoints da plataforma Unico IDCloud


Introdução


A plataforma IDCloud utiliza códigos de resposta HTTP convencionais para indicar o sucesso ou falha de uma solicitação de API.

Como regra geral:

  • Códigos no intervalo 2xx indicam sucesso na requisição;

  • Códigos no intervalo 4xx indicam parâmetros incorretos ou incompletos (por exemplo, um parâmetro obrigatório foi omitido ou uma operação falhou com terceiros, etc.);

  • Códigos no intervalo 5xx indicam que houve um erro nos servidores da plataforma Unico IDCloud.

A plataforma Unico IDCloud também gera uma mensagem de erro e um código de erro formatado em JSON:

Erros possíveis


Neste tópico, você encontrará os possíveis erros dos endpoints, separados por seu HTTP response.

Criar Processo


Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

Consultar Resultado do Processo


Obter Selfie do Usuário


Obter Conjunto Probatório


Obter Documento Assinado


Obter Conjunto Probatório do Documento Assinado




Redirecionando o usuário

Nesta seção, você encontrará como informações redirecionar um usuário em suas aplicações na experiência do by Unico


Aqui você encontrará as 3 formas de gerenciar a experiência do usuário em suas aplicações:

Também é possível utilizar o link gerado pelo by Unico em frameworks híbridos. Para isso, você pode criar uma bridge entre o framework utilizado com o nativo e seguir como sugerimos na documentação ou utilizar de alguma biblioteca que disponibilize essas opções de integração.

A integração da WebView na sua aplicação é de total responsabilidade do cliente, uma vez que esta funcionalidade não é oferecida como parte das bibliotecas ou SDKs da Unico. Por conta disso, não oferecemos suporte técnico para dúvidas ou problemas relacionados à implementação da WebView em seu aplicativo. Para obter orientações sobre a configuração, recomendamos consultar a documentação oficial da tecnologia utilizada em seu projeto (por exemplo, React Native, Flutter, etc).


Endereço da plataforma de autenticação que faz a emissão de tokens de acesso. Este valor deverá ser sempre e exatamente .

Inserção de uma barra ao final do endereço: ;

Uso do protocolo HTTP ao invés de HTTPS: .

Também é possível utilizar bibliotecas previamente estabelecidas para realizar a criação do JWT. Como referência, é possível encontrar uma lista de bibliotecas no site .

2 - Fazendo a requisição de um token de acesso

3 - Tratando a resposta da plataforma de autenticação

O token de acesso retornado no campo “acess_token” do objeto JSON também é um token JWT que deverá ser utilizado nas APIs dos Produtos da unico. Caso retorne um erro na requisição, é possível consultar o tipo do erro na tabela de erros clicando .

4 - Duração do token de acesso

² JSON Web Signature: .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O by Unico é um meio de integração do Unico IDCloud que permite que os clientes se integrem de forma mais simples e consigam conectar diferentes em uma mesma jornada. Esse meio de integração fornece os recursos necessários para realizar Prova de vida, Verificação de Identidade, Score de risco, Captura e reaproveitamento de documentos e Assinatura eletrônica.

Saiba mais em .

Saiba mais em .

A jornada será web? Você pode utilizar o do navegador ou o .

A jornada será no seu app? Você pode utilizar uma .

A jornada será no fluxo de mensagens? Você pode enviar notificações via WhatsApp e SMS (para isso, basta informar o parâmetro correspondente na requisição no passo 2).

Saiba mais em .

Para otimizar sua integração, você pode utilizar o e saber quando o resultado do seu processo estiver concluído.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Para entender mais sobre o conjunto probatório, veja a seção .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

code
message
Descrição
message
Descrição
code
message
Descrição

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O campo userRedirectUrl é usado para direcionar o usuário. Esse campo é recebido na resposta de sucesso da criação do processo ao realizar a requisição .

(1) Usando Redirect:

Recomenda-se seguir os seguintes passos:

  • Em seu fluxo comum (que está inserido o Cadastro by Unico) você irá redirecionar o cliente para o link gerado através da API;

  • Após isso o cliente de dentro da plataforma realiza os procedimentos necessários para continuar o fluxo;

  • Quando concluído, ele é redirecionado para a sua página (utilizando o redirectUrl passado na criação do processo).

(2) Usando window.open():

A opção window.open() consiste em abrir uma nova aba do navegador do usuário para que ele possa completar o processo. Ao final essa aba é fechada e redirecionada para sua aplicação.

Para isso é recomendado:

  • Seguir a documentação pública sobre isso, que se encontra ;

  • Monitorar se houve alteração de URL (para a redirectUrl) e então fechar a aba utilizando window.close().

Passo 1: Usando CustomTabs para integração

1 - Insira no app/build.gradle a dependência necessária para o uso de CustomTabs:

Passo 2: Abrindo uma CustomTab

Passo 3: Modificando AndroidManifest

Coloque no AndroidManifest.xml as permissões e intents necessários na Activity que deseja receber a callback_uri. É necessário incluir o atributo android:launchMode="singleTop" como também a tag <data> informando os dados da URI.

As seguintes permissões são necessárias para funcionar corretamente:

  • Câmera;

  • Geolocalização.

Passo 4: Pegando informações de retorno

Para pegar as informações de redirect com os dados fornecidos, você pode usar o seguinte código no método onNewIntent da sua Activity:

Passo 1: Criar o controlador de autenticação

1 - O primeiro passo é criar o controlador de autenticação, e, para isso crie uma classe chamada UnicoAuthenticationController (ou como preferir chamar).

2 - Na sequência, importe o framework AuthenticationServices no topo da classe.

3 - Declare a classe como NSObject e implemente o protocolo ASWebAuthenticationPresentationContextProviding.

  • O resultado deve ser:

Passo 2: Implementar a autenticação

1 - Abra o arquivo onde você executa a autenticação e adicione as importações necessárias (como exemplo, o ContentView.swift é usado).

2 - Para controlar o estado do fluxo é preciso criar a propriedade @State.

3 - Crie uma instância da classe UnicoAuthenticationController fora do corpo da estrutura ContentView.

4 - Para a validação do processo, crie uma função chamada redirectUser.

Ambientes:

Lembre-se de alterar a url URL_AUTHENTICATION para a URL de autenticação recebida em seu processo e também o callbackURLScheme BUNDLE para o redirect informado na criação do processo (o uso do Bundle Identifier de seu aplicativo é recomendado).

Autenticação única:

É importante setar prefersEphemeralWebBrowserSession para true para garantir uma autenticação única por processo.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Android

Compatível com todos os dispositivos com câmera frontal, Android 8+, armv7 ou arm64.

iOS

Compatível com todos os dispositivos iOS igual ou superior a versão 11.

Navegadores nativos

  • IOS:

    • versão superior ou igual a 12.

  • Android:

    • versão superior ou igual a 5.

Navegadores em dispositivos móveis

  • Android:

    • Chrome: versão superior ou igual a 90.

  • IOS:

    • Safari: versão superior ou igual a 14.1;

    • Chrome: versão superior ou igual a 90 (apenas para IOS versão igual superior a 14.4).

Navegadores de computadores/notebooks

  • Chrome:

    • versão superior ou igual a 85.

  • Firefox:

    • versão superior ou igual a 94.

  • Safari:

    • versão superior ou igual a 11.

jwt.io
​
​
aqui
​
https://tools.ietf.org/html/rfc7515
​
Central de Ajuda
capacidades
Autenticação
CreateProcess
Redirect
SDK
Webview
CreateProcess
GetProcess
Webhook
​
Central de Ajuda
{
    "error": {
        "code": "0000",
        "description": "error description"
    }
}

3

invalid flow

Quando o flow específicado não existe.

3

invalid purpose

Quando a proposta informada não é valida.

3

invalid callbackUri: unable to parse callbackUri: parse "": empty url, invalid callbackUri: url:

Quando o callbackUri informado não é válido.

3

invalid person: email required for notification channel NOTIFICATION_CHANNEL_EMAIL, invalid email address for notification channel NOTIFICATION_CHANNEL_EMAIL

Quando o e-mail informado não é válido, mas há a notificação via e-mail.

3

invalid person: phone number required for notification channel NOTIFICATION_CHANNEL_WHATSAPP, phone number does not contain 13 chars for notification channel NOTIFICATION_CHANNEL_WHATSAPP

Quando o telefone informado não é válido, mas há a notificação via SMS ou WhatsApp.

3

idnsv2/GetPublicID request error: rpc error: code = InvalidArgument desc = invalid dui value

Quando o CPF informado não é válido.

9

XX ID Apikeys are not set

Quando alguma API Key não foi configurada corretamente.

Jwt header is an invalid JSON

Quando o access-token utilizado contém caracteres errados.

Jwt is expired

Quando o access-token utilizado expirou

99999

Internal failure! Try again later

Quando há algum erro interno.

<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-permission android:name="android.permission.CAMERA"/> 
// necessário ter as permissões de câmera e geolocalização 

<activity
    android:name=".CustomTabActivity"
    android:exported="true"
    android:label="@string/app_name"
    android:theme="@style/Theme.Customtabs"
    android:launchMode="singleTop">

    <intent-filter android:label="Custom Tab">
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- scheme e host são os dados fornecidos na criação de um processo no campo callback_uri
        callback_uri: "foobar://success?code=1234" -->
        <data android:scheme="foobar" android:host="success"/>
    </intent-filter>

</activity>
override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)

    val url = intent.data
    val scheme = url.scheme // "foobar"
    val host = url.host // "success"
    val code = url.getQueryParameter("code") // "1234"
}
import AuthenticationServices

class UnicoAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
           if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
               if let mainWindow = windowScene.windows.first {
                   return mainWindow
               }
           }
           return ASPresentationAnchor()
       }
}
import SwiftUI
import AuthenticationServices
@State private var finished = false
let unicoController = UnicoAuthenticationController()
func redirectUser() {
        guard let url = URL(string: "URL_AUTHENTICATION") else { return }

        var session: ASWebAuthenticationSession?
        session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
            guard callbackURL != nil else {
                if let error = error {
                    return print("Erro durante o processo: \(error.localizedDescription)")
                }
                return
            }

            // Processa o URL de callback para verificar se o processo foi finalizado
            session?.cancel()
            finished = true
        }

        session?.presentationContextProvider = unicoController
        session?.prefersEphemeralWebBrowserSession = true
        session?.start()
    }

Integração by Client

Nesta seção, você encontrará todas as especificações técnicas das APIs REST do IDCloud, utilizando o meio de integração by Client

API Reference

Nesta seção, você encontrará todas as APIs REST disponíveis para utilização do meio de integração by Client

https://identityhomolog.acesso.io
https://identityhomolog.acesso.io/
http://identityhomolog.acesso.io
aqui
Erros
​
Central de Ajuda
aqui
https://api.cadastro.uat.unico.app
https://api.cadastro.unico.app
Erros
​
Central de Ajuda
Especificação do Conjunto Probatório
aqui
https://api.cadastro.uat.unico.app
https://api.cadastro.unico.app
Erros
​
Central de Ajuda
​
Central de Ajuda
aqui
https://api.cadastro.uat.unico.app
https://api.cadastro.unico.app
Erros
​
Central de Ajuda
aqui
https://signhom.acesso.io
https://sign.acesso.io
Erros
​
Central de Ajuda
​
Central de Ajuda
CreateProcess
implementation("androidx.browser:browser:1.5.0")
import android.net.Uri
import androidx.activity.ComponentActivity
import androidx.browser.customtabs.CustomTabsClient
import androidx.browser.customtabs.CustomTabsIntent

class CustomTabActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)

       openCustomTab(<URL_CBU>)
    }

    fun openCustomTab(url: String) {
        val builder = CustomTabsIntent.Builder()
        val customTabsIntent = builder.build()
        customTabsIntent.launchUrl(this, Uri.parse(url))
    }
}
aqui
​
Central de Ajuda

Guia de uso e integração

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Android

Guia de uso e integração

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos iOS

Guia de uso e integração

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Flutter

Guia de uso e integração

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em suas aplicações Web

Visão Geral

Nesta seção, você encontrará todas as especificações técnicas das APIs REST do by Client


Introdução


O by Client é um canal que oferece toda a liberdade para o cliente utilizar as soluções de validação de identidade da plataforma IDCloud.

Você pode combinar as capacidades como quiser e nos casos de uso mais distintos, mas para isso você deverá ter API Keys configuradas com as capacidades que deseja utilizar.

*Também é possível utilizar o by Client para processar sua base de faces. Para isso, entre em contato com o responsável pela sua conta, que irá orientá-lo sobre os procedimentos necessários para essa tratativa.

Para solicitar as capacidades na API Key, contate o responsável pelo seu projeto de integração ou o time de suporte da Unico para realizar essa configuração

Capacidades síncronas e assíncronas


No by Client possuímos capacidades onde a resposta é síncrona (ou seja, no momento de criar o processo já devolvemos a resposta) e outras capacidades assíncronas (onde processamos os dados e você necessariamente precisa "buscar" este resultado através de um método GET na API REST.

Em sua operação você poderá combinar as capacidades como bem quiser, porém cada capacidade terá sua comunicação, por exemplo:

  • Você pode ter uma operação que utilize as capacidades Verificação de Identidade + Alerta de comportamento + Score de risco;

  • Ao criar o processo, a resposta das capacidades Verificação de Identidade e Alerta de comportamento serão síncronas, no próprio response da API de criação de processo;

  • Já a capacidade de Score de risco será executada de forma assíncrona, sendo necessário aguardar seu processamento e então realizar uma outra requisição GET para obter o resultado final do processo.

Abaixo veja as capacidades síncronas e assíncronas:

Capacidades síncronas


Prova de vida:

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 1
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 2
}

Verificação de Identidade:

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  }
}

Alerta de comportamento:

{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
    "result": "yes"
  }
}
{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
    "result": "inconclusive"
}

Validação (1:1)

{
    "authenticated": "true"
}
{
    "authenticated": "false"
}

Reaproveitamento e captura de documentos:

{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "document": {
    "id": "b97c3fd9-d95d-413f-bc0a-75eb87304421",
    "type": "CNH",
    "cpfMatch": false,
    "faceMatch": false,
    "content": {
      "numero": "044589731564",
      "rgNumero": "123456789 SESP PR",
      "nomeCivil": "Homer Simpson",
      "filiacao": [
        "Monasimpson",
        "Monasimpson"
      ],
      "dataNascimento": "1990-05-12T00:00:00Z",
      "dataHabilitacao": "1997-11-18T00:00:00Z",
      "dataExpiracao": "2017-12-07T00:00:00Z",
      "dataEmissao": "2012-12-07T00:00:00Z",
      "localEmissao": "Curitiba PR",
      "categoria": "B",
      "renachNumero": "PR904987581"
    },
    "fileUrls": [
      "https://url-signer-1",
      "https://url-signer-2"
    ]
  }
}

Capacidades assíncronas


Verificação de Identidade:

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  }
}

Assim como a capacidade Verificação de Identidade é um capacidade "síncrona", ela também pode ser configurada para uso "assíncrono".

Score de risco:

{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "score": 50
}

Alerta de comportamento:

{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
    "result": "yes"
  },
  "faceWithOtherId": {
    "result":"yes"
  }
}
{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
    "result": "inconclusive"
}

Assim como a capacidade Alerta de comportamento é um capacidade "síncrona", ela também pode ser configurada para uso "assíncrono".


PoCs disponíveis

Nesta seção, você encontrará a lista de todas as PoCs do by Unico disponíveis para apoiar a sua implementação.


Os seguintes exemplos de projetos são disponibilizados para facilitar o entendimento do funcionamento do by Unico.

Caso não encontre a POC nesta seção, solicite a POC ao seu Gerente de Projetos e ela será compartilhada através de um diretório SFTP.

PoCs em ambiente nativo


Linguagem de programação
Descrição
Repositório

Swift

PoC em Swift que implementa o by Unico na WebView em iOS

Kotlin

PoC em Kotlin que implementa o by Unico na WebView em Android

Nosso suporte é restrito a aplicativos desenvolvidos diretamente nas plataformas nativas Android e iOS, utilizando seus respectivos módulos nativos, além do framework Flutter (se a implementação for utilizando nosso plugin). No momento, não oferecemos suporte para aplicativos desenvolvidos em frameworks híbridos, como React Native, Ionic ou outras tecnologias de desenvolvimento multiplataforma.

PoCs em ambiente web


Linguagem de programação
Descrição
Repositório

Angular

PoC em Angular que implementa o by Unico através do SDK da Unico

React

PoC em React que implementa o by Unico através do SDK da Unico

JavaScript

PoC em JavaScript que implementa o by Unico através do SDK da Unico

Vue JS

PoC em Vue JS que implementa o by Unico através do SDK da Unico

NextsJS

PoC em NextsJS que implementa o by Unico através do SDK da Unico


Postman Collection

Nesta seção, você encontrará você encontrará a collection do Postman com as APIs REST do by Unico



Erros

Nesta seção, você encontrará a visão geral sobre os erros que pode receber nos endpoints da plataforma Unico IDCloud


Introdução


A plataforma IDCloud utiliza códigos de resposta HTTP convencionais para indicar o sucesso ou falha de uma solicitação de API.

Como regra geral:

  • Códigos no intervalo 2xx indicam sucesso na requisição;

  • Códigos no intervalo 4xx indicam parâmetros incorretos ou incompletos (por exemplo, um parâmetro obrigatório foi omitido ou uma operação falhou com terceiros, etc.);

  • Códigos no intervalo 5xx indicam que houve um erro nos servidores da plataforma Unico IDCloud.

A plataforma Unico IDCloud também gera uma mensagem de erro e um código de erro formatado em JSON:

{
    "error": {
        "code": "0000",
        "description": "error description"
    }
}

Erros possíveis


Neste tópico, você encontrará os possíveis erros dos endpoints, separados por seu HTTP response.

Criar Processo


Consultar Resultado do Processo



Reaproveitamento e captura de documentos

Nesta seção, você encontrará as particularidades de criar um processo que tenha o Reaproveitamento e captura de documentos como capacidade


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento dos endpoints relacionados à capacidade Reaproveitamento e captura de documentos. O uso do Reaproveitamento exige que haja um processo de Verificação de Identidade anterior e este deve obtido a resposta "SIM" OU um Score de risco igual ou maior que +50, do contrário será necessário capturar o documento do usuário.

Trata-se de uma capacidade síncrona que exige o consumo de dois endpoints, detalhados nesta documentação, para sua utilização completa.

As capacidades da plataforma Unico IDCloud via by Client são gerenciadas por meio de API Keys - utilizadas como um parâmetro no header das requisições -, que definem o escopo de acesso. Como pré-requisito, é necessário possuir uma API Key configurada excluvisamente para a capacidade Reaproveitamento e captura de documentos, garantindo acesso dedicado e seguro ao recurso.

Fale com o responsável do seu projeto para obter a API Key com esta configuração.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Consulta de documento para ser reaproveitado


Caso encontre um documento para ser reaproveitado, no endpoint de criação do processo você irá informar o id deste documento no parâmetro document.documentId e não será necessário realizar a captura do documento e enviar o base64 no parâmetro document.files.

Criação do Processo


Pontos Importantes:

  • Para utilizar a capacidade de Reaproveitamento e captura de documentos, deve-se utilizar a capacidade Verificação de Identidade anteriormente, pois é necessário utilizar o processId obtido da Verificação de Identidade no parâmetro document.authProcessId:

    • O processo precisar ser de uma biometria válida, ser utilizado em até 24h a partir de sua finalização;

    • É possível reutilizar uma autenticação biométrica realizada previamente pelo mesmo usuário em um prazo de até 24 horas. Dentro desse intervalo, a prova de autenticação do ID pode ser utilizada em diferentes processos de verificação de documentos (ex: RG e CNH), sem a necessidade de uma nova biometria.

  • Caso não consigamos extrair algum campo do documento, ele não é listado no retorno da API;

  • Ao utilizar a funcionalidade Reaproveitamento e Captura de Documentos, é obrigatório informar ao usuário, na interface, sobre o reaproveitamento, conforme previsto em contrato.

  • Caso ocorra algum erro no processamento, o processo retornará um status = 5, como no exemplo abaixo:

      {
      "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
      "status": 5
      }

Conteúdo retornado no document.content baseado no document.type:

Dicas:

  • Para implementar suas regras de negócio, sempre valide os status finais dos processos (3,5). Para validar a resposta das capacidades IDCloud, só considere o status = 3 para sua tomada de decisão;


Cenários de response

Nesta seção, você encontrará os responses possíveis das combinações de capacidades separados por seus métodos, para facilitar seu entendimento sobre a integração by Client


Em todas as combinações descritas a seguir, caso ocorra algum erro no processamento, o processo retornará um status = 5. Por esse motivo, os cenários abaixo não exibem responses referentes a essa condição. Exemplo:

  {
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 5 //indica que houve um erro no processo
  }

Prova de vida


Para os cenários onde o response no CreateProcess é o mesmo que o response do GetProcess, otimize sua aplicação e tome sua decisão de forma síncrona.

Prova de vida + Verificação de Identidade


Para os cenários onde o response no CreateProcess é o mesmo que o response do GetProcess, otimize sua aplicação e tome sua decisão de forma síncrona.

Prova de vida + Verificação de Identidade + Score de risco


Para os cenários onde o response no CreateProcess é o mesmo que o response do GetProcess, otimize sua aplicação e tome sua decisão de forma síncrona.

Prova de vida + Verificação de Identidade + Alerta de comportamento


Para os cenários onde o response no CreateProcess é o mesmo que o response do GetProcess, otimize sua aplicação e tome sua decisão de forma síncrona.

Prova de vida + Verificação de Identidade + Alerta de comportamento + Score de risco


Para os cenários onde o response no CreateProcess é o mesmo que o response do GetProcess, otimize sua aplicação e tome sua decisão de forma síncrona.


Prova de vida + Verificação de Identidade + Alerta de comportamento

Nesta seção, você encontrará as particularidades de criar um processo que tenha a Prova de vida + Verificação de Identidade + Alerta de comportamento como capacidades


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento dos endpoints relacionado às capacidades Prova de Vida + Verificação de Identidade + Alerta de comportamento, utilizadas em conjunto.

Trata-se de três capacidades síncronas (Prova de vida + Verificação de Identidade + Alerta de comportamento), ou seja, toda a integração ocorre utilizando um único endpoint.

As capacidades da plataforma Unico IDCloud via by Client são gerenciadas por meio de API Keys - utilizadas como um parâmetro no header das requisições -, que definem o escopo de acesso. Como pré-requisito, é necessário possuir uma API Key configurada com as capacidades Prova de Vida + Verificação de Identidade + Alerta de comportamento, garantindo acesso dedicado e seguro ao recurso.

Fale com o responsável do seu projeto para obter a API Key com esta configuração.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Criação do Processo


Pontos Importantes:

  • Caso a resposta da capacidade Verificação de Identidade seja unicoId = yes, este retorno já engloba a Prova de vida (ou seja, não receberá o parâmetro liveness no response);

  • As capacidades Verificação de Identidade e Alerta de comportamento são totalmente independentes. Para implementar suas regras de negócio, não deixe de analisar o que significa cada retorno;

  • Para utilizar a capacidade Prova de vida, é indispensável o uso dos nossos SDKs:

    • É possível utilizar a capacidade de Verificação de Identidade sem a Prova de vida. Para este caso de uso o retorno de liveness sempre será liveness = 1. Neste cenário não há nenhuma validação da prova de vida, nem mesmo passiva.

  • Caso ocorra algum erro no processamento, o processo retornará um status = 5, como no exemplo abaixo:

Dicas:

  • Para este caso de uso, não há a necessidade de Consultar o Resultado do Processo, visto que a resposta é síncrona;

  • Para implementar suas regras de negócio, sempre valide os status finais dos processos (3,5). Para validar a resposta das capacidades IDCloud, só considere o status = 3 para sua tomada de decisão;

  • Para mais informações sobre os cenários que pode receber no response, consulte a seção Cenários de response;


Prova de vida + Validação 1:1 + Alerta de comportamento

Nesta seção, você encontrará as particularidades de criar um processo que tenha Prova de vida + Validação (1:1) + Alerta de comportamento como capacidades.


Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento do endpoint relacionado às capacidades Prova de Vida + Validação (1:1) + Alerta de comportamento, utilizadas em conjunto.

Trata-se de três capacidades síncronas, ou seja, toda a integração ocorre utilizando um único endpoint.

As capacidades da plataforma Unico IDCloud via by Client são gerenciadas por meio de API Keys - utilizadas como um parâmetro no header das requisições -, que definem o escopo de acesso. Como pré-requisito, é necessário possuir uma API Key configurada com as capacidades Prova de Vida + Validação (1:1) + Alerta de comportamento, garantindo acesso dedicado e seguro ao recurso.

Fale com o responsável do seu projeto para obter a API Key com esta configuração.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Criação do Processo


Pontos Importantes:

  • Para utilizar a capacidade Prova de vida, é indispensável o uso dos nossos SDKs:

    • É possível utilizar a capacidade de Validação (1:1) sem a Prova de vida. Para este caso de uso, não devolveremos o parâmetro liveness no response da API. Neste cenário não há nenhuma validação da prova de vida, nem mesmo passiva.

  • Caso ocorra algum erro no processamento, o processo retornará um status = 5, como no exemplo abaixo:

Dicas:

  • Para este caso de uso, não há a necessidade de Consultar o Resultado do Processo, visto que a resposta é síncrona;


Visão Geral

Nesta seção, você encontrará uma visão geral sobre o funcionamento do SDK da plataforma Unico IDCloud


Introdução


Os SDK's da plataforma Unico IDCloud tem como objetivo potencializar a segurança do seu negócio e dos seus clientes, permitindo inclusive personalizar a experiência de uso aplicando a identidade visual da sua marca. Os SDKs abstraem a complexidade de manipulação da câmera do dispositivo dos usuários e a captura de imagens (Selfie e documento), facilitando a vida do desenvolvedor e reduzindo o tempo de entrega do produto final. Outras vantagens:

  • Precisão na captura de imagens: Os SDKs possuem recursos que auxiliam o usuário a obter fotos biometricamente válidas, reduzindo o drop das imagens quando comparados a captura realizada pelas câmeras padrões dos dispositivos. São adicionados SmartFrames, “elementos chave“ que se ajustam automaticamente à silhueta e proporção da tela do usuário permitindo uma melhor captura da imagem;

  • Segurança reforçada: Recursos de criptografia e segurança contra injection de imagens, possuindo também funcionalidades que previnem fraudes adaptadas a diferentes modos de câmera. Camadas de segurança que funcionam de forma complementar, tanto a nível da aplicação quanto em relação aos dados que são trafegados entre os SDKs e o backend. O SDK também inclui ofuscação de código, bloqueio de emulador e checagem de bundle do aplicativo que a está executando.

Atualizações dos SDKs

É importante ressaltar que para o bom funcionamento das nossas soluções, com o máximo de segurança e estabilidade, é imprescindível que o SDK esteja devidamente atualizado. É responsabilidade do cliente acompanhar e garantir que está utilizando a versão mais recente do SDK disponível em nossos servidores.

Diagrama de Funcionamento


O SDK (Client-side) é responsável por simplificar sua integração com a plataforma Unico IDCloud, absorvendo toda a complexidade da manipulação da câmera e captura de imagens.

Se a captura for feita com sucesso, o SDK retorna um objeto que deve ser enviado para a API do motor biométrico, completando assim a validação biométrica, conforme diagrama exemplificado abaixo:

1

O usuário acessa sua aplicação

2

Através do SDK, sua aplicação solicita o frame para captura (de acordo como foi configurada a sua aplicação)

3

Sua aplicação renderiza o frame para captura em um placeholder pré estabelecido

4

O SDK captura a imagem, gerando um token JWT que será retornado para a sua aplicação

5

Sua aplicação repassa o JWT para seu servidor

6
7

Os servidores retornam a resposta do motor biométrico, que deve ser enviada para sua aplicação

8

Sua aplicação disponibiliza uma resposta ao usuário

Requisitos suportados por cada Client SDK


A seguir, informações e requisitos necessários, oficialmente suportados por cada Client SDK da Unico:

Nosso suporte é restrito a aplicativos desenvolvidos diretamente nas plataformas nativas Android e iOS, utilizando seus respectivos módulos nativos, além do framework Flutter (se a implementação for utilizando nosso plugin). No momento, não oferecemos suporte para aplicativos desenvolvidos em frameworks híbridos, como React Native, Ionic ou outras tecnologias de desenvolvimento multiplataforma.

Versionamento dos SDKs


Os SDKs da plataforma Unico IDCloud possuem um versionamento semântico, sendo assim, há numeração de versão "MAJOR.MINOR.PATCH", descrita da seguinte forma:

  • Versão Maior(MAJOR): Quando fizer mudanças incompatíveis na API;

  • Versão Menor(MINOR): Quando adicionar funcionalidades mantendo compatibilidade;

  • Versão de Correção (PATCH): Quando corrigir falhas mantendo compatibilidade.


Prova de vida + Verificação de Identidade + Alerta de comportamento + Score de risco

Nesta seção, você encontrará as particularidades de criar um processo que tenha a Prova de vida + Verificação de Identidade + Alerta de comportamento + Score de risco como capacidades


A capacidade Score de Risco está em processo de descontinuação e, por isso, não recomendamos sua utilização. Para mais informações, entre em contato com o responsável pela sua conta.

Introdução


Nesta seção, você encontrará a documentação detalhada sobre o funcionamento dos endpoints relacionado às capacidades Prova de Vida + Verificação de Identidade + Alerta de comportamento + Score de risco, utilizadas em conjunto.

Trata-se de três capacidades síncronas (Prova de vida + Verificação de Identidade + Alerta de comportamento) integradas com uma capacidade assíncrona (Score de risco). Ou seja, para obter todas as respostas será necessário Consultar o Resultado do Processo.

Para essa integração, será necessário consumir dois endpoints descritos nesta documentação, que também podem ser combinados com o uso de Webhooks.

As capacidades da plataforma Unico IDCloud via by Client são gerenciadas por meio de API Keys - utilizadas como um parâmetro no header das requisições -, que definem o escopo de acesso. Como pré-requisito, é necessário possuir uma API Key configurada com as capacidades Prova de Vida + Verificação de Identidade + Alerta de comportamento + Score de risco, garantindo acesso dedicado e seguro ao recurso.

Fale com o responsável do seu projeto para obter a API Key com esta configuração.

Antes de começar


Suas requisições de API são autenticadas utilizando um access-token. Qualquer requisição que não inclua um access-token válido retornará um erro.

Endpoints:


Criação do Processo


Pontos Importantes:

  • Caso a resposta da capacidade Verificação de Identidade seja unicoId = yes, este retorno já engloba a Prova de vida (ou seja, não receberá o parâmetro liveness no response);

  • Para utilizar a capacidade Prova de vida, é indispensável o uso dos nossos SDKs:

    • É possível utilizar a capacidade de Verificação de Identidade sem a Prova de vida. Para este caso de uso o retorno de liveness sempre será liveness = 1. Neste cenário não há nenhuma validação da prova de vida, nem mesmo passiva.

  • Caso a resposta da capacidades Verificação de Identidade e Alerta de comportamento sejam unicoId = inconclusive + identityFraudsters = inconclusive, haverá a orquestração com a capacidade Score de risco. Caso alguma dessas respostas seja conclusiva, não haverá a orquestração com o Score de risco.

  • Caso ocorra algum erro no processamento, o processo retornará um status = 5, como no exemplo abaixo:

Dicas:

  • Para implementar suas regras de negócio, sempre valide os status finais dos processos (3,5). Para validar a resposta das capacidades IDCloud, só considere o status = 3 para sua tomada de decisão.

Consulta do Resultado do Processo


No endpoint da v2 (/processes/v2/{id}), também devolvemos algumas informações adicionais do usuário, conforme exemplo abaixo:

Atenção:

  • Quando a requisição GET for para um processo com status = 5 (erro), o status code de retorno é 410 (Gone) ao invés de 200 (Success);

  • Pode haver casos de drop na orquestração com a capacidade Score de risco. Neste cenário, o processo terá a combinação: {status = 3, unicoId = inconclusive, liveness = 1, identityFraudsters = inconclusive e SEM score no response da API}. Entenda mais na seção Cenários de response;

  • Caso consulte um processo que esteja no status = 2, implemente um polling até que obtenha um status = 3 ou implemente o Webhook da Unico para saber quando consultar o resultado.

Dicas:

  • Para implementar suas regras de negócio, sempre valide os status finais dos processos (3,4,5). Para validar a resposta das capacidades IDCloud, só considere o status = 3 para sua tomada de decisão;

  • Para melhorar a performance da sua operação, você pode utilizar nossos Webhooks e só consultar o resultado de processos que estiverem nos status finalizados;

  • Para mais informações sobre os cenários que pode receber no response, consulte a seção Cenários de response;

  • Para mais informações sobre os erros possíveis para este endpoint, consulte a seção Erros.


Padrão de captura (sem SDK)

Nesta seção, você encontrará como deve ser o padrão de captura da selfie do usuário, caso não utilize nossas SDKs


Para uma melhor performance das capacidades da plataforma IDCloud, orientamos que utilize nossos SDKs. Eles irão garantir o melhor funcionamento do produto como um todo, tanto em relação ao drop quanto na validação da Prova de vida.

Para obter melhores resultados na captura de imagens um padrão de captura foi definido. A imagem deve ser nítida com iluminação frontal suficiente. O rosto deve estar reto, voltado para a camera, sem objetos ou obstruções e com expressão neutra.

Normalmente, as imagens capturadas apresentam os seguintes problemas:

  • Iluminação atrás do cliente - É necessário que a iluminação frontal seja boa o suficiente para uma captura nítida do rosto;

  • Iluminação estourada - A iluminação frontal precisa ser boa o suficiente para uma captura nítida do rosto;

  • Rosto muito próximo da captura + iluminação - O rosto precisa estar enquadrado no centro da câmera e a iluminação frontal precisa ser boa o suficiente;

  • Imagens embaçadas - O rosto da pessoa precisa estar bem focado no momento da captura;

  • Imagens tremidas - Estabilizar a câmera na hora da captura;

  • Cliente de óculos - O cliente precisa estar sem óculos ou objetos que possam impedir a visualização completa da face.

Como obter uma boa captura de imagem


Para obtenção e envio de imagens, o padrão ICAO é utilizado. O padrão ICAO (International Civil Aviation Organization) consiste em características para que uma fotografia esteja em conformidade com os seguinte requisitos e recomendações definidos para configurações de captura e envio das imagens:

  • Posicionamento da face e informações adicionais:

    • A foto deve ser tirada de frente - olhar diretamente para a câmera e manter a cabeça ereta. O rosto deve estar centralizado. Os ombros devem estar alinhados, paralelos ao plano de imagem da câmera;

    • Os olhos devem estar abertos naturalmente - pupilas e íris visíveis;

    • Óculos - a foto deve ser capturada sem óculos;

    • Sem chapéu, boné, ou máscara - a região da face deve ser claramente visível;

    • Fisionomia Neutra - o rosto deve ter uma expressão neutra, a pessoa não deve sorrir, não levantar as sobrancelhas, não apertar os olhos ou franzir a testa;

    • Penteado - O cabelo também não deve cobrir a zona de visibilidade dos olhos.

  • Iluminação e fundo: Fundo claro, liso e sem textura. Não deve conter manchas, linhas ou curvas que fiquem visíveis na imagem capturada. Cores claras como azul claro ou branco podem ser usadas desde que haja distinção suficiente entre a área do rosto/cabelo e o fundo. As configurações de cor da câmera não devem ser alteradas dependendo da cor de fundo. Atrás da imagem do rosto, não deve haver sombra. Também não deve haver objetos visíveis ao fundo, como pessoas, móveis, papéis de parede estampados, plantas. A iluminação precisa ser adequada e uniforme, distribuída igualmente na face para que não haja diferença entre o lado esquerdo e lado direito. A foto precisa ter brilho e bom contraste entre cabelo, rosto e fundo. Fotos com iluminação ruim são fotos quando a iluminação está somente na lateral, iluminação superior, ou iluminação inferior.

  • Imagens no formato JPEG, PNG ou JWT;

  • Imagens capturadas em cores.

Tamanhos / Proporções


Selfies:

  • Tamaho recomendado: Proporção 1920x1080 ou 1080x1920;

  • Orientação: Retrato;

  • Tamanho: No máximo 800kb, se necessário pode comprimir em Jpeg92.

Documentos:

  • Tamanho recomendado: Proporção HD - 1280x720 ou 720x1280;

  • Tamanho mínimo: Proporção VGA - 640x480 ou 480x640;

  • Orientação: Caso use tipificação/ocr é recomendado que seja capturado na orientação de leitura;

  • Tamanho: No máximo 800kb, se necessário pode comprimir em Jpeg92;

  • Enquadramento: É recomendado que na imagem não haja espaços sobrando (sem bordas). Quanto maior a área de folga (borda), é pior para a tipificação de documentos.


A foto deve ter:

  • Cor.

  • Enquadramento.

  • Foco nítido e claro, sem marcas de tinta ou vincos.

  • Olhar diretamente para a câmera.

  • Mostrar o tom de pele natural.

  • Ter brilho e contraste apropriados.

  • Fisionomia neutra e olhos abertos claramente visíveis

  • Sem cabelo sobre os olhos.

  • De frente para a câmera, sem olhar por cima do ombro ou inclinado, e mostrando as duas bordas do rosto claramente.

  • Com um fundo simples de cor clara, de preferência branco.

  • Com iluminação uniforme, sem sombras ou reflexos de flash no rosto e sem olhos vermelhos.

  • Sem lentes de contato coloridas.

  • Sem maquiagem.

O uso de óculos não é recomendado, mas nos casos de necessidade do uso de óculos:

  • Os olhos devem estar nítidos, sem o reflexo do flash ou da luz ambiente nos óculos e sem lentes coloridas.

  • A armação não deve cobrir nenhuma parte dos olhos.

Dicas


Adicionar orientações antes da captura para o usuário:

Utilize "frames" de captura para orientar o posicionamento do cliente frente ao rosto:


Postman Collection

Nesta seção, você encontrará você encontrará a collection do Postman com as APIs REST do by Client



Webhook

Nesta seção, você encontrará informações sobre o funcionamento do Webhook da plataforma Unico IDCloud


Os artigos GetProcess respectivos aos meios de integração, descrevem uma maneira de obter o status de um processo através de uma chamada a um endpoint. Dessa forma, é realizado um polling para receber informações sobre os processos criados. Isso significa que o endpoint pode ser chamado diversas vezes para um mesmo processo para se obter o status mais recente.

Com o uso de webhooks é possível notificar um endpoint específico toda vez que o status de um processo for alterado.


Webhook é um serviço de notificação sistêmica que permite a integração assíncrona entre sistemas, onde um sistema notifica o outro através de um gatilho. Assim, os webhooks podem manter sistemas atualizados com informações mais recentes sem ser necessária a verificação constante por atualizações através de polling.

Como configurar o Webhook


Para configurar o webhook, são necessárias as seguintes informações:

  • URL de notificação: É o endpoint usado pelo By Unico para as notificações sobre as atualizações de status.

  • Tipo de autenticação: É o método de autenticação usado para invocar o endpoint. As seguintes opções estão disponíveis:

    • OAuth2;

    • Basic Authorization;

    • API Key;

    • Sem autenticação.

  • Para OAuth2 é necessário enviar as seguintes informações:

    • Endpoint do webhook;

    • URL do provedor OAuth2;

    • ClientId do provedor OAuth2;

    • Secret do provedor OAuth2.

  • Para o Basic Authorization é preciso enviar no formato user:pass;

  • Para API Key, é possível enviar em dois formatos:

    • header:value, quando é desejado que o header tenha um nome específico;

    • value: quando o header desejado é o Authorization.

  • Configurações de retentativas: Indica o número de tentativas para o caso de falha na chamada ao endpoint:

    • Número máximo de tentativas;

    • Intervalo entre tentativas (em segundos);

    • Rate limit: Limite máximo de envios simultâneos (máximo: 500);

    • Timeout: Tempo máximo de espera para a resposta do endpoint (em segundos);

  • Status a serem notificados: Atualmente a notificação é enviada sempre que o estado de um processo for alterado para:

Sobre a autenticação:

A API pode ser protegida por um método de autenticação como Basic Authentication ou API Key. Uma lista de IPs válidos para acesso também pode ser definida para proteção complementar.

Integração com a plataforma Unico IDCloud


Ao configurar um webhook na plataforma, você pode obter informações sobre os processos através de notificações enviadas para um endpoint da API desenvolvida por você para receber essas atualizações.

As informações enviadas pela plataforma para a API são:


A requisição deve ser um método POST em uma API REST tornando mais fácil e seguro o envio das informações. Todos os campos devem ser obrigatórios. O corpo da requisição deve aceitar o ID da transação e o estado, como mostrado no exemplo a seguir:

Sobre o status de resposta:

Atualmente a plataforma tem um conjunto de status que pode variar no futuro. Sendo assim, é recomendado que os status que o você tem interesse para tomar alguma ação sejam configuráveis.

Resposta


A resposta deve vir de forma síncrona. O status para requisições bem sucedidas deve estar no intervalo de 200 a 299. Qualquer outro status é considerado falha e então a plataforma realiza novas tentativas de notificações (com exponential backoff entre elas), até receber uma resposta 2xx ou até atingir o número máximo de tentativas.

Rate limit

Com intuito de não sobrecarregar seus recursos em situações de muitas transações, é possível especificar um limite superior de vezes em que o endpoint pode ser invocado.

Taxa de erros

A taxa de erros (respostas fora do intervalo de [200, 299]) deve ser sempre baixa. Caso contrário, o throughput do webhook será automaticamente reduzido, e essa redução junto ao mecanismo do retry pode implicar no aumento do tempo de execução de novos webhooks.

Idempotência

A atual implementação de webhook possui a garantia de at-least once delivery, portanto o mesmo status pode ser notificado mais de uma vez. Sendo assim, a implementação do endpoint deve ser feita de maneira idempotente.

Fallback

Em caso de alguma indisponibilidade no serviço do webhook, é recomendado que exista um método de fallback para que você possa continuar obtendo os status das transações dentro do tempo de resposta estabelecido. A consulta ao endpoint está descrita nas seções de GetProcess respectivas a cada meio de integração.


Guia de instalação

Nesta seção, você encontrará todas as informações necessárias para instalação do SDK da plataforma Unico IDCloud em seus aplicativos Android


Pré-requisitos do ambiente de desenvolvimento


É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

O componente de captura disponibilizado por meio do SDK Android dá suporte às versões igual ou superiores para as tecnologias:

  • Android: 5.0 (API 21);

  • Kotlin: 1.6.

Dispositivos compatíveis


Este SDK não funciona em emuladores, somente em dispositivos físicos.

O SDK Android é compatível com a grande maioria dos dispositivos que possuam Android 5.0 (API de nível 21) ou versões superiores.

A tabela a seguir lista os dispositivos testados em laboratório, além da disponibilidade das extensões do fornecedor/fabricante. Algumas extensões listadas podem estar sujeitas as API ou SKUs específicos do fabricante. Clique abaixo para ver os dispositivos testados:

Instalando o SDK Android


Para implementar o SDK Android da plataforma Unico IDCloud ao seu aplicativo Android, siga o passo a passo listado abaixo:

1

Configurando o Repositório Maven

O SDK Android é disponibilizado através de um Repositório Maven, adicione ao bloco repositories do arquivo build.gradle existente na raiz do seu projeto:

Habilite o suporte ao AndroidX ao em seu arquivo gradle.properties na raiz de seu projeto (isto garante uma melhor performance e funcionamento do frame de captura):

2

Permissões para utilização da Câmera e Internet

Para utilizar o método de abertura de câmera e internet em seu projeto é necessário adicionar as permissões em seu arquivo AndroidManifest.xml:

3

Inclusão da dependência

Após configurar o SDK Android, basta importá-lo em seu projeto. Para isto, adicione acessobio-android ao bloco dependencies do arquivo app/build.gradle.

  • A dependência deve ser incluída em um arquivo diferente do que foi utilizado no passo anterior. Neste passo, é necessário utilizar o arquivo build.gradle referente ao módulo e não ao projeto:

Ao compilar o projeto, você pode se deparar com o seguinte erro:

  • Invoke-customs are only supported starting with android 0 --min-api 26

Por incompatibilidade da versão do frame min-26. Adicione as linhas a seguir ao bloco compileOptions, no mesmo arquivo app/build.gradle:

4

Obtendo as credenciais

  • Entre em contato com o CSs e/ou time de Onboarding.

  • Solicite a SDK Key informando os identificadores de suas aplicações. Bundle Identifier para iOS, PackageID para Android e Host para WEB.

  • Os identificadores de suas aplicações serão vinculados a SDK Key pela equipe da Unico.

  • Você recebe a sua SDK Key para implementar o AcessoBioConfigDataSource.

5

Embarcando as credenciais em seu projeto

Implemente o protocolo AcessoBioConfigDataSource em sua classe:

Método depreciado - Java
Método depreciado - Kotlin

Política de atualizações

Nesta seção, você encontrará a política de atualizações para o uso da SDK


É essencial que todos os clientes mantenham uma rotina de atualização do SDK, uma vez que novas formas de ataque são desenvolvidas a todo momento. A melhor forma de ter seu negócio protegido contra novos formatos de fraudes de Injection e Liveness é usar a versão mais atualizada do SDK da Unico.

É responsabilidade do cliente manter uma rotina saudável de atualização da SDK, garantindo a versão mínima para o bom funcionamento das nossas soluções em suas operações. Assim como é responsabilidade da Unico disponibilizar versões atualizadas, em relação às ameaças que surgem no mercado, e manter nossos clientes informados sobre o tema. Tendo isso em mente, a Unico criou uma Política de atualização do SDK.

Por que temos uma política de atualizações do SDK?


Com o SDK desatualizado, nossos clientes estão vulneráveis a ataques de fraudadores. Considerando que a Unico preza pela máxima segurança de seus clientes, além da urgência do tema e necessidade de um processo ágil de atualizações, criou-se a política de atualização do SDK a fim de salvaguardar nossos clientes das mais novas fraudes que aparecem constantemente no mercado. A única forma de estar seguro é estar atualizado.

Categorias de Atualizações


A Unico categoriza todas as atualizações de SDK entre Crítica e Não-crítica, baseados na criticidade das fraudes que bloqueamos com a nova versão.

  • Atualizações Críticas: São atualizações que visam proteger nossos clientes contra fraudes e ataques recentes no mercado. Elas precisam ser implementadas em até 5 (cinco) dias corridos, tendo em vista a ameaça real que a operação está suscetível. A partir daí, não daremos mais suporte à versões anteriores. Na prática, o cliente que entrar em contato conosco com uma versão anterior a última deverá obrigatoriamente atualizar o SDK para que possamos atendê-lo.

  • Atualizações Não-Críticas: São atualizações mais simples, de melhoria da tecnologia. Elas podem ser implementadas em até 60 (sessenta) dias corridos. Vale reforçar que, quanto mais atual a versão, mais chances de evitar bugs e erros. Por isso recomendamos que seja feita a atualização o mais rápido possível. Após este período, não daremos mais suporte técnico e o cliente precisa atualizar seu SDK para que possamos atuar nos casos.

Nós identificamos as atualizações como críticas no Release Notes com uma tag logo abaixo da versão, conforme exemplo abaixo:

Atualização Crítica

Estes períodos valem para todos os clientes da Unico, independentemente da capacidade utilizada.


Pode acontecer quebra de contrato de API por conta dessa política?


Onde vejo quais são as novidades das versões?


Como faço para saber quando sai uma nova versão?


  • Para atualizações críticas: enviaremos um e-mail assim que a nova versão estiver disponível, com reforço via time de Customer Success. Informando a urgência do tema e o tempo de 5 (cinco) dias corridos para atualização.

  • Para atualizações Não-críticas: para evitar sobrecarga dos times dos clientes, enviaremos um e-mail mensal com o resumo das atualizações não-críticas. Informando os principais pontos de mudança e o tempo de 60 (sessenta) dias corridos para atualização.


Tem por objetivo, fornecer uma gama de possibilidades no uso das capacidades da plataforma IDCloud oferecendo uma solução que pode ser integrada ao seu back-end e liberdade para clientes que desejam controlar a experiência dos usuários com front-end próprio (para isso leia sobre o ) ou através dos nossos .

O by Client é um meio de integração do Unico IDCloud que permite que os clientes se integrem da maneira que quiserem, combinando ou não as como julgarem necessário. Esse meio de integração fornece os recursos necessários para realizar validação da Prova de vida, , Verificação da Identidade, Alerta de comportamento, Score de risco e Reaproveitamento e captura de documentos.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Entender como funciona o retorno de cada parâmetro é fundamental para implementar a melhor tomada de decisão. Para ver detalhadamente o significado de cada parâmetro, veja a seção .

Prova de vida

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 1
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 1
}
Prova de vida

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 2
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "liveness": 2
}
Prova de vida + Verificação de Identidade

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}

Observações:

  • A resposta de "yes" do unicoId.result (verificação de identidade) já engloba a validação da capacidade Prova de vida, ou seja, se a resposta for "yes" entende-se que a face do usuário é a do titular do CPF E ele estava ao vivo no momento da captura da selfie.

Prova de vida + Verificação de Identidade ❔

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1
}
Prova de vida + Verificação de Identidade

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}
Prova de vida + Verificação de Identidade ❔

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}
Prova de vida + Verificação de identidade

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
  }
}

Observações:

  • A resposta de "yes" do unicoId.result (Verificação de identidade) já engloba a validação da capacidade Prova de vida, ou seja, se a resposta for "yes" entende-se que a face do usuário é a do titular do CPF E ele estava ao vivo no momento da captura da selfie;

  • Quando a resposta do unicoId.result (Verificação de identidade) for "yes", não haverá a orquestração com a capacidade score de risco.

Prova de vida + Verificação de identidade❔+ Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 1,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "score": 50
}

Observações:

Prova de vida + Verificação de identidade❔+ Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Observações:

  • Quando o status = 3 e o unicoId.result for "inconclusive", mas não devolvermos o Score de risco, é porque houve um erro (drop) no motor de biométrica que não pôde gerar o score de probabilidade de risco.

Prova de vida + Verificação de Identidade + Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
  }
}

Observações:

  • Quando o status = 3 e o unicoId.result for "no" não haverá orquestração com a capacidade Score de risco.

Prova de vida + Verificação de identidade❔+ Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Observações:

  • Quando a resposta do liveness (Prova de vida) for 2, não haverá orquestração com o Score de risco.

Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "inconclusive"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "inconclusive"
  }
}

Observações:

  • A resposta de "yes" do unicoId.result (Verificação de identidade) já engloba a validação da capacidade Prova de vida, ou seja, se a resposta for "yes" entende-se que a face do usuário é a do titular do CPF E ele estava ao vivo no momento da captura da selfie.

Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "yes"
  }
}
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "inconclusive"
  }

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "inconclusive"
  }
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "yes"
  }

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "yes"
  }
Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "inconclusive"
  }

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "inconclusive"
  }
Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "yes"
  }

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "yes"
  }
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Observações:

  • Quando a resposta do liveness (Prova de vida) for 2, não executaremos as demais capacidades.

Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "inconclusive"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "inconclusive"
  }
}

Observações:

  • A resposta de "yes" do unicoId.result (Verificação de identidade) já engloba a validação da capacidade Prova de vida, ou seja, se a resposta for "yes" entende-se que a face do usuário é a do titular do CPF E ele estava ao vivo no momento da captura da selfie.

Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "yes"
   },
  "identityFraudsters": {
    "result": "yes"
  }
}
Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "inconclusive"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "inconclusive"
  }
}
Prova de vida + Verificação de identidade + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "no"
   },
   "identityFraudsters": {
      "result": "yes"
  }
}
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "yes"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "yes"
  }
}
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento + Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 1,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
      "result": "inconclusive"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "inconclusive"
   },
   "score": 50
}
Prova de vida + Verificação de identidade ❔ + Alerta de comportamento + Score de risco

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 1,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 1,
  "identityFraudsters": {
      "result": "inconclusive"
  }
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
   },
   "liveness": 1,
   "identityFraudsters": {
      "result": "inconclusive"
  }

Observações:

  • Quando o status = 3, unicoId.result ="inconclusive" e o identityFradsters.result = "inconclusive" , mas não devolvermos o Score de risco, é porque houve um erro (drop) no motor de biométrica que não pôde gerar o score de probabilidade de risco.

Prova de vida + Verificação de identidade ❔ + Alerta de comportamento

Response CreateProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Response GetProcess

{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "liveness": 2
}

Observações:

  • Quando a resposta do liveness (Prova de vida) for 2, não executaremos as demais capacidades.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Prova de vida: Os SDK's são utilizados em conjunto com a capacidade de para garantir que o usuário esteja ao vivo no momento de captura da selfie;

A captura das imagens por meio dos SDKs é apenas a primeira parte de sua jornada. Sendo assim, é de extrema importância que entenda os conceitos básicos e o funcionamento das APIs do motor biométrico. Para mais informações, veja sobre a API REST do .

A Unico não se responsabiliza por problemas decorrentes de falta de atualização do SDK na operação do cliente. []

Seu servidor interage com as APIs do motor biométrico para analisar a imagem (através das APIs REST do )

SDK Android
SDK iOS
SDK Web

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Você pode ver mais sobre como gerar um access-token .

UAT: ;

Produção: .

Para mais informações sobre os erros possíveis para este endpoint, consulte a seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Exemplos de fotos no padrão e fora do padrão:

Nota: Imagens retiradas do guia "ICAO Guide for MRTD Photo Guidelines. ICAO. Icao guide for mrtd photo guidelines.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O que é um webhook?

by Unico
by Client
by Unico
by Client

Requisições

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Pronto. Finalizada a instalação do SDK, siga para a implementação lendo o material a seguir:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Como faço para atualizar?

Você pode seguir o processo padrão de atualização ou instalação descrito conforme a versão que você utiliza: , , e .

Quebras de contrato de API são restritas apenas às releases de versões Major (). Isso significa que mudanças significativas no contrato da API só podem ocorrer com grandes mudanças na SDK, e não em revisões menores. Nós temos como prática evitar ao máximo qualquer quebra de versão Major, pois impacta em grandes mudanças na integração com o cliente, o que não é nosso objetivo. Faremos apenas em casos de extrema necessidade e sempre com o objetivo de garantir a segurança em todas as operações.

Cada uma das versões tem seus próprios release notes conforme os links abaixo, apresentando novas funcionalidades ou correções de bugs / bloqueios de fraudes: , , e .

Sempre que há uma nova versão do SDK, o site é atualizado. Se você é cliente da Unico receberá um e-mail com as atualizações e as informações sobre as mudanças. Caso não esteja recebendo, contate seu CSM.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Caso realize o GetProcess e o processo ainda não esteja concluído, retornaremos os status 1 ou 2. Só tome sua decisão final quando obtiver um status de conclusão do processo (status = 3). Você também pode utilizar o para ser notificado quando o processo estiver concluído.

Padrão de Captura
SDKs
capacidades
​
Central de Ajuda
​
Central de Ajuda
​
Central de Ajuda
​
Central de Ajuda
aqui
https://api.id.uat.unico.app
https://api.id.unico.app
Erros
​
Central de Ajuda
Especificação de parâmetros
webhook
​
Central de Ajuda
  {
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 5
  }
  {
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 5
  }
  {
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 5
  }
"processAdditionalInfo": {
      "transactionId": "2ed76ac5-8fd7-4477-839d-92bedd7e9fd5",
      "personName": "Nome da pessoa",
      "personDocument": "Número do documento da pessoa",
      "personImage": "URL assinada da imagem da pessoa",
      "finishedAt": "2024-10-04T18:53:17.028228"
  }
}
  • finished: Processo finalizado.

  • 2: Em divergência;

  • 3: Concluído;

  • 4: Cancelado;

  • 5: Erro.

  • processId: ID da transação;

  • state: Status da transação;

  • flow: Jornada da transação.

  • id: ID da transação;

  • status: Status da transação.

{
  "processId": "8263a268-5388-492a-bca2-28e1ff4a69f0",
  "state": "PROCESS_STATE_FINISHED",
  "flow": "id"
}
{
  "id": "8263a268-5388-492a-bca2-28e1ff4a69f0",
  "status": 3
}
/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
allprojects 
{
    repositories {
        google()
        maven { 
            url "https://maven-sdk.unico.run/sdk-mobile" 
        }
    }
}
gradle.properties
# Project-wide Gradle settings.
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
app/build.gradle
/* unico */
implementation 'io.unico:capture:$version'
android { 
    compileOptions { 
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8 
      } 
}
package <package_name>

import com.acesso.acessobio_android.onboarding.AcessoBioConfigDataSource;

public class UnicoConfig implements AcessoBioConfigDataSource {
    @Override
    public String getBundleIdentifier() {
        return BUNDLE_IDENTIFIER;
    }
        
    @Override
    public String getHostKey() {
        return SDK_KEY;
    }
}

import com.acesso.acessobio_android.onboarding.AcessoBioConfigDataSource

class UnicoConfig : AcessoBioConfigDataSource {
    override fun getBundleIdentifier(): String {
        return BUNDLE_IDENTIFIER
    }

    override fun getHostKey(): String {
        return SDK_KEY
    }
}
package <package_name>

import com.acesso.acessobio_android.onboarding.AcessoBioConfigDataSource;

public class UnicoConfig implements AcessoBioConfigDataSource {
    @Override
    public String getProjectNumber() {
        return PROJECT_NUMBER;
    }
    
    @Override
    public String getProjectId() {
        return PROJECT_ID;
    }
    
    @Override
    public String getMobileSdkAppId() {
        return MOBILE_SDK_APP_ID;
    }
    
    @Override
    public String getBundleIdentifier() {
        return BUNDLE_IDENTIFIER;
    }
    
    @Override
    public String getHostInfo() {
        return HOST_INFO;
    }
    
    @Override
    public String getHostKey() {
        return HOST_KEY;
    }
}
package <package_name>

import com.acesso.acessobio_android.onboarding.AcessoBioConfigDataSource

class UnicoConfig : AcessoBioConfigDataSource {
    override fun getProjectNumber(): String {
        return PROJECT_NUMBER
    }

    override fun getProjectId(): String {
        return PROJECT_ID
    }

    override fun getMobileSdkAppId(): String {
        return MOBILE_SDK_APP_ID
    }

    override fun getBundleIdentifier(): String {
        return BUNDLE_IDENTIFIER
    }

    override fun getHostInfo(): String {
        return HOST_INFO
    }

    override fun getHostKey(): String {
        return HOST_KEY
    }
}
LogoGuia de uso e integração | Unico IDCloud - DevCenter
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
aqui
https://api.id.uat.unico.app
https://api.id.unico.app
Erros
​
Central de Ajuda
aqui
https://api.id.uat.unico.app
https://api.id.unico.app
Erros
​
Central de Ajuda
Prova de vida
by Client
Saiba mais sobre nossa Política de Atualização da SDK aqui
by Client
​
Central de Ajuda
aqui
https://api.id.uat.unico.app
https://api.id.unico.app
Erros
​
Central de Ajuda
​
http://www.icao.int/Security/mrtd/Downloads/TechnicalReports/Annex_A-Photograph_Guidelines.pdf
​
Central de Ajuda
​
Central de Ajuda
​
​
​
Central de Ajuda
Guia de uso e integração
​
Central de Ajuda
​
Web
iOS
Android
Flutter
saiba mais sobre versionamento semântico aqui
Android
iOS
Flutter
Web
https://unicoidtech.gitbook.io/idcloud/integracao/sdk
​
Central de Ajuda
  • Plugins: Flutter

  • Linguagens: Java/Kotlin

  • Xcode: >= 15.0

  • Plugins: Flutter

  • Linguagens: swift/objective-c

  • iOS: >= 11

  • Gerenciador de dependência: Cocoapods ou Swift Package Manager

  • Frameworks: React JS, Angular, Next JS, Vue JS e JS Vanilla.

  • Versão Javascript: ECMAScript 5 ou superiores.

  • Possuir a versão do SDK Android na versão 21 ou superior;

  • Possuir o repositório Maven da Unico configurado.

Dispositivo

Versão do Android

Resultado do teste

Tipo do teste

ASUS - X01BDA

10.0.0

Físico

ASUS - Z01KD

8.0.1

Físico

HUAWEY - P30 Lite

9.0.0

Físico

LG - K22

10.0.0

Físico

LG - Q6

7.0.0

Físico

MOTOROLA - Moto one macro

10.0.0

Físico

MOTOROLA - Moto G4

6.0.1

Físico

MOTOROLA - Moto G5s Plus

8.1.0

Físico

MOTOROLA - Moto G6 Play

9.0.0

Físico

MOTOROLA - Moto G7 Play

10.0.0

Físico

MOTOROLA - Moto G7 Power

10.0.0

Físico

MOTOROLA - Moto G8 Power Lite

10.0.0

Físico

SAMSUNG - A01

10.0.0

Físico

SAMSUNG - J8 SM J810M

8.1.0

Físico

SAMSUNG - Galaxy A30s SM-A307GT

10.0.0

Físico

SAMSUNG - Galaxy A51

10.0.0

Físico

SAMSUNG - Galaxy A71

11.0.0

Físico

SAMSUNG - Galaxy S20+

11.0.0

Físico

SAMSUNG - s10e

11.0.0

Físico

XIAOMI - Mi 8 Lite

9.0.0

Físico

XIAOMI - Mi 8 Lite

10.0.0

Físico

XIAOMI - Poco X3

10.0.0

Físico

XIAOMI - Redmi Note 8

10.0.0

Físico

XIAOMI - Redmi Note 8 Pro

10.0.0

Físico

XIAOMI - Redmi Note 9

10.0.0

Físico

XIAOMI - Redmi Note 9 Pro

10.0.0

Físico

GOOGLE - Pixel sailfish

8.0.0

Virtual (TestLab)

HUAWEY - ALE L23

5.0.0

Virtual (TestLab)

HUAWEY - ANE LX1

9.0.0

Virtual (TestLab)

HUAWEY - ANE LX2

9.0.0

Virtual (TestLab)

HUAWEY - COR L29

8.1.0

Virtual (TestLab)

HUAWEY - MHA L29

7.0.0

Virtual (TestLab)

HUAWEY - NEO L29

9.0.0

Virtual (TestLab)

SAMSUNG - SC 02J

8.0.0

Virtual (TestLab)

SAMSUNG - SM G891A

9.0.0

Virtual (TestLab)

SAMSUNG - SM G930AZ

8.0.0

Virtual (TestLab)

SAMSUNG - SM G935A

8.0.0

Virtual (TestLab)

SAMSUNG - SM G965N

9.0.0

Virtual (TestLab)

SAMSUNG - SM G965U1

8.0.0

Virtual (TestLab)

SAMSUNG - SM G981U1

10.0.0

Virtual (TestLab)

SAMSUNG - SM J727V

8.1.0

Virtual (TestLab)

SAMSUNG - SM N950F

9.0.0

Virtual (TestLab)

SAMSUNG - SM N950N

9.0.0

Virtual (TestLab)

SAMSUNG - SM N950U

8.0.0

Virtual (TestLab)

SAMSUNG - SM N960F

9.0.0

Virtual (TestLab)

SAMSUNG - SM N960N

9.0.0

Virtual (TestLab)

SAMSUNG - SM N960U1

8.1.0

stLab)

Release notes

Nesta seção, você encontrará todas as atualizações do SDK Android


Mantenha seu SDK Android sempre atualizado com a última versão disponível.

Guia de atualização para versão 5.x.x

A atualização major que esta sendo implementada a partir da versão 5.x.x deveria ter sido realizada no lançamento da versão 4.4.0. Esta alteração está relacionada à ofuscação de código e exige ajustes nas regras do ProGuard e do DexGuard para clientes que utilizam a biblioteca da GuardSquare.


  • Atualização do SDK e server de Liveness com interação;

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas;


Atualização Crítica

  • Reforço na detecção e proteção contra ataques de injeção no dispositivo e servidor envolvendo inteligência artificial;

  • Reforços críticos na camada de RASP com aprimoramento na detecção de ameaças críticas, e medidas que eliminam a exploração contínua por fraudadores;

  • Melhorias na camada do motor de liveness contra ataques recorrentes no mercado;


  • Melhorias de acessibilidade;

  • Atualização do SDK e server de Liveness com interação;

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas;

  • Reforço na proteção RASP: detecção de ameaças agora resulta no encerramento imediato da aplicação, com melhorias nas verificações de injeção de vídeo no dispositivo e no servidor para mitigar riscos de IA generativa;


  • Ajustes de dependências internas garantindo a compatibilidade com a versão de kotlin 1.6.0;


  • Suporte a câmera traseira em fluxos de lojas físicas;

  • Atualização do SDK e server de Liveness com interação;

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


  • Atualização do SDK e server de Liveness com interação. Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação.

Nessa versão atualizamos o compileSdkVersion para a API 34, de acordo com as políticas do Google Play


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação;

  • Melhorias internas no produto, sem impacto externo.


Correção na câmera de documento, onde em alguns cenários ocorria um crash após a captura.


  • Atualização do SDK e server do Liveness com interação;

  • Melhorias internas no produto, sem impacto externo;


Versão 5.22.0 - 19/09/2024

  • Atualização do SDK e server do Liveness com interação;

  • Melhorias internas no produto, sem impacto externo.


  • Correção na resposta das requisições internas da sdk, onde em alguns casos quando não havia internet, o callback de erro não era devolvido e mantinha o usuário preso na tela.


  • Melhorias internas no produto, sem impacto externo.


Versão 5.20.0 - 20/08/2024

  • Melhorias internas no produto, sem impacto externo.


Versão 5.19.2 - 13/08/2024

  • Correção de localização setLocale() na captura com Liveness interativo.


  • Correção de erros internos que não afetam a experiência do usuário final.


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


  • Melhorias de segurança em nosso Liveness;

  • A partir de agora, os desenvolvedores serão notificados em tempo real durante o desenvolvimento se a versão utilizada não estiver em conformidade com as políticas de atualização da Unico. Em casos de dúvidas, contacte o seu CSM;

  • A partir de agora, é possível definir o ambiente da SDK pela própria API pública no método setEnvironment() . Em casos de dúvidas, contate o seu CSM.


Atualização Crítica

A partir dessa versão não damos mais suporte para versões anteriores ou iguais ao gradle 7.5

  • Atualização do SDK e server do Smartlive com interação.


  • Melhorias nos algoritmos de comunicação entre o clientside e serverside unico.


  • Correção do erro current host is not registred em ambiente de homologação.


  • Melhorias internas no produto, sem impacto externo.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


  • Melhorias e correções na inicialização da SDK, evitando a perda de 1.5% das sessões.


  • Atualização do SDK e server do Smartlive com interação.



  • Novas funcionalidades que melhoram a experiência de captura no Liveness Interativo.


  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


  • Correção no botão de fechar na captura de liveness interativo, em alguns cenários uma tela de loading pode aparecer por tempo indeterminado.


  • Correção no ciclo de vida da captura, em cenários onde a tela é encerrada antes do callback de sucesso ou erro.


  • Correção na geolocalização, em cenários onde a aplicação pode parar quando for desabilitada.


  • Correção na compatibilidade em estilos predefinidos, causando conflitos entre <attr ... />.


Atualização Crítica

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa;

  • Nova funcionalidade de captura para garantir segurança eficaz;

  • Atualização do SDK e server do Smartlive com interação;

  • Fix camera traseira no modelo Multilaser M8.


  • Habilitamos a customização da cor da barra de progresso através do método opcional setColorProgressBar();

  • Habilitamos a customização dos textos da UI do liveness interativo via configuração remota;

  • Habilitação a customização do logo abaixo do frame de captura do smartlive com interação.


  • Atualização do SDK e server do Smartlive com interação;

  • Melhoria interna no produto, sem impacto externo.


  • Melhorias nos registros de log do SDK;

  • Melhoria interna no produto, sem impacto externo.


  • Correção do problema relacionado a orquestração thread's de retorno ao cliente que impactava a captura biométrica quando fluxo de retentativa habilitado.


Essa versão visa proporcionar uma experiência mais estável e eficiente. Requer apenas atualização da SDK.

  • Disponibilizado código e descrição do erro retornado pelo callback onCameraFailed, facilitando seu monitoramento e mapeamento;

  • Definição automática de ambientes de produção e homologação no SDK;

  • Otimização no fluxo de gerar JWT melhorando a performance.


  • Melhoria no fluxo de autenticação, reduzindo falhas na autenticação de dispositivos com configurações específicas no Sistema Operacional. Essa modificação visa proporcionar uma experiência mais estável e eficiente. Importante destacar que essa melhoria requer apenas a atualização da SDK para que os benefícios sejam integralmente aplicados.


  • Atualização do SDK e server do Smartlive com interação.


  • Melhoria internas no produto, sem impacto externo.


  • Melhorias internas;

  • Ao receber uma config inválida o erro é retornado pelo callback onCameraFailed e não mais pelo exception do UnicoCheckException.

  • Hotfix: Câmera de Documento com Liveness habilitado;

  • Hotfix: Modo escuro não respeita as cores customizadas em alguns dispositivos Xiaomi.


  • Disponibilizar o novo fluxo de captura e retentativas quando usado o Liveness com Interação (entrar em contato com a único caso queira habilitar essa nova funcionalidade);

  • Lançar erro 73800 caso haja falha na captura usando o fluxo de retentativa;

  • Lançar erro 73100 caso haja falha de conexão com internet durante uma requisição;

  • Removido o timeout do fluxo de captura usando Livenes com Interação.


  • Hotfix: Corrigido callbacks internos como opcionais prevenindo possíveis erros relacionados a propriedades não inicializadas;

  • Hotfix: Reforçado a clareza das mensagens de erro para desenvolvedores, em especial quando há ausência da implementação da AcessoBioListener, tornando mais intuitivo o processo de correção;

  • Hotfix: Alterado as regras de ofuscação para garantir que a classe UnicoCheckException não seja ofuscada e os erros sejam exibidos corretamente no console e nos logs;

  • Hotfix: Otimizado a inicialização do objeto bioConfig evitando erros internos.


  • Hotfix: Corrigido um problema na configuração do SDK através do arquivo JSON.


  • Hotfix: Corrigido erro de caractere afetando build;

  • Hotfix: Modo baixa luminosidade não altera a cor dos textos.


  • Hotfix: Aplicação não respondendo, ARN;

  • Hotfix: Modo alta luminosidade não altera a cor dos texto;

  • Hotfix: Erro internal exception.


  • Atualização do SDK client e server do Smartlive com interação.


  • Melhoria de segurança na comunicação da SDK.


  • Hotfix: Timeout na câmera traseira.


  • Atualização do SDK client e server do Smartlive com interação;

  • Atualização das mensagens do Smartlive com interação;

  • Atualização da biblioteca de CameraX

  • Adicionado timeout na câmera de liveness com interação;

  • Hotfix: Câmera de documento.


  • Hotfix: compatibilidade com Android 8.0.


  • Melhoria de compatibilidade com a ferramenta de ofuscação;

  • Melhoria de segurança na comunicação da SDK;

  • Nova URL do repositório para download do SDK;

  • Alteração do nome do SDK de com.github.acesso-io:acessobio-android para io.unico:capture;

  • Suporte para o Kotlin a partir da versão 1.5.


  • Atualização do SDK client e server do Smartlive com interação.


  • Hotfix: Suporte ao tema dark.


  • Hotfix: Compatibilidade ofuscação.


  • Hotfix: Geolocalização em casos de endereço nulo;

  • Hotfix: Tempo de expiração da câmera de documentos;

  • Hotfix: Implementação de projeto com sentry.


  • Hotfix: Abertura de camera traseira;

  • Atualização da versão do modo de câmera de selfie com prova de vida da FaceTec.


  • Feat: segurança no changelog;

  • Feat: Atualização da SDK e server do Smartlive com interação.

  • Fix: Suporte a uso do modo de câmera com captura automática em tablets;

  • Fix: Conflito com sentry.


  • Atualização da SDK e server do Smartlive com interação;

  • Coleta de dados de uso, geolocalização e dispositivo (Os dados coletados são usados para garantir a segurança do processo e melhorar a experiência do usuário);

  • Correção do bug para abrir a câmera em dispositivos com Android 6.0.1.


  • Hotfix: Prefixo da url.


  • Hotfix: Contorno da silhueta na cor branca.


  • Uma nova camada de segurança;

  • Atualização da versão do modo de câmera de selfie com prova de vida da FaceTec.


  • Hotfix: Melhoria da lentidão na main thread;

  • Hotfix: Tratamento dos retornos de erro onBackPressed, bitmap e no available camera.


  • Novo incremento de segurança;

  • Ajuste na resolução das imagens;

  • Hotfix: Ajuste no uso de captura de documentos usando uma APIKey com Smartlive ativo habilitado;

  • Hotfix: Ajustes na configuração de timeout da câmera de documentos.


  • Hotfix: Ajuste no frame de captura de documentos genéricos;

  • Hotfix: Correção de nomenclaturas que causavam conflito de themes;

  • Hotfix: Melhoria na coleta de logs de erro.


  • Indicador de atividade agora possui mesma cor que a mensagem na customização;

  • Possibilidade de executar os métodos prepareSelfieCamera e prepareDocumentCamera sem o arquivo json, utilizando uma interface do tipo AcessoBioConfigDataSource.


  • Hotfix: ajuste no lifecycle do frame de captura com interação.


  • Melhoria da resolução da imagem gerada pelo modo de câmera de selfie com prova de vida da FaceTec para celulares de qualidade média/alta;

  • Atualização do google play services ML Kit face detection para a versão 17.0.1.


  • Atualização da versão do modo de câmera de selfie com prova de vida da FaceTec;

  • Remoção de pedidos de permissões que não estavam sendo usados.


  • Ajuste no tema padrão para o modo de baixa luminosidade modo de câmera de selfie com prova de vida da FaceTec.


  • Customização do botão de fechar camera;

  • Correções de erros na customização de sucesso.


  • Ajuste para otimizar performance;

  • Ajuste no seletor de câmera para dispositivos com múltiplas câmeras.


  • Ajuste nas configurações que geram o objeto encriptado unico;

  • Correções em configuração de Temas;

  • Resolução de conflitos com bugfender.


  • Downgrade do Kotlin para 1.4.0;

  • Ajuste ao abrir a câmera pela segunda vez.


  • Correção no encrypted.


  • Ajuste de dependencias para tornar as bibliotecas do SDK Android compativeis com minCompileSdk 30.


  • Adicionada compatibilidade com java 8;

  • Adicionado frames de captura de CNH frente e CNH verso.


  • Correção de erro no jitpack.


  • Update da biblioteca GSON para versão 2.8.9;

  • Ajuste no módulo de abertura de câmera.


  • Foi corrigido o bug no módulo de abertura da câmera de documentos.


  • Foi corrigido o bug que deixa o debug lento ao utilizar o SDK Android.


  • Foi corrigido o bug referente a: request prepare camera.


  • A partir de agora, o SDK Android conta com a funcionalidade de Prova de Vida. Para atualizar essa nova versão do SDK, solicite junto ao seu gestor de contas a documentação correspondente a nova implementação e ativação da funcionalidade para sua operação;

  • O SDK Android está ainda mais seguro.


  • A partir dessa versão é necessário adicionar no projeto o arquivo: unico-check-mobile-services.json. Procure o customer success ou o gestor de contas para ter acesso ao Portal do Cliente e seguir o passo a passo necessário;

  • Foi disponibilizado mais um frame de captura em documentos: CPF.

  • Não é permitido o uso da câmera em emuladores.


  • Ajuste na captura do log de erro.


  • Correção de espelhamento de imagem ao utilizar a câmera do tipo "Documento".


  • Mudança na estrutura de classes.


  • Mudança na estrutura de classes.


  • Refatoração de funções públicas, permitindo o retorno assync dentro da própria função;

  • Refatoração nos métodos disableAutoCapture e disableSmartFrame;

  • Correção de bug de enquadramento de face;

  • Correção de bug de travamento de tela após a captura.


  • Troca do motor de tracking biométrico, foi migrado do FirebaseMLVision para FaceDetectorMLKit;

  • Foi atualizada a API padrão de abertura de câmera, migramos da API de Camera2 para API de CameraX;

  • Foram obtidos ganhos significativos na gerência de ciclo de vida, memória, processamento e aumentando a compatibilidade de dispositivos que são suportados;

  • Foi removida a necessidade da implementação do Firebase para o uso das tecnologias do SDK Android, diminuindo consideravelmente a fricção na integração e evitando conflitos que anteriormente ocorriam;

  • Foram removidos todos os métodos de processos REST da API pública, garbages code e realizamos outras melhorias.


  • A SDK está mais segura com novos métodos de criptografia em real-time;

  • A SDK está mais rápida e precisa na detecção de faces com melhorias dos modelos de IA para o câmera inteligente;

  • Agora é possível configurar o tempo máximo de sessão do seu usuário;

  • Agora é possível configurar o tempo máximo de captura ao utilizar a detecção da face (smart câmera). Caso o usuário encontre alguma dificuldade para capturar a foto através da detecção de face e ultrapasse o tempo determinado em seu processo, a captura será alterada automaticamente para a manual, visando facilitar a ação para o usuário.

  • Depreciamos todos os métodos referentes a requisições REST, que outrora permitiam a criação de processos dentro da v3 do unico-onboarding diretamente da SDK.


  • Nesta versão trazemos grande otimização no tamanho da SDK, diminuindo em 75% do tamanho anterior;

  • Foram incluidas melhorias de performance.


  • A SDK está 42% mais leve com a remoção de várias intra-dependências e remoções de garbage-code;

  • A SDK está mais segura com novos métodos de criptografia em real-time;

  • A SDK está mais rápida com os novos modelos de IA para o câmera inteligente;

  • Foram removidos todos os métodos que permitiam acesso ao Liveness com interação.


  • Foi removido o método de validação REST no fluxo básico de captura de documentos.


  • Atualização do Firebase ML-Vision 19.0.3 para 24.1.0;

  • Atualização do Google Services 4.3.3 para 4.3.5.


  • Agora é possível customizar todos os elementos visuais utilizando também cores no formato hexadecimal. Lembrando que os formatos padrões dos SO's continuam ativos, como UIColor para iOS e Colors para Android;

  • Foi adicionado um novo método de retorno para notificar a sua classe implementadora no momento em que o usuário fechar a câmera manualmente;

  • Foi corrigido o retorno do método de FaceMatch, devolvendo o objeto completo com base64 da selfie, base64 do documento e o status de FaceMatch.


  • Agora é possível customizar todos os elementos visuais utilizando também cores no formato hexadecimal. Lembrando que os formatos padrões dos SO's continuam ativos, como UIColor para iOS e Colors para Android;

  • Foi adicionado um novo método de retorno para notificar a sua classe implementadora no momento em que o usuário fechar a câmera manualmente;

  • Foi corrigido o retorno do método de FaceMatch, devolvendo o objeto completo com base64 da selfie, base64 do documento e o status de FaceMatch;

  • Outras limpezas.


  • Foi adicionado um novo método de callback (retorno) para notificar a sua classe implementadora no momento em que o usuário fechar a câmera manualmente;

  • Foi corrigido o callback do método de FaceMatch, devolvendo o objeto completo com base64 da selfie, base64 do documento e o status de facematch;

  • Outras limpezas.


  • Novas validações prévias, facilitando a visibilidade de qualquer tipo de anormalidade quanto ao setup previamente a abertura de câmera em si;

  • Pequenas melhorias e limpeza em toda solução.


  • Pequenas correções de bugs e melhorias no fluxo de permissões.


  • Posibilidade de customizar a imagem do ícone de popup de reset de sessão dentro do fluxo do Liveness com interação;

  • Foi removida a obrigatoriedade da tag allowBackups em AndroidManifest.


  • Possibilidade de personalizar todos os elementos visuais utilizando cores em formato hexadecimal. Os formatos padrão permanecem ativos;

  • Foi adicionado um novo método de callback para notificar sua classe implementadora no momento em que o usuário fecha manualmente a câmera;

  • Foram corrigidos pequenos bugs no fluxo do Liveness com interação;

  • Corrigido o retorno do método FaceMatch, retornando o objeto completo com base64 da selfie, base64 do documento e o status do FaceMatch.


Guia de instalação

Nesta seção, você encontrará todas as informações necessárias para instalação do SDK da plataforma Unico IDCloud em seus aplicativos iOS


Pré-requisitos do ambiente de desenvolvimento


É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

  • Possuir a versão do SDK iOS na versão 12 ou superior;

  • Possuir o gerenciador de dependências Cocoapods ou Swift Package Manager já configurado.

Instalando o SDK iOS


Para implementar o SDK iOS da plataforma Unico IDCloud ao seu aplicativo iOS, siga o passo a passo listado abaixo:

1

Utilizando CocoaPods

Inclua o unicocheck-ios em seu Podfile:

podfile
pod ‘unicocheck-ios’

Em seguida, basta utilizar o comando em seu terminal para instalar as dependências:

pod install

Se estiver executando o projeto em .xcodeproj é necessário abrir o projeto em .xcworkspace

2

Utilizando o Swift Package Manager (SPM)

O Swift Package Manager é um gerenciador de dependências para projetos Swift. Ele é integrado ao sistema de compilação Swift para automatizar o processo de download, compilação e vinculação de dependências. Para integrar o SDK iOS em seu projeto usando o SPM, siga as orientações abaixo:

Inclua a dependência em seu arquivo Package.swift:

Package.swift
<uses-dependencies: [
    .package(url: "https://github.com/acesso-io/unico-check-ios.git", .upToNextMajor(from: "2.12.0"))
]

3

Permissões para utilização da Câmera

Para utilizar o método de abertura de câmera em seu projeto é necessário adicionar as permissões antes de compilar a sua aplicação:

Info.plist
<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>

4

Obtendo as credenciais

  • Entre em contato com o CSs e/ou time de Onboarding.

  • Solicite a SDK Key informando os identificadores de suas aplicações. Bundle Identifier para iOS, PackageID para Android e Host para WEB.

  • Os identificadores de suas aplicações serão vinculados a SDK Key pela equipe da Unico.

  • Você recebe a sua SDK Key para implementar o AcessoBioConfigDataSource.

5

Embarcando as credenciais em seu projeto

  • Implemente o protocolo AcessoBioConfigDataSource em sua classe:

.h:
#import <AcessoBio/AcessoBioManager.h>
#import <AcessoBio/AcessoBio-Swift.h>

@interface YourUnicoConfigClass: AcessoBioConfigDataSource {}
@end

.m:
@implementation YourUnicoConfigClass

- (NSString * _Nonnull)getBundleIdentifier {
    return @"<YOUR_MOBILE_BUNDLE_IDENTIFIER>";
}

- (NSString * _Nonnull)getHostKey {
    return @"<YOUR_SDK_KEY>";
}

@end
import AcessoBio

class YourUnicoConfigClass: AcessoBioConfigDataSource {
          
    func getBundleIdentifier() -> String {
        return "<YOUR_MOBILE_BUNDLE_IDENTIFIER>"
    }
        
    func getHostKey() -> String {
        return "<YOUR_SDK_KEY>"
    }
}
Método depreciado - Objective-C
.h:
#import <AcessoBio/AcessoBioManager.h>
#import <AcessoBio/AcessoBio-Swift.h>

@interface YourUnicoConfigClass: AcessoBioConfigDataSource {}
@end

.m:
@implementation YourUnicoConfigClass

- (NSString * _Nonnull)getBundleIdentifier {
    return @"<YOUR_MOBILE_BUNDLE_IDENTIFIER>";
}

- (NSString * _Nonnull)getHostInfo {
    return @"<YOUR_HOST_INFO>";
}

- (NSString * _Nonnull)getHostKey {
    return @"<YOUR_HOST_KEY>";
}

- (NSString * _Nonnull)getMobileSdkAppId {
    return @"<YOUR_MOBILE_SDK_APP_ID>";
}

- (NSString * _Nonnull)getProjectId {
    return @"<YOUR_PROJECT_ID>";
}

- (NSString * _Nonnull)getProjectNumber {
    return @"<YOUR_PROJECT_NUMBER>";
}

@end
Método depreciado - Swift
import AcessoBio

class YourUnicoConfigClass: AcessoBioConfigDataSource {
        
    func getProjectNumber() -> String {
        return "<YOUR_PROJECT_NUMBER>"
    }
    
    func getProjectId() -> String {
        return "<YOUR_PROJECT_ID>"
    }
    
    func getMobileSdkAppId() -> String {
        return "<YOUR_MOBILE_SDK_APP_ID>"
    }
    
    func getBundleIdentifier() -> String {
        eturn "<YOUR_MOBILE_BUNDLE_IDENTIFIER>"
    }
    
    func getHostInfo() -> String {
        return "<YOUR_HOST_INFO>"
    }
    
    func getHostKey() -> String {
        return "<YOUR_HOST_KEY>"
    }
}


Solução de problemas

Nesta seção, você encontrará a solução de alguns problemas comuns na integração do SDK da plataforma Unico IDCloud em seus aplicativos Android


Ofuscação de código


O material de ofuscação tem por motivação servir de auxilio para o desenvolvedor passar pelos problemas de ofuscação em seu aplicativo.

O ofuscador do cliente pode afetar o funcionamento do SDK, é necessário que o mesmo não ofusque o código do SDK.

A Unico se isenta da responsabilidade em relação à conflitos de ofuscação com a SDK.

O ofuscamento é um processo de transformar o bytecode em uma forma menos legível por humanos, dificultando assim a engenharia reversa.

Esse processo consiste em remover informações relacionadas a depuração como tabelas de variáveis, número de linhas e renomear os pacotes, classes e métodos.

Ao embarcar a SDK Adroid na aplicação podem ocorrer falhas.

Ofuscação via DexGuard


Quando o ofuscamento foi realizado via DexGuard, ao ocorrer a falha utilize as regras:

-keep class kotlin.coroutines.**
-keep class kotlinx.coroutines.**

-keep class com.facetec.sdk.** { *; }
-keep class com.acesso.acessobio_android.** { *; }
-keep class io.unico.** { *; }

-keep class br.com.makrosystems.haven.** { *; }
-keep class HavenSDK.**{ *; }
-keep class HavenSDK** { *; }

Ofuscação via ProGuard


Quando o ofuscamento foi realizado via ProGuard, ao ocorrer a falha utilize as regras:

-keep class kotlin.coroutines.**
-keep class kotlinx.coroutines.**

-keep class com.facetec.sdk.** { *; }
-keep class com.acesso.acessobio_android.** { *; }
-keep class io.unico.** { *; }

-keep class br.com.makrosystems.haven.** { *; }
-keep class HavenSDK.**{ *; }
-keep class HavenSDK** { *; }

Atualização do SDK - versão 4.3.x


Altere o repositório Maven:


Altere o repositório Maven para o novo repositório no arquivo build.gradle do projeto.

A implementação era feita da seguinte forma:

build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io'}
    }
}

Agora deve ser atualizado para o novo repositório:

build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
allprojects {
    repositories {
        google()
        jcenter()
        maven { 
            url "https://maven-sdk.unico.run/sdk-mobile" 
        }
    }
}

Alterar a dependência do SDK


Altere a dependência do SDK para a nova dependência no arquivo app/build.gradle do projeto.

A implementação era feita da seguinte forma:

app/build.gradle
/* unico */
dependencies {
    implementation 'com.github.acesso-io:acessobio-android:$version'
}

Agora deve ser atualizado para a nova dependência:

app/build.gradle
/* unico */
dependencies {
    implementation "io.unico:capture:$version"
}

Guia de tratamento de erros

Nesta seção, você encontrará todas as informações necessárias para o tratamento dos erros do SDK da plataforma Unico IDCloud em seus aplicativos Android



Este objeto é retornado sempre que ocorre um erro no SDK Android.

Métodos disponíveis


Nome do método
Descrição

getCode()

Método utilizado para obter o código de erro ocorrido

getDescription()

Método utilizado para obter a descrição de erro ocorrido

É disponibilizado a seguir a lista de possíveis códigos de erro do SDK Android:

Código
Descrição

73001

Context invalid

73002

Did not grant permission to open camera

73003

The lest API is 21(LOLLIPOP)

73004

Could not find implementation interface callback iAcessoBioSelfie

73005

Could not find implementation interface callback iAcessoBioDocument

73006

Unable to open camera on emulators

73100

Unable to connect to internet

73200

Please inform the json file name

73202

Unable to parse json file

73300

Unable to get unico authentication object

73301

Unable to parse object

73302

Could not find the unico token

73303

Current host is not registered

73400

Could not initialize camera

73500

Unable to get session token, service response error

73501

Unable to parce object

73502

Could not get session token

73701

Could not find active liveness import

73702

Unable to initialize active liveness in production mode

73703

Unable to get active liveness session

73704

The user pressed the cancel button and did not complete the Session.

73705

The Session was not performed successfully and a FaceScan was not generated. In general, other statuses will be sent to the

73706

The camera access is prevented because either the user has explicitly denied permission or the user's device is configured to

73707

The Session was cancelled due to the app being terminated, put to sleep, an OS notification, or the app was placed in the

73708

The Session was cancelled because device is in landscape mode. The user experience of devices in these orientations is poor

73709

The Session was cancelled because device is in reverse portrait mode. The user experience of devices in these orientations is

73710

The Session was cancelled because the user was unable to complete a Session in the default allotted time or the timeout set

73712

The Session was cancelled due to memory pressure.

73712

The Session was cancelled because your App is not in production and requires a network connection.

73713

The Session was cancelled because your key needs to be validated again.

73714

The Session was cancelled because the developer-configured encryption key was not valid.

73715

The Session was cancelled because not all guidance images were configured.

73716

The Session was cancelled because SDK was unable to start the camera on this device.

73717

The Session was cancelled because the user was in a locked out state.

73718

The Session was cancelled because of an unknown and unexpected error. SDK leverages a variety of iOS APIs including camera,

73719

The Session cancelled because user pressed the Get Ready screen subtext message. Note: This functionality is not available by

73800

Could not build encrypted key


Personalização Android

Nesta seção, você encontrará todas as informações necessárias para a customização do SDK da plataforma Unico IDCloud em seus aplicativos Android


O SDK Android permite que algumas personalizações sejam feitas. Abaixo veja todas as personalizações possíveis para este SDK.

Personalizar idioma


É possível configurar a experiência das mensagens informativas dos frames de captura alterando seu idioma. Utilize o enumerado LocaleTypes que contém os seguintes valores:

  • LocaleTypes.PT_BR: para Português(Brasil);

  • LocaleTypes.ES_MX: para Espanhol(México);

  • LocaleTypes.ES_ES: para Espanhol(Espanha);

  • LocaleTypes.EN_US: para Inglês(EUA).

Veja como implementar no exemplo abaixo:

unicoCheck.setLocale(LocaleTypes.EN_US);
unicoCheck.setLocale(LocaleTypes.EN_US);
  • Pode ser necessário uma ativação remota para ser utilizado, caso deseje usar, sinalize seu gerente de projetos ou o suporte da Unico.

  • Caso não seja configurado, por padrão o SDK utiliza o Português como idioma principal.

Personalizar experiência do processo de captura


Personalizar experiência de captura da Selfie


Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

É possível customizar alguns objetos do frame de acordo com o modo de câmera utilizado, através do método setTheme().

Os tipos suportados para representação de cor são Color Resource ou String contendo o código hexadecimal da cor. Ex: R.color.red ou #FF0000.

Todos os métodos estão disponíveis abaixo:

IAcessoBioTheme unicoTheme = new IAcessoBioTheme() {
    @Override
    public Object getColorBackground() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorBoxMessage() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorTextMessage() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorBackgroundPopupError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorTextPopupError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorBackgroundButtonPopupError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorTextButtonPopupError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorBackgroundTakePictureButton() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorIconTakePictureButton() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorBackgroundBottomDocument() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorTextBottomDocument() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorSilhouetteSuccess() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorSilhouetteError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorProgressBar() { 
        return R.color.your_color;
    }
};
    
acessoBioBuilder.setTheme(unicoTheme); 
val unicoTheme = object: IAcessoBioTheme {

    override fun getColorBackground() = R.color.your_color
    override fun getColorBoxMessage() = R.color.your_color
    override fun getColorTextMessage() = R.color.your_color
    override fun getColorBackgroundPopupError() = R.color.your_color
    override fun getColorTextPopupError() = R.color.your_color
    override fun getColorBackgroundButtonPopupError() = R.color.your_color
    override fun getColorTextButtonPopupError() = R.color.your_color
    override fun getColorBackgroundTakePictureButton() = R.color.your_color
    override fun getColorIconTakePictureButton() = R.color.your_color
    override fun getColorBackgroundBottomDocument() = R.color.your_color
    override fun getColorTextBottomDocument() = R.color.your_color
    override fun getColorSilhouetteSuccess() = R.color.your_color
    override fun getColorSilhouetteError() = R.color.your_color 
    override fun getColorSilhouetteNeutral() = R.color.your_color
    override fun getColorProgressBar() = R.color.your_color
}

acessoBioBuilder.setTheme(unicoTheme)

Também é possível realizar personalizações de forma estática, no seu arquivo colors.xml adicione o seguinte código:

<color name="unico_color_background"> #YourColor </color> 
<color name="unico_color_silhouette_success"> #YourColor </color> 
<color name="unico_color_silhouette_error"> #YourColor </color> 
<color name="unico_color_silhouette_neutral"> #YourColor </color> 
<color name="unico_color_box_message"> #YourColor </color> 
<color name="unico_color_text_message"> #YourColor </color> 
<color name="unico_color_background_popup_error"> #YourColor </color> 
<color name="unico_color_text_popup_error"> #YourColor </color> 
<color name="unico_color_background_button_popup_error"> #YourColor </color> 
<color name="unico_color_text_button_popup_error"> #YourColor </color> 
<color name="unico_color_background_take_picture_button"> #YourColor </color> 
<color name="unico_color_icon_take_picture_button"> #YourColor </color> 
<color name="unico_color_background_bottom_document"> #YourColor </color> 
<color name="unico_color_text_bottom_document"> #YourColor </color> 
<color name="unico_color_button_cancel"> #YourColor </color> 
<color name="unico_color_progress_bar_capture"> #YourColor </color> 

Abaixo, confira a especificação de campos da personalização:

Personalizar experiência de captura do documento


Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a

Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

É possível customizar alguns objetos do frame de acordo com o modo de câmera utilizado, através do método setTheme().

Os tipos suportados para representação de cor são Color Resource ou String contendo o código hexadecimal da cor. Ex: R.color.red ou #FF0000.

Todos os métodos estão disponíveis abaixo:

IAcessoBioTheme unicoTheme = new IAcessoBioTheme() {
    @Override
    public Object getColorBackground() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorBoxMessage() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorTextMessage() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorBackgroundPopupError() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorTextPopupError() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorBackgroundButtonPopupError() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorTextButtonPopupError() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorBackgroundTakePictureButton() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorIconTakePictureButton() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorBackgroundBottomDocument() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorTextBottomDocument() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorSilhouetteSuccess() { 
        return R.color.your_color;
    }
    @Override
    public Object getColorSilhouetteError() { 
        return R.color.your_color;
    }

    @Override
    public Object getColorProgressBar() { 
        return R.color.your_color;
    }
};
    
acessoBioBuilder.setTheme(unicoTheme); 
val unicoTheme = object: IAcessoBioTheme {
    override fun getColorBackground() = R.color.your_color
    override fun getColorBoxMessage() = R.color.your_color
    override fun getColorTextMessage() = R.color.your_color
    override fun getColorBackgroundPopupError() = R.color.your_color
    override fun getColorTextPopupError() = R.color.your_color
    override fun getColorBackgroundButtonPopupError() = R.color.your_color
    override fun getColorTextButtonPopupError() = R.color.your_color
    override fun getColorBackgroundTakePictureButton() = R.color.your_color
    override fun getColorIconTakePictureButton() = R.color.your_color
    override fun getColorBackgroundBottomDocument() = R.color.your_color
    override fun getColorTextBottomDocument() = R.color.your_color
    override fun getColorSilhouetteSuccess() = R.color.your_color
    override fun getColorSilhouetteError() = R.color.your_color
    override fun getColorSilhouetteNeutral() = R.color.your_color
    override fun getColorProgressBar() = R.color.your_color
}
acessoBioBuilder.setTheme(unicoTheme)

Também é possível realizar personalizações de forma estática, no seu arquivo colors.xml adicione o seguinte código:

<color name="unico_color_background"> #YourColor </color> 
<color name="unico_color_silhouette_success"> #YourColor </color> 
<color name="unico_color_silhouette_error"> #YourColor </color> 
<color name="unico_color_silhouette_neutral"> #YourColor </color> 
<color name="unico_color_box_message"> #YourColor </color> 
<color name="unico_color_text_message"> #YourColor </color> 
<color name="unico_color_background_popup_error"> #YourColor 
<color name="unico_color_text_popup_error"> #YourColor </color> 
<color name="unico_color_background_button_popup_error"> #YourColor 
<color name="unico_color_text_button_popup_error"> #YourColor </color> 
<color name="unico_color_background_take_picture_button"> #YourColor </color> 
<color name="unico_color_icon_take_picture_button"> #YourColor </color> 
<color name="unico_color_background_bottom_document"> #YourColor </color> 
<color name="unico_color_text_bottom_document"> #YourColor </color> 
<color name="unico_color_button_cancel"> #YourColor </color> 
<color name="unico_color_progress_bar_capture"> #YourColor </color> 

Abaixo, confira a especificação de campos da personalização:


Captura de documento

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Android para a captura do documento


Frames de documentos disponíveis


Neste modo de câmera, existe um frame de captura para auxiliar o usuário a posicionar o documento corretamente. Após posicionar o documento corretamente, o usuário deve clicar no botão para realizar a captura da foto do documento.

A SDK não realiza nenhum tipo de validação do que está sendo capturado.

Neste modo de câmera é possivel capturar os documentos:

  • CPF: Captura da frente do CPF;

  • CNH: Captura da CNH aberta;

  • CNH frente: Captura da frente da CNH;

  • CNH verso: Captura do verso da CNH;

  • RG frente: Captura da frente do RG;

  • RG verso: Captura do verso do RG;

  • Outros: Captura de qualquer outro documento.

Inicializar o SDK


Crie uma instância do builder (Gerado através da interface IAcessoBioBuilder), fornecendo como parâmetro o contexto em questão e a implementação da classe AcessoBioListener.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é instanciar o builder informando o contexto em questão e sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação:

public class MainActivity extends AppCompatActivity {

    private AcessoBioListener callback = new AcessoBioListener() {
        @Override
        public void onErrorAcessoBio(ErrorBio errorBio) { }

        @Override
        public void onUserClosedCameraManually() { }

        @Override
        public void onSystemClosedCameraTimeoutSession() { }

        @Override
        public void onSystemChangedTypeCameraTimeoutFaceInference() { }
    };

    private IAcessoBioBuilder acessoBioBuilder = new AcessoBio(this, callback);
}
internal class MainActivity : AppCompatActivity() {

    private val callback = object : AcessoBioListener {
        override fun onErrorAcessoBio(errorBio: ErrorBio?) { }
    
        override fun onUserClosedCameraManually() { }
    
        override fun onSystemClosedCameraTimeoutSession() { }
    
        override fun onSystemChangedTypeCameraTimeoutFaceInference() { }
    }

    private val acessoBioBuilder: IAcessoBioBuilder = AcessoBio(this, callback)
}

Implementar as funções de callback


Note que, o trabalho de implementação da classe AcessoBioListener é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação:

1

onErrorAcessoBio(ErrorBio errorBio)

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Implementar listeners para eventos da câmera


A implementação destes métodos listeners deve ser feita através de uma instância da classe iAcessoBioSelfie.

O método de abertura da câmera, que é chamado na próxima etapa, precisa saber o que fazer ao conseguir capturar uma imagem com sucesso ou ao ocorrer algum erro no processo. É necessário informar "o que fazer" ao método de abertura da câmera através da implantação de listeners que são chamados em situações de sucesso ou erro.

Através da configuração dos listeners, você pode especificar o que acontece em seu App em situações de erro (Método onErrorDocument) ou sucesso (Método onSuccessDocument) na captura de imagens.

O exemplo abaixo ilustra a configuração dos listeners, build e abertura da câmera:

iAcessoBioDocument cameraListener = new iAcessoBioDocument() {
    @Override
    public void onSuccessDocument(ResultCamera result) { }

    @Override
    public void onErrorDocument(ErrorBio errorBio) { }
};

unicoCheckCamera.prepareDocumentCamera(unicoConfig, new DocumentCameraListener() {
    @Override
    public void onCameraReady(UnicoCheckCameraOpener.Document cameraOpener) {
        cameraOpener.open(DocumentType.CNH, cameraListener);
    }

    @Override
    public void onCameraFailed(String message) {
        Log.e(TAG, message);
    }
});
val cameraListener: iAcessoBioDocument = object : iAcessoBioDocument {
    override fun onSuccessDocument(result: ResultCamera?) {}

    override fun onErrorDocument(errorBio: ErrorBio?) {}
}

unicoCheckCamera.prepareDocumentCamera(unicoConfig, object : DocumentCameraListener {
    override fun onCameraReady(cameraOpener: UnicoCheckCameraOpener.Document?) {
        cameraOpener?.open(DocumentType.CNH, cameraListener)
    }

    override fun onCameraFailed(message: String?) {
        Log.e(TAG, message)
    }
})

Preparar e abrir câmera


É necessário criar uma instância do builder através do método build(). Este método é disponibilizado através do objeto gerado com a interface IAcessoBioBuilder e classe AcessoBio:

UnicoCheckCamera unicoCheckCamera = acessoBioBuilder.build();  
val unicoCheckCamera = acessoBioBuilder.build()

O próximo passo é preparar a câmera utilizando o método prepareDocumentCamera() com o objeto retornado pelo builder (Nomeado como UnicoCheckCamera no exemplo acima).

O método prepareDocumentCamera() gera um objeto do tipo UnicoCheckCameraOpener.Document, que é utilizado para abrir a câmera com seu método open(), recebendo os parâmetros tipo de documento a ser capturado, sendo eles:

Parâmetro
Descrição

DocumentCameraType.CPF

Frame para captura da frente do CPF

DocumentCameraType.CNH

Frame para captura da CNH aberta

DocumentCameraType.CNH_FRENTE

Frame para captura da frente da CNH

DocumentCameraType.CNH_VERSO

Frame para captura do verso da CNH

DocumentCameraType.RG_FRENTE

Frame para captura da frente do RG

DocumentCameraType.RG_VERSO

Frame para captura do verso do RG

DocumentCameraType.None

Frame para captura de qualquer outro documento

Caso precise capturar um documento que não possuímos um frame específico (ex: RNE, entre outros), utilize o frame DocumentCameraType.None, que irá te possibilitar um frame genérico, retangular, que pode ser utilizado para orientar qualquer captura.

Método onSucessDocument


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST:

public void onSuccessDocument(ResultCamera result) { }

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

Método onErrorDocument


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo ErrorBio:

public void onErrorDocument(ErrorBio errorBio) { }

Realize um requisição POST na API REST do by Client



Captura de Selfie

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Android para a captura da selfie


Inicializar o SDK


Crie uma instância do builder (Gerado através da interface IAcessoBioBuilder), fornecendo como parâmetro o contexto e ambiente em questão e a implementação da classe AcessoBioListener.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é instanciar o builder informando o contexto em questão e sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação:

public class MainActivity extends AppCompatActivity {

    private AcessoBioListener callback = new AcessoBioListener() {
        @Override
        public void onErrorAcessoBio(ErrorBio errorBio) { }

        @Override
        public void onUserClosedCameraManually() { }

        @Override
        public void onSystemClosedCameraTimeoutSession() { }

        @Override
        public void onSystemChangedTypeCameraTimeoutFaceInference() { }
    };

    private IAcessoBioBuilder acessoBioBuilder = new AcessoBio(this, callback);
}
internal class MainActivity : AppCompatActivity() {

    private val callback = object : AcessoBioListener {
        override fun onErrorAcessoBio(errorBio: ErrorBio?) { }
    
        override fun onUserClosedCameraManually() { }
    
        override fun onSystemClosedCameraTimeoutSession() { }
    
        override fun onSystemChangedTypeCameraTimeoutFaceInference() { }
    }

    private val acessoBioBuilder: IAcessoBioBuilder = AcessoBio(this, callback)
}

Configuração de ambientes


Configure o ambiente que será utilizado na execução da SDK. Utilize o enumerado Environment que contém os seguintes enumerados:

  • Environment.PROD: para ambiente de Produção;

  • Environment.UAT: para ambiente de Homologação.

Veja como implementar no exemplo abaixo:

acessoBioBuilder.setEnvironment(Environment.UAT);
acessoBioBuilder.setEnvironment(Environment.UAT);

Implementar as funções de callback


Note que, o trabalho de implementação da classe AcessoBioListener é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação.

Este método é invocado sempre que qualquer erro de implementação ocorrer ao utilizar algum de nossos métodos:

1

onErrorAcessoBio(ErrorBio errorBio)

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Configurar modo de câmera


O SDK tem configurado e habilitado por padrão o enquadramento inteligente e a captura automática. Em função disso, deve-se configurar o modo de câmera no seu builder da seguinte forma:

UnicoCheckCamera unicoCheckCamera = acessoBioBuilder
    .setAutoCapture(true)
    .setSmartFrame(true)
    .build();
val unicoCheckCamera: UnicoCheckCamera = acessoBioBuilder
    .setAutoCapture(true)
    .setSmartFrame(true)
    .build()

Os valores false/true dos métodos acima não alteram a experiência de captura, servem apenas para a lógica interna do funcionamento do SDK.

Implementar listeners para eventos da câmera


A implementação destes métodos listeners deve ser feita através de uma instância da classe iAcessoBioSelfie.

O método de abertura da câmera, que é chamado na próxima etapa, precisa saber o que fazer ao conseguir capturar uma imagem com sucesso ou ao ocorrer algum erro no processo. É necessário informar "o que fazer" ao método de abertura da câmera através da implantação de listeners que são chamados em situações de sucesso ou erro.

Através da configuração dos listeners, você pode especificar o que acontece em seu App em situações de erro (Método onErrorSelfie) ou sucesso (Método onSuccessSelfie) na captura de imagens.

Mudanças da nomenclatura para as versões inferiores a 4.2.1:

  • Do método prepareCamera que antes era prepareSelfieCamera;

  • Da classe CameraListener que antes era SelfieCameraListener;

  • Do objeto UnicoCheckCameraOpener.Camera que antes era UnicoCheckCameraOpener.Selfie.

Para a configuração dos listeners, é necessário implementar:

iAcessoBioSelfie cameraListener = new iAcessoBioSelfie() {
    @Override
    public void onSuccessSelfie(ResultCamera result) { }

    @Override
    public void onErrorSelfie(ErrorBio errorBio) { }
};

unicoCheckCamera.prepareCamera(unicoConfig, new CameraListener() {
    @Override
    public void onCameraReady(UnicoCheckCameraOpener.Camera cameraOpener) {
        cameraOpener.open(cameraListener);
    }

    @Override
    public void onCameraFailed(String message) {
        Log.e(TAG, message);
    }
});
val cameraListener: iAcessoBioSelfie = object : iAcessoBioSelfie {
    override fun onSuccessSelfie(result: ResultCamera?) {}

    override fun onErrorSelfie(errorBio: ErrorBio?) {}
}

unicoCheckCamera.prepareCamera(unicoConfig, object : CameraListener {
    override fun onCameraReady(cameraOpener: UnicoCheckCameraOpener.Camera?) {
        cameraOpener?.open(cameraListener)
    }

    override fun onCameraFailed(message: String?) {
        Log.e(TAG, message)
    }
})

Preparar e abrir câmera


Quando a câmera estiver preparada, é disparado o evento onCameraReady, que recebe como parâmetro um objeto do tipo UnicoCheckCameraOpener.Camera.

É necessário sobrescrever este método, efetuando a abertura da câmera com o objeto recebido através do método open(). O método open() deve receber como parâmetro os listeners configurados nos passos acima.

Método onSucessSelfie


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST:

public void onSuccessSelfie(ResultCamera result) { }

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

  • O atributo encrypted é destinado estritamente ao envio da imagem através das APIs do by Client. Não se deve abrir e serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista.

  • Os arquivos base64/encrypted podem sofrer variações de tamanho de acordo com diversas variáveis, dentre elas, a qualidade dos aparelhos e das fotos geradas pelos mesmos e regras de negócio da Unico. Para não encontrar problemas em sua aplicação, não limite em sua lógica de programação ou sua infraestrutura o tamanho da string gerada pela SDK para os arquivos.

Método onErrorSelfie


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo ErrorBio:

public void onErrorSelfie(ErrorBio errorBio) { }

Realize um requisição POST na API REST do by Client


Por motivos de segurança, o intervalo entre a geração do encrypted e o envio via um dos fluxos disponíveis deve ser de até no máximo 10 minutos. Envios feitos além deste período serão rejeitados automaticamente pela API.


Guia de tratamento de erros

Nesta seção, você encontrará todas as informações necessárias para o tratamento dos erros do SDK da plataforma Unico IDCloud em seus aplicativos iOS



Este objeto é retornado sempre que ocorre um erro no SDK iOS.

Métodos disponíveis


Nome do método
Descrição

getCode()

Método utilizado para obter o código de erro ocorrido

getDescription()

Método utilizado para obter a descrição de erro ocorrido

É disponibilizado a seguir a lista de possíveis códigos de erro do SDK iOS:

Código
Descrição

73000

The Session was cancelled because of an unknown and unexpected error. The Unico Check SDK leverages a variety of iOS APIs including camera, storage, security, networking, and more. This return value is a catch-all for errors experienced during normal usage of these APIs.

73001

Context invalid

73003

The API version needs to be 12 or newer.

73006

Unable to open camera on emulators

73100

Unable to connect to internet

73200

Could not find the unico_sdk json file

73202

Unable to load unico_sdk json file

73203

Unable to load AcessoBioConfigDataSource

73204

Unable to initialize the SDK, please configure the environment on setEnviroment method of build.

73300

Unable to get unico authentication object

73301

Unable to parse unico authentication object

73302

Could not find the unico token

73701

Could not find active liveness import

73702

Unable to initialize active liveness in production mode

73703

Unable to get active liveness session

73704

The user pressed the cancel button and did not complete the Session.

73705

The Session was not performed successfully and a FaceScan was not generated. In general, other statuses will be sent to the developer for specific unsuccess reasons.

73706

The camera access is prevented because either the user has explicitly denied permission or the user's device is configured to not allow access by a device policy.

73707

The Session was cancelled due to the app being terminated, put to sleep, an OS notification, or the app was placed in the background.

73708

The Session was cancelled because the device is in landscape mode. The user experience of devices in these orientations is poor and thus portrait is required.

73709

The Session was cancelled because the device is in reverse portrait mode. The user experience of devices in these orientations is poor and thus portrait is required.

73710

The Session was cancelled because the user was unable to complete a Session in the default allotted time or the timeout set by the developer.

73711

The Session was cancelled due to memory pressure.

73712

The Session was cancelled because your App is not in production and requires a network connection.

73713

The Session was cancelled because your key needs to be validated again.

73714

The Session was cancelled because the developer-configured encryption key was not valid.

73715

The Session was cancelled because not all guidance images were configured.

73716

The Session was cancelled because SDK was unable to start the camera on this device.

73717

The Session was cancelled because the user was in a locked out state.

73718

The Session was cancelled because of an unknown and unexpected error. SDK leverages a variety of iOS APIs including camera, storage, security, networking, and more. This return value is a catch-all for errors experienced during normal usage of these APIs.

73719

The Session was cancelled because the user pressed the Get Ready screen subtext message. Note: This functionality is not available by default, and must be requested from FaceTec in order to enable it.

73720

The Session was not processed.

73721

The Session can't be performed: attempts limit exceeded.

73722

The Session can't be performed: face alignment timeout.

73730

Unable to initialize an active liveness session because of an unknown and unexpected license error.

73731

Unable to initialize an active liveness session because the license has expired.

73800

Could not build encrypted key


Solução de problemas


Ofuscação de código


O material de ofuscação tem por motivação servir de auxilio para o desenvolvedor passar pelos problemas de ofuscação em seu aplicativo.

O ofuscador do cliente pode afetar o funcionamento do SDK, é necessário que o mesmo não ofusque o código do SDK.

A Unico se isenta da responsabilidade em relação à conflitos de ofuscação com a SDK.

O ofuscamento é um processo de transformar o bytecode em uma forma menos legível por humanos, dificultando assim a engenharia reversa.

Esse processo consiste em remover informações relacionadas a depuração como tabelas de variáveis, número de linhas e renomear os pacotes, classes e métodos.

Ao embarcar a SDK Adroid na aplicação podem ocorrer falhas.

Ofuscação via iXGuard


Quando o ofuscamento for realizado pela ferramenta iXGuard, sugerimos utilizar a versão 4.12.6 ou superior.

Sombra ao final do fluxo após atualização para versão 2.4.0


A responsabilidade do controle do fluxo é delegada para quem chama a SDK. Sendo assim, ao aparecer alguma forma de sombra ou a tela não fechar após a conclusão com sucesso da captura, a sugestão é que seja implementada uma forma de liberação dessa tela. Essa liberação pode variar de acordo com o empilhamento de navegação implementado. Para essa implementação, adicione o método condizente a liberação preferencialmente dentro do método de delegate onSuccessSelfie. A seguir, alguns exemplos de liberação que podem ser usados:

- (void)onSuccessSelfie:(SelfieResult *)result {
    [self dismissViewControllerAnimated:YES completion:nil];
    // your code
} 
func onSuccessSelfie(_ result: AcessoBio.SelfieResult!) {
    navigationController?.popViewController(animated: true)
    // your code
 }

Erro de bitcode na distribuição de aplicativos usando Xcode 16


Após o lançamento da versão oficial do Xcode 16 no dia 17 de setempro de 2024 e com a sua utilização para distribuição de aplicativos na AppStore, verificamos um bloqueio ao utilizar a SDK iOS sinalizando o uso de bitcode em duas dependências internas ao utilizar o Cocoapods como gerenciador de dependencias internas, são elas o DeviceProfiling e UnicoSdkLogger. A fim de não bloquear novos lançamentos é possível aplicar o seguinte passo-a-passo até a sua definitiva correção em uma release futura da SDK iOS:

  1. Abrir arquivo Podfile;

  2. Inserir as linhas a seguir após comando post_install do |installer| e antes do ultimo end:

    bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
      def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
        framework_path = File.join(Dir.pwd, framework_relative_path)
        command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
        puts "Stripping bitcode: #{command}"
        system(command)
      end
    
      framework_paths = [
        "Pods/unicocheck-ios/DeviceProfiling.xcframework/ios-arm64/DeviceProfiling.framework/DeviceProfiling",
        "Pods/unicocheck-ios/UnicoSdkLogger.xcframework/ios-arm64/UnicoSdkLogger.framework/UnicoSdkLogger"
      ]
    
      framework_paths.each do |framework_relative_path|
        strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
      end

    2.1. Caso já haja algum código, insira antes do trecho existente;

    2.2. Caso já faça a remoção do bitcode manualmente, adicionar os caminhos explicitamente citados em framework_paths;

  3. Caso não haja o comando post_install do |installer| no arquivo Podfile, inserir-lo confrme a seguir antes do último end:

    post_install do |installer|
    bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
      def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
        framework_path = File.join(Dir.pwd, framework_relative_path)
        command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
        puts "Stripping bitcode: #{command}"
        system(command)
      end
    
      framework_paths = [
        "Pods/unicocheck-ios/DeviceProfiling.xcframework/ios-arm64/DeviceProfiling.framework/DeviceProfiling",
        "Pods/unicocheck-ios/UnicoSdkLogger.xcframework/ios-arm64/UnicoSdkLogger.framework/UnicoSdkLogger"
      ]
    
      framework_paths.each do |framework_relative_path|
        strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
      end

Captura de documento

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos iOS para a captura do documento


Frames de documentos disponíveis


Neste modo de câmera, existe um frame de captura para auxiliar o usuário a posicionar o documento corretamente. Após posicionar o documento corretamente, o usuário deve clicar no botão para realizar a captura da foto do documento.

A SDK não realiza nenhum tipo de validação do que está sendo capturado.

Neste modo de câmera é possivel capturar os documentos:

  • RG: Captura do RG (separado em frente e verso);

  • CNH: Captura da CNH aberta;

  • CNH frente: Captura da frente da CNH;

  • CNH verso: Captura do verso da CNH;

  • CPF: Captura do documento de CPF;

  • Sem silhueta: Captura documento genérico.

Inicializar o SDK


Para iniciar com SDK iOS da plataforma Unico IDCloud, importe o SDK e implemente a interface AcessoBioManagerDelegate dentro da ViewController que deseja utilizar.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é intanciar o builder informando o contexto em questão e sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação:

.m:
#import "ViewController.h"
#import <AcessoBio/AcessoBio.h>

@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];   
    unicoCheck = [[AcessoBioManager alloc]initWithViewController:self];
}
   
- (void)onErrorAcessoBioManager:(ErrorBio *)error {
  // Your code
}

- (void)onSystemChangedTypeCameraTimeoutFaceInference {
  // Your code
}

- (void)onSystemClosedCameraTimeoutSession {
  // Your code
}

- (void)onUserClosedCameraManually {
  // Your code
}

@end
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate {
  var unicoCheck: AcessoBioManager!

  override func viewDidLoad() {
    super.viewDidLoad()
    
    unicoCheck = AcessoBioManager(viewController: self)
  }

  func onErrorAcessoBioManager(_ error: ErrorBio!) {
    // Your code
  }

  func onUserClosedCameraManually() {
    // Your code
  }

  func onSystemClosedCameraTimeoutSession() {
    // Your code
  }

  func onSystemChangedTypeCameraTimeoutFaceInference() {
    // Your code
  }
}   

Implementar as funções de callback


Note que, conforme o exemplo anterior, o trabalho de implementação da interface AcessoBioManagerDelegate é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação:

1

onErrorAcessoBioManager(_ error: ErrorBio!)

Este método é invocado quando qualquer erro de implementação ocorrer ao utilizar algum dos métodos, como por exemplo, ao informar um tipo de documento incorreto para a funcionalidade de captura de documentos.

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Implementar delegates para eventos da câmera


O método de abertura da câmera (que é chamado no próximo passo) precisa saber o que fazer ao conseguir capturar uma imagem com sucesso ou ao ter algum erro no processo. É informado "o que fazer" ao método de abertura da câmera através da configuração de delegates que são chamados em situações de sucesso ou erro.

Através da configuração dos delegates, você pode especificar o que acontece em seu App em situações de erro (método onErrorDocument) ou sucesso (método onSuccessDocument) na captura de imagens.

Para a configuração dos delegates, você deve implementar as interfaces DocumentCameraDelegate e AcessoBioDocumentDelegate:

.h:
#import <UIKit/UIKit.h>
#import <AcessoBio/AcessoBio.h>
#import "SelfieCameraDelegate.h"

@interface ViewController: UIViewController <AcessoBioManagerDelegate, DocumentCameraDelegate, 
  AcessoBioDocumentDelegate> {
  AcessoBioManager *unicoCheck;
  // Your code from previous and next steps here
}
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate, DocumentCameraDelegate, 
  AcessoBioDocumentDelegate {    
  // Your code from previous and next steps here
}

Método onSucessDocument


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST.

- (void)onSuccessDocument:(DocumentResult *)result {
    NSLog(@"%@", result.base64);
} 
func onSuccessDocument(_ result: DocumentResult!) {
    // Your code
 }

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

Método onErrorDocument


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo ErrorBio.

- (void)onErrorDocument:(ErrorBio *)errorBio {
    // Your code
}
func onErrorDocument(_ errorBio: ErrorBio!) {
    // Your code
 }

Preparar e abrir câmera


Para abrir da câmera, é necessário prepará-la utilizando o método prepareDocumentCamera. Este método recebe como parâmetro a implementação da classe DocumentCameraDelegate e o JSON com as credenciais, gerado na etapa acima.

.h:
#import <UIKit/UIKit.h>
#import <AcessoBio/AcessoBio.h>
#import "SelfieCameraDelegate.h"

@interface ViewController: UIViewController < AcessoBioManagerDelegate,
DocumentCameraDelegate, AcessoBioDocumentDelegate> {
    AcessoBioManager *unicoCheck;
}

.m:
- (IBAction)openCamera:(UIButton *)sender {
    [[unicoCheck build] prepareDocumentCamera:self config:[YourUnicoConfigClass new]];
}
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate, 
DocumentCameraDelegate, AcessoBioDocumentDelegate {
    @IBAction func openCamera(_ sender: Any) {
        unicoCheck.build().prepareDocumentCamera(self, config: YourUnicoConfigClass())
    }
}

Quando a câmera estiver preparada, o evento onCameraReadyDocument é disparado, que recebe como parâmetro um objeto do tipo AcessoBioCameraOpenerDelegate.

Você deve sobrescrever este método, efetuando a abertura da câmera com o objeto recebido através do método openDocument(), recebendo os parâmetros tipo de documento a ser capturado, sendo eles:

Parâmetro
Descrição

DocumentEnums.CPF

Frame para captura da frente do CPF

DocumentEnums.CNH

Frame para captura da CNH aberta

DocumentEnums.cnhFrente

Frame para captura da frente da CNH

DocumentEnums.cnhVerso

Frame para captura do verso da CNH

DocumentEnums.RG

Frame para captura do RG aberto

DocumentEnums.rgFrente

Frame para captura da frente do RG

DocumentEnums.rgVerso

Frame para captura do verso do RG

DocumentEnums.none

Frame para captura de qualquer outro documento

Caso precise capturar um documento que não possuímos um frame específico (ex: RNE, entre outros), utilize o frame DocumentEnums.none, que irá te possibilitar um frame genérico, retangular, que pode ser utilizado para orientar qualquer captura.

Os delegates implementados acima (aqui descritos como Self):

- (void)onCameraReadyDocument:(id)cameraOpener {
    [cameraOpener openDocument:DocumentCNH delegate:self];
}

- (void)onCameraFailedDocument:(ErrorPrepare *)message {
  // Your code
}
func onCameraReadyDocument(_ cameraOpener: AcessoBioCameraOpenerDelegate!) {
    cameraOpener.openDocument(DocumentEnums.CNH, delegate: self)
}
 
func onCameraFailedDocument(_ message: ErrorPrepare!) {
  // Your code
}

Caso ocorra algum erro ao preparar a câmera, o evento onCameraFailedDocument é disparado. Você deve implementar este método aplicando as regras de negócio de seu App.

Em caso de sucesso, o evento onSuccessDocument é disparado, conforme explicado na seção acima.

Realize um requisição POST na API REST do by Client



Captura de Selfie

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos iOS para a captura da selfie


Inicializar o SDK


Para iniciar com SDK iOS do Unico Check, importe o SDK e implemente a interface AcessoBioManagerDelegate dentro da ViewController que deseja utilizar.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é instanciar o builder informando o contexto e ambiente em questão e sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação:

.m:
#import "ViewController.h"
#import <AcessoBio/AcessoBio.h>

@implementation ViewController: UIViewController
- (void)viewDidLoad {
    [super viewDidLoad];  
    unicoCheck = [[AcessoBioManager alloc]initWithViewController:self];
}

- (void)onErrorAcessoBioManager:(ErrorBio *)error {
  // your code
}

- (void)onSystemChangedTypeCameraTimeoutFaceInference {
  // your code
}

- (void)onSystemClosedCameraTimeoutSession {
  // your code
}

- (void)onUserClosedCameraManually {
  // your code
}
@end
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate {
  var unicoCheck: AcessoBioManager!

  override func viewDidLoad() {
    super.viewDidLoad()      
    unicoCheck = AcessoBioManager(viewController: self)
  }

  func onErrorAcessoBioManager(_ error: ErrorBio!) {
      // your code
  }

  func onUserClosedCameraManually() {
      // your code
  }

  func onSystemClosedCameraTimeoutSession() {
      // your code
  }

  func onSystemChangedTypeCameraTimeoutFaceInference() {
      // your code 
  }
}

Configuração de ambientes


Configure o ambiente que será utilizado na execução da SDK. Utilize o enumerado Environment que contém os seguintes enumerados:

  • PROD: para ambiente de Produção;

  • UAT: para ambiente de Homologação.

Veja como implementar no exemplo abaixo:

 [unicoCheck setEnvironment:UAT];
unicoCheck.setEnvironment(.UAT);

Implementar as funções de callback


Note que, conforme o exemplo anterior, o trabalho de implementação da interface AcessoBioManagerDelegate é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação:

1

onErrorAcessoBioManager(_ error: ErrorBio!)

Este método é invocado quando qualquer erro de implementação ocorrer ao utilizar algum dos métodos, como por exemplo, ao informar um tipo de documento incorreto para a funcionalidade de captura de documentos.

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Configurar modo de câmera


O SDK tem configurado e habilitado por padrão o enquadramento inteligente e a captura automática. Em função disso, deve-se configurar o modo de câmera no seu builder da seguinte forma:

.m:
- (IBAction)configureSmartCamera:(UIButton *)sender {
   // Objeto unicoCheck da classe AcessoBioManager
   [unicoCheck setSmartFrame:true];
   [unicoCheck setAutoCapture:true];
}
@IBAction func configureSmartCamera(_ sender: Any) {
    // Objeto unicoCheck da classe AcessoBioManager
    unicoCheck.setSmartFrame(true)
    unicoCheck.setAutoCapture(true)    
}

Os valores false/true dos métodos acima não alteram a experiência de captura, servem apenas para a lógica interna do funcionamento do SDK.

Implementar delegates para eventos da câmera


O método de abertura da câmera precisa saber o que fazer ao conseguir capturar uma imagem com sucesso ou ao ter algum erro no processo. É informado "o que fazer" ao método de abertura da câmera através da configuração de delegates que são chamados em situações de sucesso ou erro.

Através da configuração dos delegates, você pode especificar o que acontece em seu App em situações de erro (método onErrorSelfie) ou sucesso (método onSuccessSelfie) na captura de imagens.

Para a configuração dos delegates, você deve implementar as interfaces SelfieCameraDelegate e AcessoBioSelfieDelegate:

.h:
#import <UIKit/UIKit.h>
#import <AcessoBio/AcessoBio.h>
#import "SelfieCameraDelegate.h"

@interface ViewController: UIViewController <AcessoBioManagerDelegate, SelfieCameraDelegate,
   AcessoBioSelfieDelegate> {
  AcessoBioManager *unicoCheck;
  // Your code from previous and next steps here
}
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate,
                      SelfieCameraDelegate, AcessoBioSelfieDelegate {    
  //Your code from previous and next steps here
}

Método onSuccessSelfie


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo SelfieResult que é utilizado posteriormente na chamada das APIs REST.

- (void)onSuccessSelfie:(SelfieResult *)result {
    NSLog(@"%@", result.base64);
} 
func onSuccessSelfie(_ result: AcessoBio.SelfieResult!) {
    // Your code
 }

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

  • O atributo encrypted é destinado estritamente ao envio da imagem através das APIs do by Client. Não se deve abrir e serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista.

  • Os arquivos base64/encrypted podem sofrer variações de tamanho de acordo com diversas variáveis, dentre elas, a qualidade dos aparelhos e das fotos geradas pelos mesmos e regras de negócio da Unico. Para não encontrar problemas em sua aplicação, não limite em sua lógica de programação ou sua infraestrutura o tamanho da string gerada pela SDK para os arquivos.

Método onErrorSelfie


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo ErrorBio:

- (void)onErrorSelfie:(ErrorBio *)errorBio {
  // Your code
}
func onErrorSelfie(_ errorBio: ErrorBio!) {
  // Your code
 }

Configurar ambientes


Caso não seja configurado, a SDK usa o ambiente configurado em através do arquivo de configuração (getHostKey). Caso getHostKey não esteja sendo usado, um erro é retornado.

É possível configurar o ambiente que será utilizado na execução da SDK. Utilize o enumerado EnvironmentEnum que contém os seguintes enumerados:

  • EnvironmentEnum.PROD: para ambiente de Produção

  • EnvironmentEnum.UAT: para ambiente de Homologação

Veja como implementar no exemplo abaixo:

[unicoCheck setEnvironment:PROD];
unicoCheck.setEnvironment(.PROD);

Preparar e abrir câmera


Para seguir com a abertura da câmera, primeiro deve-se prepará-la utilizando o método prepareSelfieCamera. Este método recebe como parâmetro a implementação da classe SelfieCameraDelegate e o JSON com as credenciais, gerado na etapa acima.

.h:
#import <UIKit/UIKit.h>
#import <AcessoBio/AcessoBio.h>
#import "SelfieCameraDelegate.h"

@interface ViewController: UIViewController <AcessoBioManagerDelegate,
SelfieCameraDelegate, AcessoBioSelfieDelegate> {
    AcessoBioManager *unicoCheck;
}

.m:
- (IBAction)openCamera:(UIButton *)sender {
    [[unicoCheck build] prepareSelfieCamera:self config:[YourUnicoConfigClass new]];
}
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate,
  SelfieCameraDelegate, AcessoBioSelfieDelegate {
    @IBAction func openCamera(_ sender: Any) {
        unicoCheck.build().prepareSelfieCamera(self, config: YourUnicoConfigClass())
    }
}

Quando a câmera estiver preparada, o evento onCameraReady é disparado e recebe como parâmetro um objeto do tipo AcessoBioCameraOpenerDelegate.

Você deve sobrescrever este método, efetuando a abertura da câmera com o objeto recebido através do método open():

- (void)onCameraReady:(id)cameraOpener {
    [cameraOpener open:self];
}

- (void)onCameraFailed:(ErrorPrepare *)message {
    // Your code
}
func onCameraReady(_ cameraOpener: AcessoBioCameraOpenerDelegate!) {
    cameraOpener.open(self)
 }
 
func onCameraFailed(_ message: ErrorPrepare!) {
    // Your code
 }

Caso ocorra algum erro ao preparar a câmera, o evento onCameraFailed é disparado. Você devem implementar este método aplicando as regras de negócio de seu App.

Realize um requisição POST na API REST do by Client


Por motivos de segurança, o intervalo entre a geração do encrypted e o envio via um dos fluxos disponíveis deve ser de até no máximo 10 minutos. Envios feitos além deste período serão rejeitados automaticamente pela API.


Release notes

Nesta seção, você encontrará todas as atualizações do SDK iOS


Mantenha seu SDK iOS sempre atualizado com a última versão disponível.


Versão 2.17.0 - 29/04/2025

pod 'unicocheck-ios', '2.17.10'
  • Atualização de build, a partir dessa versão o suporte mímino é Xcode16/iOS12.

    • Generated by Apple Swift version 6.0 effective-5.10 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)

  • Atualização do SDK e server de Liveness com interação.

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Versão 2.16.12 - 16/04/2025

pod 'unicocheck-ios', '2.16.12'
  • Atualização do SDK e server de Liveness com interação.

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.11 - 25/03/2025

pod 'unicocheck-ios', '2.16.11'
  • Atualização do SDK e server de Liveness com interação.

  • Melhorias de acessibilidade.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.10 - 06/03/2025

pod 'unicocheck-ios', '2.16.10'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.9 - 05/02/2025

pod 'unicocheck-ios', '2.16.9'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.8 - 17/01/2025

pod 'unicocheck-ios', '2.16.8'
  • Atualização do SDK e server de Liveness com interação;

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.7 - 14/01/2025

pod 'unicocheck-ios', '2.16.7'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


Versão 2.16.6 - 19/12/2024

pod 'unicocheck-ios', '2.16.6'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.



pod 'unicocheck-ios', '2.16.5'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


pod 'unicocheck-ios', '2.16.4'
  • Atualização do SDK e server de Liveness com interação.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


pod 'unicocheck-ios', '2.16.3'
  • Atualização do SDK e server de Liveness com interação;

  • Remoção de bitcode que bloqueia envios para AppStore usando Xcode 16 e CocoaPods.

A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no Unico Check iOS SDK em uma versão futura.


pod ‘unicocheck-ios’, '2.16.2'
  • Atualização do SDK e server de Liveness com interação.


pod ‘unicocheck-ios’, '2.16.1'
  • Atualização do SDK e server de Liveness com interação;

  • Correção que causava aumento no tempo de inicialização das aplicações.


pod ‘unicocheck-ios’, '2.16.0'
  • A partir de agora, é possível definir o ambiente da SDK pela própria API pública no método setEnvironment(). Em casos de dúvidas, contacte o seu CSM;

  • Correção de localização (setLocale) na captura com Liveness interativo.

Identificamos um aumento no tempo de inicialização das aplicações que utilizem essa versão, o que pode ter um impacto mais significativo em dispositivos mais antigos. Estamos empenhados em resolver essa questão com a maior rapidez possível.


pod ‘unicocheck-ios’, '2.15.6'
  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas;

  • Melhoria no foco da câmera de documentos para dispositivos iPhone Pro Max.


pod ‘unicocheck-ios’, '2.15.5'
  • Atualização do SDK e server de Liveness com interação.


pod ‘unicocheck-ios’, '2.15.4'
  • Melhoria no foco da câmera de documentos para dispositivos iPhone Pro Max.


pod ‘unicocheck-ios’, '2.15.3'
  • Correção de bug que quebrava a SDK ao iniciar em dispositivos usando iOS 12.


Atualização Crítica

pod ‘unicocheck-ios’, '2.15.2'
  • Atualização do SDK e server de Liveness com interação.


pod ‘unicocheck-ios’, '2.15.1'
  • Atualização do SDK e server de Liveness com interação.


pod ‘unicocheck-ios’, '2.15.0'
  • Correção de bug que fazia SDK ficar congelado na tela de loading em alguns casos específicos;

  • Melhorias nos algoritmos de comunicação entre o clientside e serverside unico.


pod ‘unicocheck-ios’, '2.14.2'
  • Correção de crash "[USLErrorSDK ????]: unrecognized selector sent to instance".


Atualização Crítica

pod ‘unicocheck-ios’, '2.14.1'
  • Atualização do SDK e server de Liveness com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


Atualização Crítica

pod ‘unicocheck-ios’, '2.14.0'
  • Atualização do SDK e server de Liveness com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


pod ‘unicocheck-ios’, '2.13.3'
  • Remoção de dependência que poderia causar a mensagem ITMS-91065: Missing signature ao enviar para o Testflight e AppStore.


pod ‘unicocheck-ios’, '2.13.2'
  • Ajustes na distribuição de um módulo interno que causava o erro No architectures in the binary ao enviar para o Testflight e AppStore.


pod ‘unicocheck-ios’, '2.13.1'
  • Ajustes nos manifestos de privacidade visando corrigir problemas de upload p/ AppStore.


pod ‘unicocheck-ios’, '2.13.0'
  • Melhoria no foco da câmera de documentos para dispositivos iPhone 12 ou mais recentes;

  • Na SDK e server do Smartlive com interação;

  • Câmera de documentos com um crash intermitente durante sua abertura.


pod ‘unicocheck-ios’, '2.12.1'
  • Manifesto de Privacidade: erro listado ao gerar o Relatório de Privacidade pelo Xcode.


pod ‘unicocheck-ios’, '2.12.0'
  • Manifesto de privacidade;

  • SDK de Smartlive com interação;

  • Suporte ao Xcode 15.


pod ‘unicocheck-ios’, '2.11.0'
  • Novas funcionalidades que melhoram a experiência de captura no Liveness Interativo.

  • Problema corrigido: uma implementação interna que ocasionava um crash ao final do fluxo quando a aplicação é gerada usando as seguintes configurações: macOS 14+(Sonoma) com Chip M1/M2 e Xcode 15+.


pod ‘unicocheck-ios’, '2.10.0'
  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


pod ‘unicocheck-ios’, '2.9.2'
  • Revertido: Problema corrigido: uma implementação interna que ocasionava um crash ao final do fluxo quando a aplicação é gerada usando as seguintes configurações: macOS 14+(Sonoma) com Chip M1/M2 e Xcode 15+.

  • Corrigido: Invalid Bundle. The bundle UnicoSdkLogger.framework does not support the minimum OS Version specified in the Info.plist.


pod ‘unicocheck-ios’, '2.9.1'
  • Problema corrigido: uma implementação interna que ocasionava um crash ao final do fluxo quando a aplicação é gerada usando as seguintes configurações: macOS 14+(Sonoma) com Chip M1/M2 e Xcode 15+.

  • É necessário ter a versão mínima do iOS 11 no projeto. Caso a versão informada em seu info.plist esteja abaixo da versão 11, você pode ter problemas de incompatibilidade.

  • A partir do Xcode 15, a Apple abandonou o suporte para iOS 11. A Unico abandonará o suporte para iOS 11 no iOS SDK em uma versão futura.


Atualização Crítica

pod ‘unicocheck-ios’, '2.9.0'
  • Nova funcionalidade de captura para garantir segurança eficaz;

  • Adição de novos tratamentos de erros do Liveness Ativo.

    • Erro 73720 caso ocorra falha no processamento de liveness;

    • Erro 73721 caso ocorra o limite de tentativas de captura;

    • Erro 73722 caso ocorra o limite de tempo de captura;

    • Erro 73730 um erro interno de licença;

    • Erro 73731 um erro interno de licença expirada;

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa;


pod ‘unicocheck-ios’, '2.8.0'
  • Habilitamos a customização das cores do botão de cancelar e barra de progresso através dos métodos opcionais getProgressBarColor() e getCancelButtonIconColor();

  • Habilitamos a customização do logo no rodapé da tela para Camera Interativa (Facetec).


pod ‘unicocheck-ios’, '2.7.0'
  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.6.2'
  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.6.1'
  • Melhoria nos logs internos do SDK;

  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.6.0'
  • Definição automática de ambientes de produção e homologação no SDK.


pod ‘unicocheck-ios’, '2.5.0'
  • Problema corrigido: Foi abordado um vazamento de memória e crashes ao alternar entre os modos background e ativo, especialmente ao manter a câmera ativa. Agora, ao entrar em modo background, a câmera será encerrada automaticamente para otimizar o consumo de bateria e memória do dispositivo, reduzindo significativamente o risco de vazamentos de memória e crashes.


pod ‘unicocheck-ios’, '2.4.2'
  • Atualização do SDK e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.4.1'
  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.4.0'
  • Disponibilizar o novo fluxo de captura e retentativas quando usado o Liveness com Interação (entrar em contato com a único caso queira habilitar essa nova funcionalidade);

  • Lançar erro 73800 caso haja falha na captura usando o fluxo de retentativa;

  • Lançar erro 73100 caso haja falha de conexão com internet durante uma requisição.

  • Removido o timeout do fluxo de captura usando Liveness com Interação.


pod ‘unicocheck-ios’, '2.3.24'
  • Otimização do consumo de memória pela SDK, resolvendo problemas em instâncias que eram afetadas em capturas de longa duração.


pod ‘unicocheck-ios’, '2.3.23'
  • Correção nas cores no modo alta iluminação na câmera Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.22'
  • Atualização do SDK client e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.21'
  • Aumento do tempo padrão da sessão da câmera Smartlive com interação para 60s.

  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.3.20'
  • Atualização do SDK client e server do Smartlive com interação;

  • Remoção da tela de sucesso após a captura na câmera Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.19'
  • Atualização do SDK client e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.18'
  • Hotfix: Correção do timeout da câmera Smartlive com interação e de documentos.


pod ‘unicocheck-ios’, '2.3.17'
  • Melhorias internas no produto, sem impacto externo.


pod ‘unicocheck-ios’, '2.3.16'
  • Atualização do SDK client e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.15'
  • Atualização do SDK client e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.14'
  • Atualização do SDK client e server do Smartlive com interação.


pod ‘unicocheck-ios’, '2.3.13'
  • Atualização do SDK client e server do Smartlive com interação;

  • hotfix: Correção da abertura da câmera de documentos quando NSLocationWhenInUseUsageDescription não é implementado.


pod ‘unicocheck-ios’, '2.3.12'
  • hotfix: Correção do pedido de geolocalização sobre a câmera Smartlive podendo eventualmente cancelar a captura;

  • hotfix: Reset de brilho ao estado original após da captura.


pod ‘unicocheck-ios’, '2.3.11'
  • Atualização do SDK e server do Smartlive com interação;

  • hotfix: Correção do frame de captura de documentos em iPhones com telas menores do que 4.7 polegadas;

  • hotfix: Correção na análise de face em iPhones modelo Pro Max.


pod ‘unicocheck-ios’, '2.3.10'
  • Atualização do SDK e server do Smartlive com interação;

  • Melhoria de segurança no changelog.


pod ‘unicocheck-ios’, '2.3.9'
  • Atualização do SDK e server do Smartlive com interação;

  • Coleta de dados de uso, geolocalização e dispositivo (os dados coletados são usados para garantir a segurança do processo e melhorar a experiência do usuário).


pod ‘unicocheck-ios’, '2.3.8'
  • Feat: Automação da publicação no CocoaPods.


pod ‘unicocheck-ios’, '2.3.7'
  • Atualização da versão do Smartlive com interação;

  • Melhoria na tratativa de erro ao identificar fontes maliciosas;

  • hotfix: Abertura de câmera em celulares com versão do iOS abaixo da 13.


pod ‘unicocheck-ios’, '2.3.6'
  • Ajuste na resolução das imagens;

  • Habilitada a opção Build Libraries for Distribution. Isso ajuda o Xcode a evitar o travamento de versão, para que os módulos da unico possam ser usados ​​quando versões mais recentes do Xcode ou do compilador Swift forem usadas e lançadas a loja.


pod ‘unicocheck-ios’, '2.3.5'
  • Hot fix: Fechamento automático da câmera quando o usuário coloca a aplicação em background;

  • Hot fix: Limpezas de warnings na base de código.


pod ‘unicocheck-ios’, '2.3.4'
  • Hot fix: Ajustes para manter compatibilidade com Xcode 13.


pod ‘unicocheck-ios’, '2.3.3'
  • Hot fix: JWT encode nos modos de liveness ativo.


pod ‘unicocheck-ios’, '2.3.2'
  • Hot fix: ajuste no callback do fechamento manual do frame de captura com interação.


pod ‘unicocheck-ios’, '2.3.1'
  • Melhoria da resolução da imagem gerada pelo Smartlive com interação para celulares de qualidade média/alta.


pod ‘unicocheck-ios’, '2.3.0'
  • Atualização da versão da SDK do Smartlive;

  • Possibilidade de executar os métodos prepareSelfieCamera e prepareDocumentCamera sem o arquivo json, utilizando uma classe do tipo AcessoBioConfigDataSource.


pod ‘unicocheck-ios’, '2.2.1'
  • Ajuste no tema padrão para o modo de baixa luminosidade do frame com interação;

  • Ajuste na customização para o botão de fechar do frame com interação.


pod ‘unicocheck-ios’, '2.1.3'
  • Feature flag para poder selecionar a exibição ou não do logo da unico.


pod ‘unicocheck-ios’, '2.1.2'
  • Correções nas configurações que estavam impedindo o upload do archive/.ipa para a loja Apple.


pod ‘unicocheck-ios’, '2.1.0'
  • Suporte do gerenciador de pacotes Swift Package Manager (SPM);

  • Adição de dois novos frames de documentos: CNH frente e CNH verso.


pod ‘unicocheck-ios’, '2.0.5'
  • Correção na customização da funcionalidade de Prova de Vida. As cores não estavam sendo aplicadas ao modo de captura como deveriam;

  • Correção nos callbacks de erro que não estavam sendo invocados em casos de falhas em requisições REST.


pod ‘unicocheck-ios’, '2.0.4'
  • Suporte para versões anteriores do Swift (versão mínima: swift 4.2), desde que sigam os pré-requisitos quanto a versão mínima do Xcode (13 ou superior);

  • Correção no valor da propriedade encrypted no retorno do objeto (SelfieResult / DocumentResult);

  • Correção na abertura da câmera quando o objeto de tema possuía qualquer propriedade de cor como nula;

  • Correção no botão de fechar das câmeras: normal, inteligente e documentos.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘2.0.2’
  • Adicionado o frame de CPF;

  • Correção na implementação do frame de RG.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘2.0.1’
  • Correção na implementacão das customizacões.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘2.0.0’
  • Mudança na estrutura de classes;

  • Refatoração de funções públicas, permitindo o retorno assync dentro da própria função;

  • Refatoração nos métodos disableAutoCapture e disableSmartFrame;

  • Correção de bug de enquadramento de face;

  • Correção de bug de travamento de tela após a captura.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.7’
  • O SDK está 16% mais leve com a remoção de várias intra-dependências e remoções de garbage-code;

  • O SDK está mais seguro com novos métodos de criptografia em real-time;

  • O SDK está mais rápido e preciso na detecção de faces com melhorias dos modelos de IA para o câmera inteligente;

  • Agora é possível configurar o tempo máximo de sessão do seu usuário através do método: [acessoBioManager setTimeoutSession:], obtendo o retorno/callback quando ocorrer através do método: - (void)systemClosedCameraTimeoutSession;

  • Agora é possível configurar o tempo máximo de inferência e detecção da face do seu usuário através do método: [acessoBioManager setTimeoutToFaceInference:], obtendo o retorno/callback quando ocorrer através do método: - (void)systemClosedCameraTimeoutFaceInference;

  • Entre outras limpezas realizadas frequentemente.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.4’
  • O SDK está 16% mais leve com a remoção de várias intra-dependências e remoções de garbage-code;

  • O SDK está mais seguro com novos métodos de criptografia em real-time;

  • O SDK está mais rápido com os novos modelos de IA para o câmera inteligente;

  • Remoção de todos os métodos que permitiam acesso ao Liveness com interação;

  • Entre outras limpezas realizadas frequentemente.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.3’
  • Esta versão possui correções e melhorias importantes em relação a versão anterior (1.2.2);

  • Correções nas validações que envolvem iPhone 6 e iPhone 5;

  • Entre outras limpezas realizadas frequentemente.


Versão 1.2.2

pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.2’
  • Agora é possível customizar todos os elementos visuais utilizando também cores no formato hexadecimal. Lembrando que os formatos padrões dos SO's continuam ativos, como UIColor para iOS e Colors para Android;

  • Adicão de um novo método de retorno para notificar a sua classe implementadora no momento em que o usuário fechar a câmera manualmente;

  • Correção de bugs em toda classe de documentos que impedia as requisições para o servidor de forma adequada;

  • Entre outras limpezas realizadas frequentemente.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.1.1’
  • Adição de um novo método de callback (retorno) para notificar a sua classe implementadora no momento em que o usuário fechar a câmera manualmente;

  • Correção de bugs em toda classe de documentos que impedia as requisições para o servidor de forma adequada;

  • Entre outras limpezas realizadas frequentemente.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.1’
  • Normalização dos cálculos de pontos biométricos em dispositivos com tela em retina, o qual utilizam escala em @3x;

  • Automatização da operação de adicionar manualmente ao target o arquivo CenterModelCrop.mlmodel. A centralização ficou mais simples e rápida, diminuindo a fricção do usuário no momento de enquadrar o rosto;

  • Entre outras limpezas realizadas frequentemente.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.2.0’
  • A partir dessa versão (1.2.0), o SDK do Unico Check não possuirá mais intra-dependências dentro do projeto. Tais quais incluíam FirebaseMLVision, AFNetworking, MBProgressHUD entre outras. O time trouxe todas as funcionalidades e vantagens que tais dependências traziam para o iOS core nativo, simplificando e reduzindo em mais de 75% o tamanho de biblioteca em relação a versão anterior.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.1.5’
  • Bug fixado a respeito da versão da biblioteca AFNetworking, a qual estava impedindo o upload para a Apple Store pelo uso de WebViews depreciadas na Guideline de 2020.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.1.4’
  • Adição do botão de fechar no fluxo de captura de documentos. Permitindo que o usuário volte a tela anterior, caso queira;

  • Correção de um bug que impedia a implementação da captura de documentos no modo DocumentNone;

  • No fluxo de captura de documentos, correção de um bug que impedia a alteração da label de instrução de acordo com o documento selecionado.


pod ‘AcessoBio’, :git => 'https://github.com/acesso-io/acessobio-ios', :tag => ‘1.1.3’
  • Agora é possível customizar a imagem do ícone de popup de reset de sessão dentro do fluxo do Liveness com interação.


pod ‘unicocheck-ios’
  • Correção de bug que ocasionava conflitos entre códigos em swift desenvolvidos em nossa biblioteca e códigos em swift desenvolvidos no projeto do cliente. Estes conflitos, não permitiam o upload da aplicação para a Apple Store.


pod ‘unicocheck-ios’
  • O projeto acessobio-ios era um repositório público distribuído pelo Cocoapods. Devido as melhorias significativas e mudanças que foram realizadas foi criado um novo repositório que tem o intuito de proteger o código em relação aos dados sensíveis. Portanto, o repositório acessobio-ios não está mais disponível;

  • O novo repositório não afeta na implementação.


Capacidades

Nesta seção, você encontrará a descrição de todas as capacidades da plataforma Unico IDCloud

Abaixo veja detalhadamente como funciona cada capacidade:

Prova de vida


Quando há a necessidade de identificar se a pessoa é real e está viva no momento da operação. Pode ser utilizada de forma isolada ou em conjunto com as capacidades de Verificação de Identidade, Alerta de comportamento, Score de risco e Validação (1:1). Deve ser sempre utilizada em conjunto com os SDKs.

As possibilidades de resposta são:

  • SIM: indica que o usuário está ao vivo no momento da captura da seflie;

  • NÃO: indica que o usuário não está ao vivo no momento da captura da selfie.

Popularmente, pode ser chamado de IDLive ou Smartlive/Liveness com Interação.


Verificação de Identidade


Quando há a necessidade de garantir que o usuário que está realizando o processo é quem diz ser. Por padrão, é sempre utilizada em conjunto com a capacidade Prova de vida.

As possibilidades de resposta são:

  • SIM: indica que a face é a do real titular do CPF;

  • NÃO: indica que a face não é a do real titular do CPF;

  • INCONCLUSIVO: indica que não temos evidências suficientes para garantir se a face é ou não do real titular do CPF.

Popularmente, pode ser chamado de IDUnico.


Alerta de Comportamento


O Alerta de Comportamento complementa a resposta de Verificação de Identidade, trazendo o componente de comportamento que dá a certeza de um risco atrelado àquela identidade, visto comportamento fraudulento anterior. Só pode ser utilizado em conjunto com a capacidade Verificação de Identidade.

As possibilidades de resposta são:

  • SIM: indica que a face já esteve envolvida em transações fraudulentas de identidade;

  • INCONCLUSIVO: indica que não temos indícios suficientes que a face esteja envolvida em transações fraudulentas em nossa base.

Popularmente, pode ser chamado de Trust ou IDTrust.


Score de risco


A capacidade Score de risco está sendo descontinuada e só poderá ser utilizada em casos excepcionais. Para verificar a elegibilidade do seu caso, entre em contato com o responsável pela sua conta.

Quando há a necessidade de se obter um score de probabilidade sobre o usuário que está realizando o processo é quem diz ser. Só pode ser utilizada em orquestração com a capacidade de de Verificação de Identidade quando a resposta desta é "INCONCLUSIVA".

As possibilidades de resposta são:

  • Score Positivo: pode variar entre +10 e +100. Quanto maior o score, maior a probabilidade da face ser a real titular do CPF;

  • Score Zero: quando há algum erro de cadastro. Indicamos que seja feita uma nova captura;

  • Score Negativo: pode variar entre -10 e -100. Quanto menor o score, maior a probabilidade da face não ser a real titular do CPF.

Classificação
Score
Recomendação

Negativo

Entre -40 e -100

Recomendamos negar o cadastro.

Negativo

Entre -10 e -39

Recomendamos que o cliente avalie os riscos envolvidos para a tomada de decisão.

Neutro

Score Zero

Recomendamos negar o cadastro e solicitar ao usuário que seja feita uma nova captura com a foto da real titular do CPF.

Positivo

Entre +10 e +49

Recomendamos que o cliente avalie os riscos envolvidos para a tomada de decisão.

Positivo

Entre +50 e +100

Recomendamos aprovar o cadastro.

Popularmente, pode ser chamado de Check ou Unico Check.


Validação (1:1)


Quando há a necessidade de reconhecer se a pessoa da operação é a mesma que realizou o cadastro. Por padrão, é sempre utilizada em conjunto com a capacidade Prova de vida. Só pode ser utilizado em casos onde já foi feito um processo de Verificação de Identidade.

As possibilidades de resposta são:

  • SIM: indica que a face que está realizando a transação é a mesma que realizou o processo utilizado como referência;

  • NÃO: indica que a face que está realizando a transação não é a mesma que realizou o processo utilizado como referência.

Popularmente, pode ser chamado de Token Biométrico ou Transacional.


Reaproveitamento e captura de documentos


Quando há a necessidade de solicitar, armazenar e reutilizar documentos. Oferecemos a possibilidade de reaproveitar os documentos pessoais dos usuários (Passaporte brasileiro, CIN, RG e CNH - digital e comum), diminuindo a fricção desse processo que costuma ser de alta desistência, com um produto inédito no mercado. E caso não tenhamos os documentos na base, é possível capturá-los.

Só pode ser utilizado em conjunto com a capacidade Verificação de Identidade, pois trabalhamos com alta confiabilidade para o compartilhamento dos documentos. Além disso, tanto para o reaproveitamento quanto para a captura ofertamos o benefício de processamento, onde utilizamos as seguintes tecnologias:

  • Tipificação: indica qual o tipo de documento identificado

  • Extração de dados (OCR): consiste em extrair os dados do documento a partir de uma imagem;

  • FaceMatch: consiste em comparar a face da selfie com a face do documento;

  • CPF Match: consiste em procurar no documento informado um determinado CPF.

Popularmente, pode ser chamado de IDDOCS.


Assinatura eletrônica


Quando há a necessidade de utilizar a biometria para assinar um documento. Utilize a mesma forma de autenticação do usuário na jornada para finalizar a operação com a assinatura do contrato.

*A capacidade de assinatura eletrônica só está disponível no meio de integração by Unico em flows com outras capacidades. Veja mais na seção fluxos possíveis.

Popularmente, pode ser chamado de SIGN ou IDSIGN.


Retorno de similaridade da Serpro


O retorno de similaridade da Serpro não é uma capacidade nativa do IDCloud, mas sim uma funcionalidade adicional incorporada para atender a uma regulamentação da Dataprev, referente a operações de crédito consignado do INSS, voltadas para aposentados e pensionistas.

Dado que essas operações exigem obrigatoriamente o retorno de similaridade da Serpro, a plataforma IDCloud foi ajustada para incluir essa funcionalidade como uma opção no produto. Ao utilizar o recurso de similaridade da Serpro, a resposta da API será o score de similaridade encontrado.

Popularmente, pode ser chamado de IDSerpro.

  • Quando a Serpro encontra a face, é devolvido em score de 0-100, como no exemplo abaixo:

"government": {
        "serpro": 93.0 //este score é um exemplo.
    }
  • Quando a Serpro não encontra a face, é devolvido o score -1, como no exemplo abaixo:

"government": {
        "serpro":-1
    }
  • Quando há algum erro na integração com a Serpro, é devolvido o score -2, como no exemplo abaixo:

"government": {
        "serpro":-2
    }

Para entender como você pode usar cada uma das capacidades, não deixe de acessar a seção "Meios de Integração" no link abaixo:


Solução de problemas

Nesta seção, você encontrará a solução de alguns problemas comuns na integração do SDK da plataforma Unico IDCloud em seus aplicativos Android


Ofuscação de código


O material de ofuscação tem por motivação servir de auxilio para o desenvolvedor passar pelos problemas de ofuscação em seu aplicativo.

O ofuscador do cliente pode afetar o funcionamento do SDK, é necessário que o mesmo não ofusque o código do SDK.

A Unico se isenta da responsabilidade em relação à conflitos de ofuscação com a SDK.

O ofuscamento é um processo de transformar o bytecode em uma forma menos legível por humanos, dificultando assim a engenharia reversa.

Esse processo consiste em remover informações relacionadas a depuração como tabelas de variáveis, número de linhas e renomear os pacotes, classes e métodos.

Ao embarcar a SDK Adroid na aplicação podem ocorrer falhas.

Ofuscação via DexGuard


Quando o ofuscamento foi realizado via DexGuard, ao ocorrer a falha utilize as regras:

Ofuscação via ProGuard


Quando o ofuscamento foi realizado via ProGuard, ao ocorrer a falha utilize as regras:


Erro de bitcode na distribuição de aplicativos usando Xcode 16


Após o lançamento da versão oficial do Xcode 16 no dia 17 de setempro de 2024 e com a sua utilização para distribuição de aplicativos na AppStore, verificamos um bloqueio ao utilizar a SDK iOS sinalizando o uso de bitcode em duas dependências internas ao utilizar o Cocoapods como gerenciador de dependencias internas, são elas o DeviceProfiling e UnicoSdkLogger. A fim de não bloquear novos lançamentos é possível aplicar o seguinte passo-a-passo até a sua definitiva correção em uma release futura da SDK iOS:

  1. Abrir arquivo Podfile;

  2. Inserir as linhas a seguir após comando post_install do |installer| e antes do ultimo end:

    2.1. Caso já haja algum código, insira antes do trecho existente;

    2.2. Caso já faça a remoção do bitcode manualmente, adicionar os caminhos explicitamente citados em framework_paths;

  3. Caso não haja o comando post_install do |installer| no arquivo Podfile, inserir-lo confrme a seguir antes do último end:


Personalização Flutter

Nesta seção, você encontrará todas as informações necessárias para a customização do SDK da plataforma Unico IDCloud em seus aplicativos Flutter


O SDK Android permite que algumas personalizações sejam feitas. Abaixo veja todas as personalizações possíveis para este SDK.

Personalizar idioma


É possível configurar a experiência das mensagens informativas dos frames de captura alterando seu idioma. Utilize o enumerado LocaleTypes que contém os seguintes valores:

  • LocaleTypes.PT_BR: para Português(Brasil);

  • LocaleTypes.ES_MX: para Espanhol(México);

  • LocaleTypes.ES_ES: para Espanhol(Espanha);

  • LocaleTypes.EN_US: para Inglês(EUA).

Veja como implementar no exemplo abaixo:

  • Pode ser necessário uma ativação remota para ser utilizado, caso deseje usar, sinalize seu gerente de projetos ou o suporte da Unico.

  • Caso não seja configurado, por padrão o SDK utiliza o Português como idioma principal.

Personalizar experiência do processo de captura


Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

É possível customizar alguns objetos do frame de acordo com o modo de câmera utilizado, através do método setTheme().

Os tipos suportados para representação de cor são Color Resource ou String contendo o código hexadecimal da cor. Ex: R.color.red ou #FF0000.

Todos os métodos estão disponíveis abaixo:

Na implementação do android, a customização do colorCancelButtonIcon deve ser feita adicionando a cor desejado no arquivo de resources colors.xml


Captura de documento

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Flutter para a captura do documento


Frames de documentos disponíveis


Neste modo de câmera, existe um frame de captura para auxiliar o usuário a posicionar o documento corretamente. Após posicionar o documento corretamente, o usuário deve clicar no botão para realizar a captura da foto do documento.

A SDK não realiza nenhum tipo de validação do que está sendo capturado.

Neste modo de câmera é possivel capturar os documentos:

  • CPF: Captura da frente do CPF;

  • CNH: Captura da CNH aberta;

  • CNH frente: Captura da frente da CNH;

  • CNH verso: Captura do verso da CNH;

  • RG frente: Captura da frente do RG;

  • RG verso: Captura do verso do RG;

  • Outros: Captura de qualquer outro documento.

Inicializar o SDK


Para iniciar, crie uma instância do builder (gerado através da interface UnicoCheckBuilder, fornecendo como parâmetro o contexto em questão e a implementação da classe UnicoListener.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação.

Implementar as funções de callback


Note que, conforme o exemplo anterior, o trabalho de implementação da classe UnicoListener é, em grande parte, a configuração dos métodos de callback. Cada método é chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação:

1

onErrorUnico(UnicoError error)

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Implementar listeners para eventos da câmera


A implementação destes métodos listeners deve ser feita através de uma instância da classe iAcessoBioSelfie.

O método de abertura da câmera precisa saber o que fazer ao conseguir capturar uma imagem ou ao ter algum erro no processo. É informado "o que fazer" ao método de abertura da câmera através da implantação de listeners que são chamados em situações de sucesso ou erro.

Através da implementação dos listeners, você pode especificar o que acontece em seu App em situações de erro (método onErrorDocument) ou sucesso (método onSuccessDocument) na captura de imagens.

Método onSucessDocument


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST:

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

Método onErrorDocument


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo UnicoError:

Preparar e abrir câmera


Para abrir a câmera, o método openCameraDocument() é utilizado. Esse método é disponibilizado através do objeto gerado com uma instancia da classe UnicoCheck.

Este método recebe os seguintes parâmetros:

  • Arquivo JSON com as credenciais, gerado no passo de configurar credenciais;

  • Os listeners configurados acima;

  • Tipo de documento a ser capturado, sendo eles:

Caso precise capturar um documento que não possuímos um frame específico (ex: RNE, entre outros), utilize o frame DocumentCameraTypes.OUTROS("descrição"), que irá te possibilitar um frame genérico, retangular, que pode ser utilizado para orientar qualquer captura.

Exemplo para captura de CNH:


Realize um requisição POST na API REST do by Client



Personalização iOS

Nesta seção, você encontrará todas as informações necessárias para a customização do SDK da plataforma Unico IDCloud em seus aplicativos iOS


O SDK iOS permite que algumas personalizações sejam feitas. Abaixo veja todas as personalizações possíveis para este SDK.

Personalizar idioma


É possível configurar a experiência das mensagens informativas dos frames de captura alterando seu idioma. Utilize o enumerado LocaleTypes que contém os seguintes valores:

  • LocaleTypes.PT_BR: para Português(Brasil);

  • LocaleTypes.ES_MX: para Espanhol(México);

  • LocaleTypes.ES_ES: para Espanhol(Espanha);

  • LocaleTypes.EN_US: para Inglês(EUA).

Veja como implementar no exemplo abaixo:

  • Pode ser necessário uma ativação remota para ser utilizado, caso deseje usar, sinalize seu gerente de projetos ou o suporte da Unico.

  • Caso não seja configurado, por padrão o SDK utiliza o Português como idioma principal.

Personalizar experiência do processo de captura


Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

É possível customizar alguns objetos do frame de acordo com o modo de câmera utilizado, através do método setTheme().

Os tipos suportados para representação de cor são Color Resource ou String contendo o código hexadecimal da cor. Ex: R.color.red ou #FF0000.

Todos os métodos estão disponíveis abaixo:

A seguir alguns exemplos de como você pode utilizar os métodos acima em seu projeto:


Captura de Selfie

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em seus aplicativos Flutter para a captura da selfie


Inicializar o SDK


Para iniciar, crie uma instância do builder (gerado através da interface UnicoCheckBuilder, fornecendo como parâmetro o contexto e ambiente em questão e a implementação da classe UnicoListener.

A implementação dessa classe é bem simples e pode ser feita com poucas linhas de código. Tudo que precisa fazer é sobrescrever os métodos de callback com as lógicas de negócio de sua aplicação.

Configuração de ambientes


Configure o ambiente que será utilizado na execução da SDK. Utilize o enumerado Environment que contém os seguintes enumerados:

  • UnicoEnvironment.PROD: para ambiente de Produção;

  • UnicoEnvironment.UAT: para ambiente de Homologação.

Veja como implementar no exemplo abaixo:

Implementar as funções de callback


Note que, conforme o exemplo anterior, o trabalho de implementação da classe UnicoListener é, em grande parte, a configuração dos métodos de callback. Cada método será chamado em uma situação específica de retorno do SDK.

Basta sobrescrever os métodos exemplificados no passo anterior com as lógicas de negócio de sua aplicação:

1

onErrorUnico(UnicoError error)

2

onUserClosedCameraManually()

Este método é invocado sempre quando o usuário fechar a câmera de forma manual, como por exemplo, ao clicar no botão "Voltar".

3

onSystemClosedCameraTimeoutSession()

Este método é invocado assim que o tempo máximo de sessão for atingido (Sem capturar nenhuma imagem).

Pode ser configurado no builder através do método setTimeoutSession. Este método deve receber o tempo máximo da sessão em segundos. É possível alterar o tempo máximo de sessão do seu usuário ao utilizar a funcionalidade de detecção do rosto (Câmera de selfie com captura inteligente). Caso ele ultrapasse o tempo determinado em seu processo para capturar a foto, você pode apresentar alguma mensagem personalizável ou instrução ao usuário. O valor padrão é de 40 segundos e seu valor mínimo também é de 40 segundos.

4

onSystemChangedTypeCameraTimeoutFaceInference()

Este método é invocado assim que o tempo máximo para detecção do rosto de um usuário for atingido (Sem ter nada detectado). Neste caso, o modo de câmera é alterado automaticamente para o modo de captura manual (Sem a silhueta de captura inteligente).

O tempo máximo de captura ao utilizar a detecção do rosto (Câmera de selfie com captura inteligente) é de 13 segundos. Se o usuário encontra alguma dificuldade para captura da foto através da detecção do rosto e ultrapasse o tempo determinado em seu processo, a captura é alterada automaticamente para a manual, tendo como objetivo facilitar a ação para o usuário (TimeoutToFaceInference).

Todos os métodos acima devem ser criados da forma indicada em seu projeto (Mesmo que sem nenhuma lógica). Caso contrário, o projeto não compila com sucesso.

Configurar modo de câmera


O SDK tem configurado e habilitado por padrão o enquadramento inteligente e a captura automática. Em função disso, deve-se configurar o modo de câmera no seu builder da seguinte forma:

Os valores false/true dos métodos acima não alteram a experiência de captura, servem apenas para a lógica interna do funcionamento do SDK.

Implementar listeners para eventos da câmera


A implementação destes métodos listeners deve ser feita através de uma instância da classe UnicoSelfie.

O método de abertura da câmera precisa saber o que fazer ao conseguir capturar uma imagem ou ao ter algum erro no processo. É informado "o que fazer" ao método de abertura da câmera através da implantação de listeners que são chamados em situações de sucesso ou erro.

Através da implementação dos listeners, você pode especificar o que acontece em seu App em situações de erro (método onErrorSelfie) ou sucesso (método onSuccessSelfie) na captura de imagens.

Método onSucessSelfie


Ao efetuar uma captura de imagem com sucesso, este método é invocado e retorna um objeto do tipo ResultCamera que é utilizado posteriormente na chamada das APIs REST:

O objeto ResultCamera retorna 2 atributos: base64 e encrypted:

  • O atributo base64 pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

  • O atributo encrypted é destinado estritamente ao envio da imagem através das APIs do by Client. Não se deve abrir e serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista.

  • Os arquivos base64/encrypted podem sofrer variações de tamanho de acordo com diversas variáveis, dentre elas, a qualidade dos aparelhos e das fotos geradas pelos mesmos e regras de negócio da Unico. Para não encontrar problemas em sua aplicação, não limite em sua lógica de programação ou sua infraestrutura o tamanho da string gerada pela SDK para os arquivos.

Método onErrorSelfie


Ao ocorrer algum erro na captura de imagem, este método é invocado e retorna um objeto do tipo UnicoError:

Preparar e abrir câmera


O método openCameraSelfie é utilizado para abrir a camera. Este método recebe como parâmetro a implementação da classe UnicoSelfie e o JSON com as credenciais, gerado na etapa acima.

O exemplo a seguir ilustra os passos de configuração dos listeners e abertura da câmera:

Realize um requisição POST na API REST do by Client


Por motivos de segurança, o intervalo entre a geração do encrypted e o envio via um dos fluxos disponíveis deve ser de até no máximo 10 minutos. Envios feitos além deste período serão rejeitados automaticamente pela API.


Guia de tratamento de erros

Nesta seção, você encontrará todas as informações necessárias para o tratamento dos erros do SDK da plataforma Unico IDCloud em seus aplicativos Flutter



Este objeto é retornado sempre que ocorre um erro no SDK Flutter.

Métodos disponíveis


É disponibilizado a seguir a lista de possíveis códigos de erro do SDK Flutter:


Guia de instalação

Nesta seção, você encontrará todas as informações necessárias para instalação do SDK da plataforma Unico IDCloud em suas aplicações Web


Browsers compatíveis


O frame de captura disponibilizado por meio do SDK, é compatível com as seguintes combinações de browsers e sistemas operacionais:

De forma geral, o SDK da suporte a WebRTC e versões mais recentes dos browsers listados acima. Por questões de compatibilidade e segurança, o funcionamento em versões muito antigas destes browsers não é garantido.

O componente de captura disponibilizado por meio do SDK Web dá suporte às versões igual ou superiores para as tecnologias:

  • Android: 5.0 (API 21);

  • iOS: 11.

Funcionamento em Webview


É um componente do sistema que permite que as aplicações Android ou iOS exibam conteúdos da web diretamente dentro do aplicativo, baseado no mesmo projeto de código. Sendo responsável pela navegação em sites e conteúdo da web dentro dos aplicativos.

Pré-requisitos


  • É necessário ter realizado a implantação do SDK Web em uma aplicação que contenha um domínio seguro com protocolo https.

Compatibilidade com sistemas operacionais


Android:


O SDK Web tem compatibilidade com webviews executadas no Android 8 (API 26) ou superior.

Para que o SDK tenha um funcionamento correto é necessário adicionar algumas permissões e configurações ao arquivo AndroidManifest, são elas:

iOS


O SDK Web tem compatibilidade com webviews executadas no iOS 13 ou superior.

Para que o SDK tenha um funcionamento correto é necessário adicionar algumas permissões e configurações ao arquivo info.plist, são elas:

Compatibilidade com frameworks híbridos


O componente foi homologado somente em camadas nativas, para que seja utilizado em frameworks híbridos (Flutter ou React Native) é necessário implementar na camada nativa do Android e/ou iOS.

Quando em execução, o SDK vai solicitar a permissão de abertura da câmera para webview, que por sua vez vai solicitar a mesma para a aplicação nativa. É mandatório que sua aplicação nativa tenha as permissões necessárias ajustadas nos arquivos de configuração.

Nosso suporte é restrito a aplicativos desenvolvidos diretamente nas plataformas nativas Android e iOS, utilizando seus respectivos módulos nativos. No momento, não oferecemos suporte para aplicativos desenvolvidos em frameworks híbridos, como React Native, Ionic ou outras tecnologias de desenvolvimento multiplataforma.

Compatibilidade com webviews de redes sociais


O componente foi homologado nas redes sociais Instagram e Facebook no modo Liveness sem interação. O modo Liveness com interação não é compatível em webviews de aplicativos de redes sociais.

Instalando o SDK Web


Para implementar o SDK Android da plataforma Unico IDCloud ao seu aplicativo Android, siga o passo a passo listado abaixo:

1

Configurações de Content Security Policy (CSP)

O SDK Web emprega o uso de Web Workers para aprimorar a segurança e a performance. Por isso é necessário adicionar as seguintes configurações à sua Content Security Policy (CSP):

Se a sua aplicação possui uma CSP, essa configuração é obrigatória para garantir o funcionamento correto do SDK.

2

Obtendo as credenciais

  • Entre em contato com o CSs e/ou time de Onboarding.

  • Solicite a SDK Key informando os identificadores de suas aplicações. Bundle Identifier para iOS, PackageID para Android e Host para WEB.

  • Os identificadores de suas aplicações serão vinculados a SDK Key pela equipe da Unico.

  • Você recebe a sua SDK Key para implementar o UnicoConfig.

3

Embarcando as credenciais em seu projeto

  • Implemente a classe UnicoConfig em sua classe:

Método depreciado:

4

Embarcando outros arquivos em seu projeto

A tabela abaixo lista arquivos de recursos adicionais disponíveis para inclusão em seu projeto. Você deve baixa-los e incluí-los em seu projeto para realizar a captura com Prova de vida:

5

Realize o download dos arquivos de IA da SDK

Todos os arquivos adicionais devem estar em um local público e visível para a Web dentro de seu projeto.

6

Instalação

O SDK Web é disponibilizado através de um pacote npm ou cdn. Para a instalação, siga os passos abaixo de acordo com sua preferência:

Ou pelo yarn, com o comando abaixo:

Para instalar o SDK em seu projeto por meio do cdn, basta efetuar o download do arquivo abaixo e importa-lo em seu projeto.

7

Importação

Após a instalação dO SDK, basta importa-lo da maneira correta em seu projeto.

Caso tenha instalado o pacote através do npm:

Caso tenha instalado o pacote através do cdn:


Release notes

Nesta seção, você encontrará todas as atualizações do SDK Flutter


Mantenha seu SDK Flutter sempre atualizado com a última versão disponível.


  • Atualização de sdk nativas:


Atualização Crítica

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:

    • Android versão 5.29.0 release notes.


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Correção na câmera de documento, onde em alguns cenários ocorria um crash após a captura.


Versão 4.17.0 - 04/10/2024

  • Atualização de sdk nativas:


Versão 4.16.0 - 19/09/2024

  • Atualização de sdk nativas:


Versão 4.15.0 - 10/09/2024

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


Versão 4.13.0 - 22/08/2024

  • Agora, os SDKs suportam múltiplos idiomas! Além do português, é possível alternar entre as opções de inglês e espanhol no método setLocale(), oferecendo uma experiência mais personalizada para os usuários final;

  • A partir de agora, é possível definir o ambiente da SDK pela própria API pública no método setEnvironment();

  • Em casos de dúvidas, contacte o seu CSM.


Versão 4.12.0 - 20/08/2024

  • Atualização de sdk nativas:


Versão 4.11.0 - 07/08/2024

  • Atualização de sdk nativas:


Atualização Crítica

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


Atualização Crítica

  • Atualização de sdk nativas:


Atualização Crítica

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:

Versão de iOS contém o Manifesto de privacidade.


Versão 4.6.0 - 26/04/2024

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


Versão 4.5.1 - 02/04/2024

Atualização Crítica

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


Versão 4.4.0 - 14/03/2024

  • Atualização de sdk nativas:


Versão 4.3.0 - 17/01/2024

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


Versão 4.1.0 - 30/10/2023

  • Atualização de sdk nativas:


  • Atualização de sdk nativas:


  • Atualização de sdk nativas:

  • Atualização da versão mínima do SDK Dart para >= 2.15.0


  • Customização da tela de loading usando a cor do background da captura;

  • Atualização de sdk nativas:


  • Atualização do server e SDK do Smartlive com interação.


Versão 3.0.7 - 20/04/2023

  • Fix: Abertura da câmera com Smartlive com interação;

  • Fix: Incompatibilidade durante o build com ofuscação.


Versão 3.0.6 - 21/02/2023

  • Fix: Atualização bibliotecas nativas.


Versão 3.0.5 - 13/01/2023

  • Fix: Camera traseira.


Versão 3.0.4 - 13/01/2023

  • Fix: Erro build não encontrando arquivos.


Versão 3.0.3 - 13/01/2023

  • Atualização de sdk nativas:

  • Fix: Abertura de câmera ao não permitir o uso da geolocalização.


  • Atualização de sdk nativas:

  • Fix: Correção no exemplo de RG.


Versão 3.0.1 - 24/09/2022

  • Atualização da SDK e server do Smartlive com interação;

  • Fix: Correção na dependência do arquivo google-service-json.


  • Versão estável do SDK que contém a técnologia de SmartLive com interação.


Versão 3.0.0-beta.1

  • Nova versão do SDK que contém a técnologia de SmartLive com interação.


Versão 2.0.2 deprecated

  • Maior versão estável do SDK Flutter. Contém apenas captura manual e automática.


Criação de processos separados por flows

Nesta seção, você encontrará exemplos de requisições de Ciação de processos no by Unico


Requisições separadas por flows


Outras formas de fazer uma requisição (request)


Para utilizar o Postman, siga os passos:

  1. Selecione o método POST.

  2. Insira a URL https://api.cadastro.uat.unico.app/client/v1/process/.

  3. Selecione a aba Authorization.

  4. Na lista de Type, selecione Bearer Token.

  5. Insira o token obtido no campo Token com o prefixo Bearer .

  6. Selecione a aba Body e insira os dados abaixo de acordo com sua necessidade.


Android: 5.0 (API 21)

Kotlin: 1.6

Possuir a versão 9 ou superior do instalado (IDE oficial de desenvolvimento do Google);

O versionamento semântico é utilizado para numerar as versões. Para mais informações, consulte o artigo .

Além disso, o repositório onde a SDK é disponibilizada mudou e também houve alteração no nome da dependência do SDK. Você deve atualizar seus registros de acordo com o artigo .

Versão 5.33.0 - 17/04/2025

Versão 5.32.0 - 25/03/2025

Versão 5.31.0 - 10/03/2025

Versão 5.30.1 - 27/02/2025

Versão 5.30.0 - 25/02/2025

Versão 5.29.0 - 21/01/2025

Versão 5.28.0 - 09/01/2025

Versão 5.27.0 - 18/12/2024

Versão 5.26.0 - 21/11/2024

Versão 5.25.0 - 04/11/2024

Versão 5.24.0 - 17/10/2024

Versão 5.23.1 - 09/10/2024

Versão 5.23.0 - 04/10/2024

Versão 5.21.1 - 29/08/2024

Versão 5.21.0 - 28/08/2024

Versão 5.19.1 - 08/08/2024

Versão 5.19.0 - 07/08/2024

Versão 5.18.0 - 18/07/2024

Versão 5.17.0 - 29/06/2024

Versão 5.16.0 - 18/06/2024

Versão 5.15.1 - 12/06/2024

Versão 5.15.0 - 07/06/2024

Versão 5.14.3 - 04/06/2024

Versão 5.14.1 - 30/05/2024

Versão 5.14.0 - 06/05/2024

Versão 5.13.0 - 29/04/2024

Versão 5.12.0 - 22/04/2024

Versão 5.11.0 - 09/04/2024

Versão 5.10.4 - 04/04/2024

Versão 5.10.3 - 03/04/2024

Versão 5.10.2 - 28/03/2024

Versão 5.10.1 - 22/03/2024

Versão 5.10.0 - 19/03/2024

Versão 5.9.0 - 23/02/2024

Versão 5.8.0 - 26/01/2024

Versão 5.7.0 - 11/01/2024

Versão 5.6.1 - 20/12/2023

Versão 5.6.0 - 13/12/2023

Versão 5.5.2 - 12/12/2023

Versão 5.5.1 - 23/11/2023

Versão 5.4.0 - 08/11/2023

Versão 5.3.0 - 27/10/2023

Versão 5.2.0 - 16/10/2023

Versão 5.1.5 - 28/09/2023

Versão 5.1.4 - 14/09/2023

Versão 5.1.3 - 31/08/2023

Versão 5.1.2 - 17/08/2023

Versão 5.1.1 - 30/07/2023

Versão 5.1.0 - 26/07/2023

Versão 5.0.1 - 14/07/2023

Versão 5.0.0 - 21/06/2023

Versão 4.4.1 - 30/05/2023

Versão 4.4.0 - 04/05/2023

Versão 4.2.12 - 28/03/2023

Versão 4.2.11 - 24/03/2023

Versão 4.2.10 - 07/03/2023

Versão 4.2.9 - 23/02/2023

Versão 4.2.8 - 14/02/2023

Versão 4.2.7 - 13/01/2023

Versão 4.2.6 - 22/11/2022

Versão 4.2.5 - 10/11/2022

Versão 4.2.1 - 06/09/2022

Versão 4.2.0 - 12/08/2022

Versão 4.1.5 - 22/07/2022

Versão 4.1.4 - 22/07/2022

Versão 4.1.3 - 28/06/2022

Versão 4.1.0 - 14/06/2022

Versão 4.0.16 - 07/06/2022

Versão 4.0.15 - 17/05/2022

Versão 4.0.14 - 26/04/2022

Versão 4.0.13 - 07/04/2022

Versão 4.0.12 - 05/04/2022

Versão 4.0.11 - 30/03/2022

Versão 4.0.10 - 25/03/2022

Versão 4.0.9 - 21/03/2022

Versão 4.0.8 - 11/03/2022

Versão 4.0.7 - 07/03/2022

Versão 4.0.6 - 01/03/2022

Versão 4.0.5 - 17/02/2022

Versão 4.0.4 - 16/02/2022

Versão 4.0.3 - 10/02/2022

Versão 4.0.2 - 09/02/2022

Versão 4.0.1 - 04/02/2022

Versão 4.0.0 - 02/02/2022

Versão 3.0.0

Versão 2.0.5

Versão 2.0.4

Versão 2.0.3

Versão 2.0.0-beta.5

Versão 2.0.0-beta.4

Versão 2.0.0-beta.2

Versão 1.2.2

Versão 1.2.1

Versão 1.2.0

Versão 1.1.19.5

Versão 1.1.19.4

Versão 1.1.19.2

Versão 1.1.19

Versão 1.1.18.1

Versão 1.1.18

Versão 1.1.13

Versão 1.1.12

Versão 1.1.11

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Possuir a versão 16.0 ou superior do instalado (IDE oficial de desenvolvimento da Apple);

O componente de captura disponibilizado por meio do SDK iOS é compatível com todos os dispositivos que possuam iOS 12 ou versões mais recentes. Você pode conferir a lista com esses dispositivos nos oficiais da Apple.

O CocoaPods é um gerenciador de dependências para projetos Cocoa, para instruções de uso e instalação visite a documentação do oficial do . Para integrar o SDK iOS em seu projeto Xcode usando CocoaPods, siga as orientações abaixo:

Pronto. Finalizada a instalação do SDK, siga para a implementação lendo o material a seguir:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

A partir da versão 4.4.x do SDK, o Unico começou a usar seu próprio repositório Maven para distribuir o Android SDK e alterou o nome da dependência do SDK, além de ajustes nas regras do ProGuard e do DexGuard para clientes que utilizam a biblioteca da GuardSquare conforme descrito na seção de acima.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Objeto ErrorBio

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Android de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método recebe um parâmetro do tipo ErrorBio que contem detalhes do erro. Saiba mais sobre o tipo ErrorBio na seção de .

Tanto o atributo encrypted quanto o atributo base64 podem ser enviados na chamada das APIs REST do .

Se for necessário converter o base64 para bitmap, a maneira padrão não funciona para o Android. É necessário realizar o split a partir da vírgula(,) para que funcione. Se quiser saber mais, leia o artigo .

Saiba maisobre os tipos de ErrorBio na seção de do SDK.

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o base64 gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Android de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método recebe um parâmetro do tipo ErrorBio que contem detalhes do erro. Saiba mais sobre o tipo ErrorBio na seção de .

Para seguir com a abertura da câmera, primeiro é necessário prepará-la utilizando o método prepareCamera. Este método recebe como parâmetro a implementação da classe CameraListener, a classe ou o JSON com as credenciais, gerado .

O atributo encrypted deve ser enviado na chamada das APIs REST do .

Saiba mais sobre os tipos de ErrorBio na seção de do SDK.

Se for necessário converter o base64 para bitmap, a maneira padrão não funciona para o Android. É necessário realizar o split a partir da vírgula(,) para que funcione. Se quiser saber mais, leia o artigo: .

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o encrypted gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Objeto ErrorBio

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Fonte: , , .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK iOS de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método recebe um parâmetro do tipo ErrorBio que contem detalhes do erro. Saiba mais sobre o tipo ErrorBio no artigo de deste SDK.

Tanto o atributo encrypted quanto o atributo base64 podem ser enviados na chamada das APIs REST do .

Se for necessário converter o base64 para bitmap, a maneira padrão não funciona para o Android. É necessário realizar o split a partir da vírgula(,) para que funcione. Se quiser saber mais, leia o artigo .

Saiba mais sobre os tipos de ErrorBio na seção de do SDK.

O tipo ErrorPrepare é uma extensão de ErrorBio contendo assim todas as suas propriedades. Saiba mais sobre o tipo ErrorBio na seção de do SDK.

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o base64 gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK iOS de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método receberá um parâmetro do tipo ErrorBio que contem detalhes do erro. Saiba mais sobre o tipo ErrorBio no artigo de deste SDK.

O atributo encrypted deve ser enviado na chamada das APIs REST do .

Caso queira converter o base64 para bitmap, a maneira padrão não funciona para o iOS. É necessário realizar o split a partir da vírgula(,) para que funcione. Caso queira saber mais, leia o seguinte artigo: .

Saiba mais sobre os tipos de ErrorBio na seção de do SDK.

O tipo ErrorPrepare é uma extensão de ErrorBio contendo assim todas as suas propriedades. Saiba mais sobre o tipo ErrorBio na seção de do SDK.

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o encrypted gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O versionamento semântico é utilizado para numerar as versões. Para mais informações, consulte o artigo .

Versão 2.16.5 - 10/12/2024

Versão 2.16.4 - 16/10/2024

Versão 2.16.3 - 02/10/2024

Versão 2.16.2 - 18/09/2024

Versão 2.16.1 - 06/09/2024

Versão 2.16.0 - 12/08/2024

Versão 2.15.6 - 06/08/2024

Versão 2.15.5 - 25/07/2024

Versão 2.15.4 - 19/07/2024

Versão 2.15.3 - 10/07/2024

Versão 2.15.2 - 29/06/2024

Versão 2.15.1 - 24/06/2024

Versão 2.15.0 - 19/06/2024

Versão 2.14.2 - 06/06/2024

Versão 2.14.1 - 04/06/2024

Versão 2.14.0 - 30/05/2024

Versão 2.13.3 - 29/05/2024

Versão 2.13.2 - 28/05/2024

Versão 2.13.1 - 24/05/2024

Versão 2.13.0 - 17/05/2024

Versão 2.12.1 - 02/05/2024

Versão 2.12.0 - 25/04/2024

Versão 2.11.0 - 23/04/2024

Versão 2.10.0 - 08/04/2024

Versão 2.9.2 - 03/04/2024

Versão 2.9.1 - 26/03/2024

Versão 2.9.0 - 18/03/2024

Visualize a lista completa de todos os erros em ;

Versão 2.8.0 - 22/02/2024

Habilitamos a customização dos textos da UI do liveness interativo via configuração remota;

Versão 2.7.0 - 07/02/2024

Remoção do Bitcode das distribuições binárias do unicocheck-ios. A partir do Xcode 14, o bitcode não é mais necessário para aplicativos e a App Store não aceita mais envios com bitcode. ;

Versão 2.6.2 - 07/02/2024

Versão 2.6.1 - 11/01/2024

Versão 2.6.0 - 13/12/2023

Versão 2.5.0 - 11/12/2023

Versão 2.4.2 - 17/11/2023

Versão 2.4.1 - 13/11/2023

Versão 2.4.0 - 16/10/2023

Versão 2.3.24 - 01/09/2023

Versão 2.3.23 - 16/08/2023

Versão 2.3.22 - 30/07/2023

Versão 2.3.21 - 20/07/2023

Versão 2.3.20 - 20/06/2023

Versão 2.3.19 - 31/05/2023

Versão 2.3.18 - 04/05/2023

Versão 2.3.17 - 28/04/2023

Versão 2.3.16 - 19/04/2023

Versão 2.3.15 - 06/04/2023

Versão 2.3.14 - 29/03/2023

Versão 2.3.13 - 28/03/2023

Versão 2.3.12 - 23/02/2023

Versão 2.3.11 - 03/02/2023

Versão 2.3.10 - 12/12/2022

Versão 2.3.9 - 22/11/2022

Versão 2.3.8 - 20/10/2022

Versão 2.3.7 - 12/08/2022

Versão 2.3.6 - 22/07/2022

Versão 2.3.5 - 29/06/2022

Versão 2.3.4 - 22/06/2022

Versão 2.3.3 - 08/06/2022

Versão 2.3.2 - 23/05/2022

Versão 2.3.1 - 17/05/2022

Versão 2.3.0 - 25/04/2022

Versão 2.2.1 - 06/04/2022

Versão 2.1.3 - 24/03/2022

Versão 2.1.2 - 18/03/2022

Versão 2.1.0 - 10/03/2022

Versão 2.0.5 - 23/02/2022

Versão 2.0.4 - 15/02/2022

Versão 2.0.2

Versão 2.0.1

Versão 2.0.0

Versão 1.2.7

Versão 1.2.4

Versão 1.2.3

Versão 1.2.1.1

Versão 1.2.1

Versão Beta 1.2.0

Versão 1.1.5

Versão 1.1.4

Versão 1.1.3

Versão 1.0.1

Versão 1.0.0

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Fonte: , , .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Método
Descrição

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Flutter de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método recebe um parâmetro do tipo UnicoError que contem detalhes do erro. Saiba mais sobre o tipo UnicoError na seção do SDK.

Tanto o atributo encrypted quanto o atributo base64 podem ser enviados na chamada das APIs REST do .

Se for necessário converter o base64 para bitmap, a maneira padrão não funciona para o Android. É necessário realizar o split a partir da vírgula(,) para que funcione. Se quiser saber mais, leia o artigo .

Saiba mais sobre os tipos de ErrorBio na seção de do SDK.

Parâmetro
Descrição

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o base64 gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Método
Descrição

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Flutter de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Ao ser invocado, o método recebe um parâmetro do tipo UnicoError que contem detalhes do erro. Saiba mais sobre o tipo UnicoError no documento de do SDK.

O atributo encrypted deve ser enviado na chamada das APIs REST do .

Se for necessário converter o base64 para bitmap, a maneira padrão não funciona para o Android. É necessário realizar o split a partir da vírgula(,) para que funcione. Se quiser saber mais, leia o artigo: .

Saiba mais sobre os tipos de ErrorBio na seção de do SDK.

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o encrypted gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Objeto UnicoError

Nome do método
Descrição
Código
Descrição

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Sistema Operacional
Chrome
Firefox
Safari
Samsung Internet
Opera
Edge

É recomendado o uso de webviews baseadas no Chromium com algumas customizações para melhor funcionamento do JavaScript. É possível encontrar um exemplo de implementação através das nossas .

O iOS fornece duas maneiras de se utilizar Webviews em aplicações, são elas: WKWebView e SFSafariViewController. Recomendamos o uso do SFSafariViewController para uma melhor compatibilidade com os recursos do DOM. É possível encontrar um exemplo de implementação através das nossas .

Release do SDK
Release da FaceTec (Clique na numeração para fazer o download dos arquivos adicionais)

Para realizar o download do arquivo de AI do Unico Check SDK Web clique .

Instalação através do pacote NPM

Para instalar o SDK em seu projeto através do , basta executar o comando abaixo:

Instalação através do CDN

da versão 3.20.1.

Pronto. Finalizada a instalação do SDK, siga para a implementação lendo o material a seguir:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O versionamento semântico é utilizado para numerar as versões. Para mais informações, consulte o artigo .

Versão 4.27.0 - 17/04/2025

Android versão 5.33.0 .

iOS versão 2.16.12 .

Versão 4.26.0 - 26/03/2025

Android versão 5.32.0 .

iOS versão 2.16.11 .

Versão 4.25.0 - 13/03/2025

Android versão 5.31.0 .

iOS versão 2.16.10 .

Versão 4.24.0 - 27/02/2025

Android versão 5.30.1 .

iOS versão 2.16.9 .

Versão 4.23.0 - 22/01/2025

iOS versão 2.16.8.

Versão 4.22.0 - 14/01/2025

Android versão 5.28.0 .

iOS versão 2.16.7 .

Versão 4.21.0 - 18/12/2024

Android versão 5.27.0 .

iOS versão 2.16.5 .

Versão 4.20.0 - 05/11/2024

Android versão 5.25.0 .

Versão 4.19.0 - 18/10/2024

Android versão 5.24.0 ;

iOS versão 2.16.4 .

Versão 4.18.0 - 09/10/2024

Android versão 5.23.0 .

iOS versão 2.16.3 .

Android versão 5.22.0 ;

iOS versão 2.16.2 .

iOS versão 2.16.1 .

Versão 4.14.0 - 04/09/2024

Android versão 5.21.1 .

Android versão 5.20.0 ;

iOS versão 2.16.0 .

Android versão 5.19.0 ;

iOS versão 2.15.6 .

Versão 4.10.0 - 01/07/2024

Android versão 5.17.0 ;

iOS versão 2.15.2 .

Versão 4.9.0 - 24/06/2024

Android versão 5.16.0 ;

iOS versão 2.15.1 .

Versão 4.8.3 - 13/06/2024

Android versão 5.15.1 .

Versão 4.8.2 - 07/06/2024

Android versão 5.15.0 ;

iOS versão 2.14.2 .

Versão 4.8.1 - 30/05/2024

Android versão 5.14.1 ;

iOS versão 2.14.0 .

Versão 4.8.0 - 02/05/2024

Android versão 5.13.0 ;

iOS versão 2.12.1 .

Versão 4.7.0 - 26/04/2024

Android versão 5.12.0 ;

iOS versão 2.12.0 .

iOS versão 2.11.0 .

Versão 4.5.2 - 08/04/2024

Android versão 5.11.0-rc2 ;

iOS versão 2.9.3-beta .

Android versão 5.11.0-rc ;

iOS versão 2.9.1 .

Versão 4.5.0 - 26/03/2024

iOS versão 2.9.0 .

Android versão 5.9.0 ;

iOS versão 2.8.0 .

Android versão 5.7.0 ;

iOS versão 2.6.1 .

Versão 4.2.0 - 21/12/2024

Android versão 5.6.1 ;

iOS versão 2.6.0 .

Android versão 5.3.0 ;

iOS versão 2.4.0 .

Versão 4.0.1 - 18/08/2023

Android versão 5.3.0 ;

iOS versão 2.4.0 .

Versão 4.0.0 -23/06/2023

Android versão 5.0.0 ;

iOS versão 2.3.20 .

Versão 3.0.10 - 16/05/2023

Android versão 4.4.0 ;

iOS versão 2.3.18 .

Versão 3.0.9 - 01/05/2023

Android versão 4.2.7 ;

iOS versão 2.3.10 .

Versão 3.0.2 - 22/11/2022

Android versão 4.2.6 ;

iOS versão 2.3.9 .

Versão 3.0.0 - 29/06/2022

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

​
​
Android Studio
Visão Geral
Atualização do SDK versão 4.3.x
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Central de Ajuda
canais de suporte
Cocoapods
Guia de uso e integração
​
Central de Ajuda
Ofuscação de código
​
Central de Ajuda
​
​
Central de Ajuda
​
Central de Ajuda
Personalização Android
tratamento de erros
by Client
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
tratamento de erros
CreateProcess do by Client
​
Central de Ajuda
Personalização Android
tratamento de erros
nessa etapa
by Client
tratamento de erros
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
CreateProcess do by Client
​
Central de Ajuda
​
​
Central de Ajuda
Bitrise
Xcode 16 release notes
Stackoverflow
​
Central de Ajuda
Personalização iOS
tratamento de erros
by Client
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
tratamento de erros
tratamento de erros
CreateProcess do by Client
​
Central de Ajuda
Personalização iOS
tratamento de erros
by Client
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
tratamento de erros
tratamento de erros
CreateProcess do by Client
​
Central de Ajuda
Visão Geral
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
lista de códigos de erro
​
m
​
Xcode 14 Release Notes
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Central de Ajuda

Prova de vida

Verificação de Identidade

Alerta de comportamento

Score de risco

Validação (1:1)

Reaproveitamento e captura de documentos

Assinatura eletrônica

+Retorno de similaridade da Serpro

​
Central de Ajuda
-keep class kotlin.coroutines.**
-keep class kotlinx.coroutines.**

-keep class com.facetec.sdk.** { *; }
-keep class com.acesso.acessobio_android.** { *; }
-keep class io.unico.** { *; }

-keep class br.com.makrosystems.haven.** { *; }
-keep class HavenSDK.**{ *; }
-keep class HavenSDK** { *; }
-keep class kotlin.coroutines.**
-keep class kotlinx.coroutines.**

-keep class com.facetec.sdk.** { *; }
-keep class com.acesso.acessobio_android.** { *; }
-keep class io.unico.** { *; }

-keep class br.com.makrosystems.haven.** { *; }
-keep class HavenSDK.**{ *; }
-keep class HavenSDK** { *; }
bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
  def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
    framework_path = File.join(Dir.pwd, framework_relative_path)
    command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
    puts "Stripping bitcode: #{command}"
    system(command)
  end

  framework_paths = [
    "Pods/unicocheck-ios/DeviceProfiling.xcframework/ios-arm64/DeviceProfiling.framework/DeviceProfiling",
    "Pods/unicocheck-ios/UnicoSdkLogger.xcframework/ios-arm64/UnicoSdkLogger.framework/UnicoSdkLogger"
  ]

  framework_paths.each do |framework_relative_path|
    strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
  end
post_install do |installer|
bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
  def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
    framework_path = File.join(Dir.pwd, framework_relative_path)
    command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
    puts "Stripping bitcode: #{command}"
    system(command)
  end

  framework_paths = [
    "Pods/unicocheck-ios/DeviceProfiling.xcframework/ios-arm64/DeviceProfiling.framework/DeviceProfiling",
    "Pods/unicocheck-ios/UnicoSdkLogger.xcframework/ios-arm64/UnicoSdkLogger.framework/UnicoSdkLogger"
  ]

  framework_paths.each do |framework_relative_path|
    strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
  end
unicoCheck.setLocale(LocaleTypes.EN_US);

getColorSilhouetteError()

Método utilizado para customizar a cor de erro da silhueta

getColorSilhouetteNeutral()

Método utilizado para customizar a cor neutra da silhueta

getColorBackground()

Método utilizado para customizar a cor de fundo da silhueta

getColorBoxMessage()

Método utilizado para customizar a cor de fundo da mensagem

getColorTextMessage()

Método utilizado para customizar a cor de texto da mensagem

getColorBackgroundPopupError()

Método utilizado para customizar a cor de fundo do popup

getColorBackgroundButtonPopupErrorgetColorTextPopupError()

Método utilizado para customizar a cor de texto e ícones do popup

getColorBackgroundButtonPopupError()

Método utilizado para customizar a cor de fundo do botão do popup

getColorTextButtonPopupError()

Método utilizado para customizar a cor de texto do botão do popup

getColorBackgroundTakePictureButton()

Método utilizado para customizar a cor de fundo do botão de tirar foto manualmente

getColorIconTakePictureButton()

Método utilizado para customizar a cor de ícone do botão de tirar foto manualmente

getColorBackgroundBottomDocument()

Método utilizado para customizar a cor de fundo do box na captura de documentos

getColorTextBottomDocument()

Método utilizado para customizar a cor de texto do box na captura de documentos

getColorProgressBar()

Método utilizado para customizar a cor da barra de progresso na validação da imagem

getColorCancelButtonIcon()

Método utilizado para customizar a cor do ícone de cancelar a captura no canto superior esquerdo

<resources>
    <color name="unico_color_button_cancel">YOUR COLOR</color>
</resources>
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {

    late UnicoCheckBuilder _unicoCheck;

    /// Unico callbacks
      @override
      void onErrorUnico(UnicoError error) {}

      @override
      void onUserClosedCameraManually() {}

      @override
      void onSystemChangedTypeCameraTimeoutFaceInference() {}

      @override
      void onSystemClosedCameraTimeoutSession() {}

      /// Document callbacks
      @override
      void onSuccessDocument(ResultCamera resultCamera) { }

      @override
      void onErrorDocument(UnicoError error) { }

}
public void onSuccessDocument(ResultCamera resultCamera) { }
public void onErrorDocument(UnicoError error) { }

DocumentCameraTypes.CPF

Frame para captura da frente do CPF

DocumentCameraTypes.CNH

Frame para captura da CNH aberta

DocumentCameraTypes.CNH_FRENTE

Frame para captura da frente da CNH

DocumentCameraTypes.CNH_VERSO

Frame para captura do verso da CNH

DocumentCameraTypes.RG_FRENTE

Frame para captura da frente do RG

DocumentCameraTypes.RG_VERSO

Frame para captura do verso do RG

DocumentCameraTypes.OUTROS("descrição")

Frame para captura de qualquer outro documento

 _unicoCheck.build().openCameraDocument(
        jsonFileName: androidJsonFileName,
        documentType: DocumentType.CNH,
        listener: this);
[unicoCheck setLocale:EN_US];
unicoCheck.setLocale(.EN_US);

getColorSilhouetteSuccess()

Método utilizado para customizar a cor de sucesso da silhueta

getColorSilhouetteError()

Método utilizado para customizar a cor de erro da silhueta

getColorBackground()

Método utilizado para customizar a cor de fundo da silhueta

getColorBoxMessage()

Método utilizado para customizar a cor de fundo da mensagem

getColorTextMessage()

Método utilizado para customizar a cor de texto da mensagem

getColorTextPopupError()

Método utilizado para customizar a cor de texto e ícones do popup

getColorBackgroundPopupError()

Método utilizado para customizar a cor de fundo do popup

getColorBackgroundButtonPopupError()

Método utilizado para customizar a cor de fundo do botão do popup

getColorTextButtonPopupError()

Método utilizado para customizar a cor de texto do botão do popup

getColorBackgroundTakePictureButton()

Método utilizado para customizar a cor de fundo do botão de tirar foto manualmente

getColorIconTakePictureButton()

Método utilizado para customizar a cor de ícone do botão de tirar foto manualmente

getColorBackgroundBottomDocument()

Método utilizado para customizar a cor de fundo do box na captura de documentos

getColorTextBottomDocument()

Método utilizado para customizar a cor de texto do box na captura de documentos

getImageIconPopupError()

Método utilizado para customizar o ícone do Popup de erro, exibido quando a face é posicionada de forma incorreta no frame de captura.

getProgressBarColor() (opcional)

Método opcional utilizado para customizar a cor do ícone de loading da camera Liveness com interação. Caso não implementado getColorBoxMessage() é ultilizado.

getCancelButtonIconColor() (opcional)

Método opcional utilizado para customizar a cor do ícone de cancelar da camera Liveness com interação. Caso não implementado getColorBackgroundTakePictureButton() é ultilizado.

.h:
#import "AcessoBioThemeDelegate.h"

@interface ViewController : UIViewController  {

@end

.m:
#import "ViewController.h"
#import <AcessoBio/AcessoBio.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    unicoCheck = [[AcessoBioManager alloc]initWithViewController:self];
}

- (id)getColorBackground {
    code
}

- (id)getColorBackgroundBottomDocument {
    code
}

- (id)getColorBackgroundButtonPopupError {
    code
}

- (id)getColorBackgroundPopupError {
    code
}

- (id)getColorBackgroundTakePictureButton {
    code
}

- (id)getColorBoxMessage {
    code
}

- (id)getColorIconTakePictureButton {
    code
}

- (id)getColorSilhouetteError {
    code
}

- (id)getColorSilhouetteSuccess {
    code
}

- (id)getColorTextBottomDocument {
    code
}

- (id)getColorTextButtonPopupError {
    code
}

- (id)getColorTextMessage {
    code
}

- (id)getColorTextPopupError {
    code
}

- (id) getProgressBarColor {
    code
}

- (id) getCancelButtonIconColor {
    code
}

@end
import UIKit
import AcessoBio

class ViewController: UIViewController, AcessoBioManagerDelegate, AcessoBioThemeDelegate {

    var unicoCheck: AcessoBioManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        unicoCheck = AcessoBioManager(viewController: self)
        unicoCheck.setTheme(self)
    }
 

    func getColorBackground() -> Any! {
        code
    }

    func getColorBoxMessage() -> Any! {
        code
    }

    func getColorTextMessage() -> Any! {
        code
    }

    func getColorBackgroundPopupError() -> Any! {
        code
    }

    func getColorTextPopupError() -> Any! {
        code
    }

    func getColorBackgroundButtonPopupError() -> Any! {
        code
    }

    func getColorTextButtonPopupError() -> Any! {
        code
    }

    func getColorBackgroundTakePictureButton() -> Any! {
        code
    }

    func getColorIconTakePictureButton() -> Any! {
        code
    }

    func getColorBackgroundBottomDocument() -> Any! {
        code
    }

    func getColorTextBottomDocument() -> Any! {
        code
    }

    func getColorSilhouetteSuccess() -> Any! {
        code
    }

    func getColorSilhouetteError() -> Any! {
        code
    } 

    func getProgressBarColor() -> Any! {
        code
    }

    func getCancelButtonIconColor() -> Any! {
        code
    }
} 
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {

    late UnicoCheckBuilder _unicoCheck;

    
      @override
      void onErrorUnico(UnicoError error) {}

      @override
      void onUserClosedCameraManually() {}

      @override
      void onSystemChangedTypeCameraTimeoutFaceInference() {}

      @override
      void onSystemClosedCameraTimeoutSession() {}
}
 _unicoCheck.setEnvironment(unicoEnvironment: UnicoEnvironment.UAT);
UnicoCheckCameraOpener _opener = new UnicoCheck (this)
    .setAutoCapture(autoCapture: true)
    .setSmartFrame(smartFrame: true)
    .build();
@override
void onSuccessSelfie(ResultCamera result) { }
@override
void onErrorSelfie(UnicoError error) { }
_opener.openCameraSelfie(jsonFileName: androidJsonFileName, listener: this)

getCode()

Método utilizado para obter o código de erro ocorrido

getDescription()

Método utilizado para obter a descrição de erro ocorrido

73001

Context invalid

73002

Did not grant permission to open camera

73003

The lest API is 21(LOLLIPOP)

73004

Could not find implementation interface callback iAcessoBioSelfie

73005

Could not find implementation interface callback iAcessoBioDocument

73006

Unable to open camera on emulators

73100

Unable to connect to internet

73200

Please inform the json file name

73202

Unable to parse json file

73300

Unable to get unico authentication object

73301

Unable to parse object

73302

Could not find the unico token

73303

Current host is not registered

73400

Could not initialize camera

73500

Unable to get session token, service response error

73501

Unable to parce object

73502

Could not get session token

73701

Could not find active liveness import

73702

Unable to initialize active liveness in production mode

73703

Unable to get active liveness session

73704

The user pressed the cancel button and did not complete the Session.

73705

The Session was not performed successfully and a FaceScan was not generated. In general, other statuses will be sent to the

73706

The camera access is prevented because either the user has explicitly denied permission or the user's device is configured to

73707

The Session was cancelled due to the app being terminated, put to sleep, an OS notification, or the app was placed in the

73708

The Session was cancelled because device is in landscape mode. The user experience of devices in these orientations is poor

73709

The Session was cancelled because device is in reverse portrait mode. The user experience of devices in these orientations is

73710

The Session was cancelled because the user was unable to complete a Session in the default allotted time or the timeout set

73712

The Session was cancelled due to memory pressure.

73712

The Session was cancelled because your App is not in production and requires a network connection.

73713

The Session was cancelled because your key needs to be validated again.

73714

The Session was cancelled because the developer-configured encryption key was not valid.

73715

The Session was cancelled because not all guidance images were configured.

73716

The Session was cancelled because SDK was unable to start the camera on this device.

73717

The Session was cancelled because the user was in a locked out state.

73718

The Session was cancelled because of an unknown and unexpected error. SDK leverages a variety of iOS APIs including camera,

73719

The Session cancelled because user pressed the Get Ready screen subtext message. Note: This functionality is not available by

73800

Could not build encrypted key

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.webkit.PermissionRequest" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera2.full" />
<uses-feature android:name="android.hardware.camera2.autofocus" />
info.plist
<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Mensagem da cliente</string>
<meta
  http-equiv="Content-Security-Policy"
  content="
      script-src 'self' 'unsafe-eval' *.googleapis.com *.acesso.io *.unico.run *.unico.io *.unico.app *.sentry.io; 
      worker-src 'self' blob:; 
      child-src 'self' blob:;
      style-src 'self' 'unsafe-inline' *.googleapis.com *.acesso.io *.unico.run *.unico.io *.unico.app;
      font-src 'self' https://fonts.gstatic.com *.acesso.io *.unico.run *.unico.io *.unico.app;
      img-src 'self' data: blob: *.acesso.io *.unico.run *.unico.io *.unico.app;
      media-src 'self' data: *.acesso.io *.unico.run *.unico.io *.unico.app;
      script-src-elem 'self' 'unsafe-inline' blob: *.googleapis.com *.acesso.io *.unico.run *.unico.io *.unico.app;
      connect-src *.googleapis.com *.acesso.io *.unico.run *.unico.io *.unico.app *.sentry.io"
/>
import { UnicoConfig } from "unico-webframe"

const config = new UnicoConfig()
  .setHostname("<YOUR_HOSTNAME>")
  .setHostKey("<YOUR_HOST_KEY>");
import { UnicoConfig } from "unico-webframe"

const config = new UnicoConfig()
  .setProjectNumber("<YOUR_PROJECT_NUMBER>")
  .setProjectId("<YOUR_PROJECT_ID>")
  .setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
  .setHostname("<YOUR_HOSTNAME>")
  .setHostInfo("<YOUR_HOST_INFO>")
npm install unico-webframe
yarn add unico-webframe
import { UnicoCheckBuilder, SelfieCameraTypes, UnicoThemeBuilder, DocumentCameraTypes, UnicoConfig, LocaleTypes } from 'unico-webframe'
import { UnicoCheckBuilder, SelfieCameraTypes, UnicoThemeBuilder, DocumentCameraTypes, UnicoConfig, LocaleTypes } from 'UnicoCheckBuilder.min.js'
{
  "callbackUri": "/path/to/url",
  "flow": "idlive", //este é um exemplo de flow
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "73689290074",
    "friendlyName": "Luke Skywalker",
    "phone": "5511974749090",
    "email": "luke@unico.io",
    "notifications":
    [
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
      },
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_SMS"
      }
    ]
  },
  "purpose": "biometryonboarding",
  "expiresIn": "3600s"
}
{
  "callbackUri": "/path/to/url",
  "flow": "idunicosign", //este é um exemplo de flow
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "73689290074",
    "friendlyName": "Luke Skywalker",
    "phone": "5511974749090",
    "email": "luke@unico.io",
    "notifications": 
    [
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
      },
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_SMS"
      }
    ]
  },
  "purpose": "biometryonboarding",
  "expiresIn": "3600s",
  "payload": [
    {
      "envelopePayload": {
        "documents": [
          {
            "documentName": "teste",
            "fileContents": "JVBERi0xLjMNCiXi48/[...]DKJSVFT0YNCg=="
          }
        ]
      }
    }
  ]
}
{
  "callbackUri": "/path/to/url",
  "flow": "idtoken", //este é um exemplo de flow
  "bioTokenId": "339f9225-6f09-4303-9688-bf35944787e1",
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "73689290074"
    "friendlyName": "Luke Skywalker",
    "phone": "5511974749090",
    "email": "luke@unico.io",
    "notifications": 
    [
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
      },
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_SMS"
      }
    ]
  },
  "purpose": "biometryonboarding",
  "expiresIn": "3600s"
}
{
  "callbackUri": "/path/to/url",
  "flow": "idtokensign", //este é um exemplo de flow
  "bioTokenId": "339f9225-6f09-4303-9688-bf35944787e1",
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "73689290074"
    "friendlyName": "Luke Skywalker",
    "phone": "5511974749090",
    "email": "luke@unico.io",
    "notifications": 
    [
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
      },
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_SMS"
      }
    ]
  },
  "purpose": "biometryonboarding",
  "expiresIn": "3600s",
  "payload": [
    {
      "envelopePayload": {
        "documents": [
          {
            "documentName": "teste",
            "fileContents": "JVBERi0xLjMNCiXi48/[...]DKJSVFT0YNCg=="
          }
        ]
      }
    }
  ]
curl -X 'POST' \
  'https://api.cadastro.uat.unico.app/client/v1/process/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer {{TOKEN}}'
  -d '{
    "callbackUri": "/",
    "flow": "id",
    "person": {
        "duiType": "DUI_TYPE_BR_CPF",
        "duiValue": "73689290074",
    "friendlyName": "John Doe"
    },
    "purpose": "creditprocess"
}'
{
  "callbackUri": "/paht/callback-url",
  "flow": "id",
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "73689290074",
    "friendlyName": "John Doe"
  },
  "purpose": "creditprocess"
}
const axios = require("axios");

const apiUrl = "https://api.cadastro.uat.unico.app/client/v1/process/";
const token =  "<YOUR_TOKEN_HERE>";

const requestData = {
  callbackUri: "/path/to/url",
  flow: "id",
  person: {
    duiType: "DUI_TYPE_BR_CPF",
    duiValue: "73689290074",
    friendlyName: "John Doe",
  },
  purpose: "creditprocess",
};

const headers = {
  "Content-Type": "application/json",
  Authorization: `Bearer ${token}`,
  accept: "application/json",
};

axios
  .post(apiUrl, requestData, { headers })
  .then((response) => {
    console.log("Resposta da API:", response.data);
  })
  .catch((error) => {
    console.error("Erro:", error);
  });
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String apiUrl = "https://api.cadastro.uat.unico.app/client/v1/process/";
        String token = "<YOUR_TOKEN_HERE>";

        // Crie o corpo da solicitação em formato JSON
        String requestBody = "{\"callbackUri\":\"/\",\"flow\":\"id\",\"person\":{\"duiType\":\"DUI_TYPE_BR_CPF\",\"duiValue\":\"73689290074\"},\"purpose\":\"creditprocess\"}";

        // Configure os cabeçalhos da solicitação
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");
        headers.put("Authorization", "Bearer " + token);
        headers.put("accept", "application/json");

        // Crie a instância do HttpClient
        HttpClient httpClient = HttpClient.newBuilder().build();

        // Crie a solicitação HTTP POST
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(apiUrl))
                .headers(headers.entrySet().stream()
                        .map(e -> e.getKey() + ":" + e.getValue())
                        .toArray(String[]::new))
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        try {
            // Envie a solicitação e obtenha a resposta
            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());

            // Exiba a resposta da API
            System.out.println("Status da resposta: " + response.statusCode());
            System.out.println("Corpo da resposta: " + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string apiUrl = "https://api.cadastro.uat.unico.app/client/v1/process/";
        string token = "<YOUR_TOKEN_HERE>";

        // Crie o corpo da solicitação em formato JSON
        string requestBody = "{\"callbackUri\":\"/\",\"flow\":\"id\",\"person\":{\"duiType\":\"DUI_TYPE_BR_CPF\",\"duiValue\":\"73689290074\"},\"purpose\":\"creditprocess\"}";

        // Configure os cabeçalhos da solicitação
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Content-Type", "application/json");
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
        client.DefaultRequestHeaders.Add("accept", "application/json");

        try
        {
            // Envie a solicitação HTTP POST
            HttpResponseMessage response = await client.PostAsync(apiUrl, new StringContent(requestBody, Encoding.UTF8, "application/json"));

            // Verifique o status da resposta
            if (response.IsSuccessStatusCode)
            {
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Status da resposta: " + response.StatusCode);
                Console.WriteLine("Corpo da resposta: " + responseBody);
            }
            else
            {
                Console.WriteLine("Erro na solicitação. Status da resposta: " + response.StatusCode);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Erro: " + e.Message);
        }
    }
}
package main

import (
    "bytes"
    "fmt"
    "net/http"
)

func main() {
    apiURL := "https://api.cadastro.uat.unico.app/client/v1/process/"
    token := "<YOUR_TOKEN_HERE>";

    // Crie o corpo da solicitação em formato JSON
    requestBody := []byte(`{
        "callbackUri": "/path/to/url",
        "flow": "id",
        "person": {
            "duiType": "DUI_TYPE_BR_CPF",
            "duiValue": "73689290074"
        },
        "purpose": "creditprocess"
    }`)

    // Crie um cliente HTTP
    client := &http.Client{}

    // Crie uma solicitação HTTP POST
    req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(requestBody))
    if err != nil {
        fmt.Println("Erro ao criar a solicitação HTTP:", err)
        return
    }

    // Defina os cabeçalhos da solicitação
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+token)
    req.Header.Set("accept", "application/json")

    // Faça a solicitação HTTP
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Erro ao fazer a solicitação HTTP:", err)
        return
    }
    defer resp.Body.Close()

    // Verifique o status da resposta
    if resp.StatusCode == http.StatusOK {
        // Leitura do corpo da resposta
        var responseBody []byte
        _, err := resp.Body.Read(responseBody)
        if err != nil {
            fmt.Println("Erro ao ler o corpo da resposta:", err)
            return
        }

        fmt.Println("Status da resposta:", resp.Status)
        fmt.Println("Corpo da resposta:", string(responseBody))
    } else {
        fmt.Println("Erro na solicitação. Status da resposta:", resp.Status)
    }
}
LogoGuia de uso e integração | Unico IDCloud - DevCenter
LogoMeios de Integração | IDCloud - DevCenter

FAQs

Nesta seção, você encontrará todos os FAQs da plataforma Unico IDCloud

LogoGuia de uso e integração | Unico IDCloud - DevCenter
code
message
Descrição

3

process id is invalid

Quando o id de processo é inválido.

message
Descrição

Jwt header is an invalid JSON

Quando o access-token utilizado contém caracteres errados.

Jwt is expired

Quando o access-token utilizado expirou

code
message
Descrição

7

no permission

Quando a conta de serviço não possui a permissão para obter a selfie

code
message
Descrição

5

error getting process: rpc error: code = NotFound desc = process not found

Quando o id do processo não foi encontrado

Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

code
message
Descrição

99999

Internal failure! Try again later

Quando há algum erro interno.

code
message
Descrição

3

process id is invalid

Quando o id de processo é inválido.

message
Descrição

Jwt header is an invalid JSON

Quando o access-token utilizado contém caracteres errados.

Jwt is expired

Quando o access-token utilizado expirou

code
message
Descrição

7

no permission

Quando a conta de serviço não possui a permissão para obter a selfie

code
message
Descrição

5

error getting process: rpc error: code = NotFound desc = process not found

Quando o id do processo não foi encontrado

Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

code
message
Descrição

99999

Internal failure! Try again later

Quando há algum erro interno.

Xcode
Bitrise
Xcode 16 release notes
Stackoverflow
​
Central de Ajuda
​
Central de Ajuda
Personalização Flutter
tratamento de erros
by Client
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
tratamento de erros
CreateProcess do by Client
​
Central de Ajuda
​
Central de Ajuda
Personalização Flutter
tratamento de erros
by Client
How to convert a Base64 string into a Bitmap image to show it in a ImageView?
tratamento de erros
CreateProcess do by Client
​
Central de Ajuda
​
​
Central de Ajuda
PoCs aqui
PoCs aqui
aqui
​
npm
​
Download
Guia de uso e integração
​
Central de Ajuda
Visão Geral
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
​
release notes
release notes
​
​
release notes
​
release notes
release notes
​
release notes
release notes
release notes
release notes
release notes
​
release notes
release notes
release notes
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
release notes
​
release notes
release notes
release notes
release notes
​
release notes
release notes
release notes
release notes
release notes
​
release notes
release notes
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
release notes
release notes
​
​
Central de Ajuda
​
Central de Ajuda
release notes
release notes

Windows (desktop)

N/A

N/A

Android

N/A

iOS

N/A

MacOS (desktop)

N/A

3.20.1

3.20.0

3.19.3

3.19.2

3.19.0 -> 3.19.1

3.18.11

3.18.10

3.18.9

3.18.8

3.18.7

3.18.6

3.18.5

3.18.4

3.18.0 -> 3.18.3

3.16.4 -> 3.17.0

3.16.3

3.16.2

3.14.1 -> 3.16.1

3.11.1 -> 3.14.0

3.10.2 -> 3.11.0

3.10.1

3.9.1 -> 3.10.0

3.9.0

3.8.3

3.8.2

3.8.0 -> 3.8.1

3.7.1 -> 3.7.2

3.6.5 -> 3.7.0

3.6.3 -> 3.6.4

3.6.1 -> 3.6.2

3.5.4 -> 3.6.0

3.5.3

3.5.0 -> 3.5.2

Personalização Web

Nesta seção, você encontrará todas as informações necessárias para a customização do SDK da plataforma Unico IDCloud em suas aplicações Web


O SDK Web permite que algumas personalizações sejam feitas. Abaixo veja todas as personalizações possíveis para este SDK.

Personalizar idioma


É possível configurar a experiência das mensagens informativas dos frames de captura alterando seu idioma. Utilize o enumerado LocaleTypes que contém os seguintes valores:

  • LocaleTypes.PT_BR: para Português(Brasil);

  • LocaleTypes.ES_MX: para Espanhol(México);

  • LocaleTypes.ES_ES: para Espanhol(Espanha);

  • LocaleTypes.EN_US: para Inglês(EUA).

Veja como implementar no exemplo abaixo:

import {
  ...
  UnicoCheckBuilder,
  LocaleTypes
  ...
} from "unico-webframe"

unicoCameraBuilder.setLocale(LocaleTypes.EN_US);
  • Pode ser necessário uma ativação remota para ser utilizado, caso deseje usar, sinalize seu gerente de projetos ou o suporte da Unico.

  • Caso não seja configurado, por padrão o SDK utiliza o Português como idioma principal.

Personalizar experiência do processo de captura


Esta é uma etapa opcional, porém muito recomendada para que o processo de captura tenha a identidade visual da sua empresa.

Para efetuar a customização do frame de captura por meio do Theme Builder basta gerar uma instância da classe UnicoThemeBuilder e invocar os métodos que customizam cada uma das propriedades do frame de captura, como exemplificados a seguir:

const unicoTheme = new UnicoThemeBuilder()
.setColorSilhouetteSuccess("#0384fc")
.setColorSilhouetteError("#D50000")
.setColorSilhouetteNeutral("#fcfcfc")
.setBackgroundColor("#dff1f5")
.setColorText("#0384fc")
.setBackgroundColorComponents("#0384fc")
.setColorTextComponents("#dff1f5")
.setBackgroundColorButtons("#0384fc")
.setColorTextButtons("#dff1f5")
.setBackgroundColorBoxMessage("#fff")
.setColorTextBoxMessage("#000")
.setColorCancelButton("#0384fc")
.setColorProgressBar("#0384fc")
.setHtmlPopupLoading(`<div style="position: absolute; top: 45%; right: 50%; transform:
translate(50%, -50%); z-index: 10; text-align: center;">Carregando...</div>`)
.setFontFamily("Arial, sans-serif") // v3.19.2+
.build();

Após a geração do objeto de tema, conforme exemplificado acima, ele dever ser passado como parâmetro para o método setTheme do builder unicoCameraBuilder

unicoCameraBuilder.setTheme(unicoTheme);

Acessibilidade

Nesta seção, você encontrará dicas e informações sobre acessibilidade

Componentes da SDK


A SDK implementa componentes preparados com atributos HTML para acessibilidade, como aria-label, tabindex, role, entre outros, que habilitam a navegação por teclado entre elementos, ativa orientações por áudio e são utilizados por softwares de leitura de tela.

Boas práticas


Ao integrar a SDK Web em uma página, é possível que existam outros elementos interativos na página que não ficam visíveis durante o fluxo de abertura da câmera e captura de imagem. Esses elementos podem acabar gerando conflitos com as informações do fluxo de captura, atrapalhando a experiência do usuário, portanto, é importante remover ou inativar a interação com outros elementos enquanto a captura estiver sendo realizada.

Isso é possível de diversas formas e depende dos elementos existentes e frameworks utilizados na página, segue abaixo, um exemplo utilizando o atributo aria-hidden:

Exemplo
// page html
// <div id="main-content">
//  <header>...</header>
//  <button id="my-button">Interactive Button</click>
//  <footer>...</footer>
// </div>


const unicoSdk = new UnicoCheckBuilder().build();

unicoSdk
  .prepareSelfieCamera(...)
  .then((cameraOpener) => {
    const pageElement = document.getElementById('main-content');
    pageElement.setAttribute('aria-hidden', true);
    
    cameraOpener.open({
      on: {
        success: (obj) => {
          pageElement.setAttribute('aria-hidden', false);
        },
        error: (error) => {
          pageElement.setAttribute('aria-hidden', false);
        },
      },
    });
  });

aria-hidden

É importante usar com cuidado este atributo, pois ele pode prejudicar a acessibilidade de elementos na página se for aplicado incorretamente, ou não for removido quando o fluxo de captura terminar.

Referências


Captura de Selfie

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em suas aplicações Web para a captura da selfie


Inicializar o SDK


Para começar, você deve efetuar 3 passos simples em seu projeto:

Instancie um novo Builder:

const unicoCameraBuilder = new UnicoCheckBuilder();

Especifique o caminho dos arquivos adicionais (caso adicionados em seu projeto):

unicoCameraBuilder.setResourceDirectory("/resources");

Especifique o caminho dos arquivos dos modelos de IA, caso utilize a funcionalidade de Câmera Inteligente

unicoCameraBuilder.setModelsPath("https://meusite.com.br/models");

Configuração de ambientes


Caso não seja configurado, por padrão o SDK Web utiliza o ambiente de produção.

É possível configurar o ambiente que será utilizado na execução da SDK. Utilize o enumerado SDKEnvironmentTypes que contém os seguintes enumerados:

  • SDKEnvironmentTypes.PROD: para ambiente de Produção;

  • SDKEnvironmentTypes.UAT: para ambiente de Homologação.

Veja como implementar no exemplo abaixo:

import {
  ...
  UnicoCheckBuilder,
  SDKEnvironmentTypes
  ...
} from "unico-webframe"

unicoCameraBuilder.setEnvironment(SDKEnvironmentTypes.UAT);

Implementar as funções de callback


Um dos objetos que deve ser passado como parâmetro ao método responsável por renderizar o frame de captura é o de callback. Este objeto deverá conter funções de callback para casos de sucesso e erro, como exemplificados abaixo.

  const callback = {
    on: {
      success: (obj) => {
        console.log(obj.base64);
        console.log(obj.encrypted);        
      },
      error: (error) => {
        console.error(error)
        //confira na aba "Referências" sobre os erros possíveis
      }
    }
  };

Este objeto é obrigatório e caso não seja corretamente implementado (contemplando todos os eventos de success ou error) gera uma exceção, que caso não tratada, é exibida no console do usuário.

  • O atributo encrypted é destinado estritamente ao envio da imagem através das APIs do by Client. Não se deve abrir e serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista.

  • Os arquivos base64/encrypted podem sofrer variações de tamanho de acordo com diversas variáveis, dentre elas, a qualidade dos aparelhos e das fotos geradas pelos mesmos e regras de negócio da Unico. Para não encontrar problemas em sua aplicação, não limite em sua lógica de programação ou sua infraestrutura o tamanho da string gerada pela SDK para os arquivos.

Configurar e iniciar


Para iniciar a câmera com as configurações feitas até aqui, é preciso criar uma instância do builder através do método build().

const unicoCamera = unicoCameraBuilder.build();

Em seguida, com a câmera "montada", deve-se configurar o modo de captura da câmera.

A preparação da câmera será efetuada a partir do método prepareSelfieCamera(), disponibilizado a partir do builder. Este método recebe 2 parâmetros:

  • Modo de câmera desejado, sendo eles:

    • SelfieCameraTypes.NORMAL para o modo de câmera normal;

    • SelfieCameraTypes.SMART para o modo de câmera inteligente.

Este método gera uma promise que ao ser resolvida, devolve um objeto que é utilizado para efetivamente abrir a câmera através do método open, que recebe como parâmetro as funções de callback configuradas no passo acima.

Para otimizar a abertura da câmera é possível separar as chamadas dos métodos prepareSelfieCamera() e open().

Caso deseje utilizar a captura automática, passe o parâmetro Unico.SelfieCameraTypes.SMART para o método prepareSelfieCamera.

Para a captura inteligente, os modelos de visão computacional também devem ser carregados através do método setModelsPath, conforme explicado no primeiro passo deste guia.

Usando a classe UnicoConfig:

const config = new UnicoConfig()
  .setHostname("<YOUR_HOSTNAME>")
  .setHostKey("<YOUR_HOST_KEY>");

  unicoCamera.prepareSelfieCamera(
    config, 
    SelfieCameraTypes.SMART
  ).then(cameraOpener => {
    cameraOpener.open(callback);
  }).catch(error => {
    console.error(error);
    // confira na aba "Referências" sobre os erros possíveis
  });

Configurar modo de captura em iFrame's


É possível utilizar o SDK Web com Liveness Interativo embarcado em um iFrame, para isso é preciso realizar uma implementação semelhante a seção anterior na preparação da câmera.

A preparação da câmera será efetuada através do método prepareSelfieCameraForIFrame(), também disponibilizado a partir do builder. Este método recebe os mesmos parâmetros do prepareSelfieCamera():

const unicoCamera = unicoCameraBuilder.build();

const config = new UnicoConfig()
  .setHostname("<YOUR_HOSTNAME>")
  .setHostKey("<YOUR_HOST_KEY>");

  unicoCamera.prepareSelfieCameraForIFrame(
    config, 
    SelfieCameraTypes.SMART
  ).then(cameraOpener => {
    cameraOpener.open(callback);
  }).catch(error => {
    console.error(error);
    // confira na aba "Referências" sobre os erros possíveis
  });

O método prepareSelfieCameraForIFrame() só funciona se a implementação estiver em um iFrame, o uso fora de um iFrame resulta no erro 73724. Assim como usar o método prepareSelfieCamera() dentro de um iFrame resulta no erro 73724

Implementação do elemento iFrame


Para que a captura funcione corretamente é necessário implementar o elemento <iframe> como no exemplo abaixo:

<iframe allow="fullscreen;camera;geolocation" allowFullScreen src="your_app_url"></iframe>

Para executar a captura é necessário estar no modo tela cheia do browser para que o SDK possa se redimensionar automaticamente. Sendo assim, ao executar a captura, o SDK apresenta uma tela solicitando a abertura do frame em modo tela cheia. Veja no exemplo a seguir:

Após permitir o uso de tela cheia, o frame de captura abrirá normalmente:

A Apple impede o uso de APIs de tela cheia especificamente em iPhones (iPads são aceitáveis). Sendo assim, para capturas em iPhones, é necessário configurar o posicionamento do iFrame por conta própria.

Realize um requisição POST na API REST do by Client


Por motivos de segurança, o intervalo entre a geração do encrypted e o envio via um dos fluxos disponíveis deve ser de até no máximo 10 minutos. Envios feitos além deste período serão rejeitados automaticamente pela API.


Captura de documento

Nesta seção, você encontrará todas as informações necessárias para o uso e integração do SDK da plataforma Unico IDCloud em suas aplicações Web para a captura do documento


Frames de documentos disponíveis


Neste modo de câmera, existe um frame de captura para auxiliar o usuário a posicionar o documento corretamente. Após posicionar o documento corretamente, o usuário deve clicar no botão para realizar a captura da foto do documento.

A SDK não realiza nenhum tipo de validação do que está sendo capturado.

Neste modo de câmera é possivel capturar os documentos:

  • CPF: Captura da frente do CPF;

  • CNH: Captura da CNH aberta;

  • CNH frente: Captura da frente da CNH;

  • CNH verso: Captura do verso da CNH;

  • RG frente: Captura da frente do RG;

  • RG verso: Captura do verso do RG;

  • Outros: Captura de qualquer outro documento.

Inicializar o SDK


Para começar, você deve efetuar 2 passos simples em seu projeto:

Instancie um novo Builder:

const unicoCameraBuilder = new UnicoCheckBuilder();

Especifique o caminho dos arquivos adicionais (caso adicionados em seu projeto):

unicoCameraBuilder.setResourceDirectory("/resources");

Configurar tamanho do frame


É recomendado que você configure o tamanho do frame dentro de sua aplicação, a fim de otimizar a área de captura dentro de seu WebApp. Confira abaixo como fazer esta configuração para Web Desktop ou Mobile.

Muitas vezes o funcionamento do frame pode ser afetado por alguns design-systems que possuam algum tipo de grid-system como, por exemplo, bootstrap ou material-ui. Para minimizar este risco, certifique-se de posicionar o frame (id="box-camera") em algum lugar do código que não herde regras indesejadas de css.

Nas versões Web Desktop, é possível restringir o tamanho do frame para que o mesmo não utilize toda a dimensão de seu WebApp. Para isto, basta envolver o frame (id="box-camera") em outra tag html, como no exemplo abaixo:

<div class="container">
  <div id="box-camera"></div>
</div>

Idealmente, você deve tentar manter uma proporção adequada entre altura e largura, o que irá facilitar o enquadramento da face do usuário. A seguir um exemplo:

.container {
  width: 800px;
  height: 600px;
  position: relative;
}

Seguindo o exemplo acima, o frame respeita o tamanho do elemento "pai", neste caso representado pelo container. Desta forma, você tem a flexibilidade para implementar o frame da forma mais conveniente para sua aplicação (como em um modal, por exemplo).

Testes alterando o tamanho da tela através do modo desenvolvedor de seu browser não funcionam. É recomendado que este tipo de teste seja feito alterando o tamanho da janela de seu browser.

Para uma view Web Mobile é recomendado que o frame de captura ocupe 100% da tela para evitar problemas com os algorítimos de visão computacional. Caso a área de captura esteja distorcida, a funcionalidade de captura automática (Câmera Inteligente) pode apresentar problemas de calculo no tracking da face dos usuários.

Sendo assim, é recomendado que na view Web Mobile:

  • O frame de captura ocupe 100% da tela do dispositivo (100vw/vh);

  • Evitar o scroll horizontal ou vertical (isso pode ser minimizado com um modal);

Testes de devices utilizando o modo desenvolvedor de seu browser não funcionam, dado que, a camera utilizada pelo seu browser é a mesma de seu desktop, que possui uma resolução totalmente diferente da camera de um dispositivo móvel. Recomendamos que este tipo de teste seja feito diretamente no dispositivo.

Implementar as funções de callback


Um dos objetos que é necessário passar como parâmetro ao método responsável por renderizar o frame de captura é o de callback. Este objeto deve conter funções de callback para casos de sucesso e erro, como exemplificados abaixo.

  const callback = {
    on: {
      success: (obj) => {
        console.log(obj.base64);
        console.log(obj.encrypted);
      },
      error: (error) => {
        console.error(error)
        //confira na aba "Referências" sobre os erros possíveis
      },
    }
  };

Este objeto é obrigatório e caso não seja corretamente implementado (contemplando todos os eventos de success ou error gera uma exceção, que caso não tratada, é exibida no console do usuário).

Configurar e iniciar câmera


Para iniciar a câmera com as configurações feitas até aqui, é preciso criar uma instância do builder através do método build().

const unicoCamera = unicoCameraBuilder.build();

Em seguida, com a câmera "montada", deve-se configurar o modo de captura da câmera.

A preparação da câmera é efetuada a partir do método prepareDocumentCamera(), disponibilizado a partir do builder. Este método recebe 2 parâmetros:

  • Tipo de documento a ser capturado, sendo eles:

Parâmetro
Descrição

DocumentCameraTypes.CPF

Frame para captura da frente do CPF

DocumentCameraTypes.CNH

Frame para captura da CNH aberta

DocumentCameraTypes.CNH_FRENTE

Frame para captura da frente da CNH

DocumentCameraTypes.CNH_VERSO

Frame para captura do verso da CNH

DocumentCameraTypes.RG_FRENTE

Frame para captura da frente do RG

DocumentCameraTypes.RG_VERSO

Frame para captura do verso do RG

DocumentCameraTypes.RG_FRENTE_NOVO

Frame para captura da frente do novo RG

DocumentCameraTypes.RG_VERSO_NOVO

frame para captura da parte traseira do novo RG

DocumentCameraTypes.OTHERS("descrição")

Frame para captura de qualquer outro documento

Este método gera uma promise que ao ser resolvida, devolve um objeto que é utilizado para efetivamente abrir a câmera através do método open, que recebe como parâmetro as funções de callback configuradas no passo acima.

Abaixo um exemplo utilizando a captura de CNH:

Usando a classe UnicoConfig:

  const config = new UnicoConfig()
    .setProjectNumber("<YOUR_PROJECT_NUMBER>")
    .setProjectId("<YOUR_PROJECT_ID>")
    .setMobileSdkAppId("<YOUR_MOBILE_SDK_APP_ID>")
    .setHostname("<YOUR_HOSTNAME>")
    .setHostInfo("<YOUR_HOST_INFO>")
    .setHostKey("<YOUR_HOST_KEY>");

  unicoCamera.prepareDocumentCamera(
    config, 
    DocumentCameraTypes.CNH
  ).then(cameraOpener => {
    cameraOpener.open(callback);
  }).catch(error => {
    console.error(error);
    // confira na aba "Referências" sobre os erros possíveis
  });

Caso precise capturar um documento que não possuímos um frame específico (ex: RNE, entre outros), utilize o frame DocumentCameraType.None, que irá te possibilitar um frame genérico, retangular, que pode ser utilizado para orientar qualquer captura.

Realize um requisição POST na API REST do by Client



Glossário

Aqui você encontrará a lista de termos, palavras ou expressões técnicas que são utilizadas nesta documentação, bem como suas respectivas descrições


Termo
Descrição

APIKey

Chave criada no portal da Único, utilizada de forma obrigatória na interface entre sistemas, carrega configurações que serão aplicadas nas integrações. Unica por operação/fluxo e sempre vinculada a filial e conta de serviço.

Arquivo .pem

É um arquivo contendo a chave privada, utilizado na autenticação OAuth2.

Bundle

É um pacote contendo as credenciais para utilização da SDK.

Conta de Serviço

É uma conta impessoal que pertence à aplicação e não a um usuário individual, utilizada na autenticação OAuth2.

Filial

Identificação da filial ou operação do cliente, vinculada na conta de serviço e todos os usuários que terão acesso ao sistema.

Instância

URL da página de acesso ao portal do produto da Único.

Encrypted

Arquivo JWT gerado pela nossa SDK, que será usado na integração. Possui expiração de 10 minutos e podendo ser utilizado apenas uma vez.

Portal IDCloud

Local de acesso ao produto da Unico.

ProcessID

Identificação gerada após a criação do processo.

SDK

É um conjunto de ferramentas ou pacotes que são fornecidos pela Único para facilitar a captura de imagens face e/ou documentos.

Flow

É um atributo que carrega configurações e define a jornada do cliente final no processo de biometria no by Unico.

TenantID

É um identificador exclusivo da sua empresa na Unico.

Capacidades

São as funcionalidades que podem ser utilizadas na plataforma IDCloud.

Drop

É quando uma foto é recusada pelo motor de biometria por baixa qualidade e/ou algum erro do motor.


Guia de tratamento de erros

Nesta seção, você encontrará todas as informações necessárias para o tratamento dos erros do SDK da plataforma Unico IDCloud em suas aplicações Web


É disponibilizado a seguir a lista de possíveis códigos de erro do SDK Web.

Possíveis erros do prepareCamera:


73000

Unknown and unexpected error. Unico SDK leverages a variety of APIs including camera, storage, security, networking, and more. This return value is a catch-all for errors experienced during normal usage of these APIs.

73001

<property> is required

73002

<property> must be an instance of <class>

73003

<class> with name <name> is not available to inject.

73004

Class type must be a function or a class.

73005

Could not find the <locale> locale.

73006

Could not find text: <text>.

73100

Unable to connect to internet.

73200

Could not find the Unico SDK JSON file.

73201

Could not load the Unico SDK JSON file.

73202

Unico SDK JSON file is invalid.

73204

Unable to initialize the SDK, please configure the environment on setEnviroment method of build.

73300

Could not authenticate this application.

73301

Could not authenticate this application.

73302

Authentication token not found.

73303

Current host is not registered.

73400

Could not initialize camera.

73401

Could not load ML models for this camera.

73402

The Key could not be verified due to connectivity issues on the user's device.

73403

This device/platform/browser/version combination is not supported by SDK.

73404

Device is in landscape display orientation. The SDK can only be used in portrait display orientation.

73405

Device blocked due to multiple failed attempts.

73406

The Session was cancelled, the SDK was opened in an IFrame.

73407

The SDK was not fully loaded.

73500

Could not get session.

73501

Could not get session.

73502

Session token not found.

73600

Could not find camera resource.

73601

Could not start camera in production mode.

74000

Invalid hexadecimal.

74001

Object is not a UnicoTheme


Código
Descrição

73700

Could not parse camera response.

73704

The user pressed the cancel button and did not complete the session.

73706

The camera access is prevented because either the user has explicitly denied permission or the user's device is configured to not allow access by a device policy.

73707

The session was canceled due to the app being terminated, put to sleep, an OS notification, or the app was placed in the background.

73708

The session was cancelled because device is in landscape mode. The user experience of devices in these orientations is poor and thus portrait is required.

73710

The session was cancelled because the user was unable to complete a Session in the default allotted time or the timeout set by the developer.

73715

The session was cancelled because not all guidance images were configured.

73716

The session was cancelled because SDK was unable to start the camera on this device.

73717

The session was cancelled because the user was in a locked out state.

73718

The session was cancelled because of an unknown and unexpected error. SDK leverages a variety of iOS APIs including camera, storage, security, networking, and more. This return value is a catch-all for errors experienced during normal usage of these APIs.

73720

The developer programmatically called the session cancel API.

73721

The session was cancelled due to a device orientation change during the session.

73722

The session was cancelled because the document is not ready.

73723

The session was cancelled because there was another session in progress.

73724

The session was cancelled because the camera was opened in an iFrame.

73728

Connection error, please use HTTPS to connect.

73729

Browser not supported, please open in another browser.

73730

Unable to initialize an active liveness session because of an unknown and unexpected license error.

73731

Unable to initialize an active liveness session because the license has expired.

73732

Unable to initialize an active liveness session because Origin is not permitted.

73800

Could not encrypt response.

73900

Could not get system information.


FAQ IDCloud

Nesta FAQ, você encontrará as dúvidas mais comuns relacionadas à plataforma IDCloud


Consigo importar a minha base para ser processada na Unico?


Sim, é possível importar sua base de faces para processamento pelo motor da plataforma Unico IDCloud. Para isso, siga as etapas abaixo:

  1. Comunique o responsável pela sua conta sobre a necessidade de importação da base, para garantir o suporte adequado ao processo;

  2. Solicite uma conta de serviço específica para a operação de importação de base;

  3. Autentique-se com essa conta de serviço para obter o token de acesso necessário;

  4. Obtenha uma APIKey com as capacidades desejadas. Certifique-se de que:

    1. A APIKey esteja configurada para receber imagens em formato base64 (e não encrypted);

    2. A importação será realizada sem retorno da capacidade de Prova de Vida.

  5. Realize as chamadas à nossa API, armazenando:

    1. As respostas das capacidades executadas;

    2. Os IDs de processo gerados.

É essencial armazenar os IDs de processo, pois eles são necessários para utilizar capacidades como Validação 1:1.

A Unico possui um limite de TPS / RPM? Como funciona o autoscale?


A Unico não possui um limite rígido de TPS (Transações por Segundo). Utilizamos um Horizontal Pod Autoscaler (HPA) para escalar automaticamente nossas aplicações, tornando erros relacionados a rate limit bastante incomuns. Atualmente, nossas configurações de escalabilidade funcionam da seguinte forma:

  • Quando a CPU atinge 70% de uso, OU

  • Quando a memória atinge 70% de uso, OU

  • Quando um pod atinge 320 requisições por minuto.

Em cenários de alta demanda, o número de réplicas do ambiente pode aumentar em até 4 pods a cada 15 segundos, garantindo uma resposta rápida ao tráfego.

É importante destacar que, caso haja um aumento significativo no volume de requisições às nossas APIs, recomendamos que esse crescimento seja realizado de forma gradual. Isso ajuda a evitar ramp-ups abruptos que possam impactar o processo de escalabilidade automática da aplicação.

Quais as diferenças das integrações By Unico e By Client?


by Unico: Para empresas que desejam contar com um parceiro para gerenciar a experiência do usuário com melhores práticas e privacidade, além de contar com a facilidade na orquestração de fluxos com as capacidades da Unico e com a atualização automática de tecnologias, como as SDKs.

Com o by Unico, somos os responsáveis por gerenciar toda a experiência do seu usuário final, aplicando as melhores práticas de UX design e segurança, focando na otimização de conversão, enquanto cuidamos de todas as atualizações e manutenções. Pode ser utilizada tanto como uma webview ou iFrame dentro da sua aplicação, quanto no fluxo de mensagens em uma operação assíncrona (via WhatsApp, SMS e/ou E-mail).

by Client: Para empresas que desejam controlar a experiência dos usuários com frontend próprio, bem como a construção dos fluxos com as capacidades da Unico no backend junto às demais tecnologias e recursos utilizados para autenticação.

Com o by Client você tem a liberdade de criar e gerenciar a jornada do usuário final como preferir, aproveitando as capacidades da Unico no backend e integrando outras tecnologias de autenticação conforme necessário.

Quais são as capacidades do IDCloud?


As capacidades que o IDCloud oferece são: Verificação de Identidade, Alerta de comportamento, Score de risco, Prova de vida, Validação (1:1), Captura e reaproveitamento de documentos e Assinatura eletrônica.

O que é orquestração?


Orquestração no contexto da plataforma Unico IDCloud é quando em um cadastro biométrico a capacidade Verificação de Identidade ao devolver a resposta "Inconclusivo", executa a validação probabilística daquela face ser a titular do CPF com a capacidade Score de risco.

Como consigo utilizar o by Unico na minha operação?


Você pode utilizar o by Unico na sua operação de 3 maneiras distintas:

  • Na sua aplicação mobile através de uma Webview;

  • Na sua aplicação web através de um iFrame;

  • No fluxo de mensagens (WhatsApp, SMS e/ou E-mail).

Quais fluxos posso usar no by Unico?


É possível utilizar os seguintes fluxos no by Unico:

  • IDLIVE;

  • ID;

  • IDCHECK;

  • IDDOCS;

  • IDSIGN;

  • IDDOCSIGN;

  • IDCHECKSERPRO

  • IDTOKEN.

Quais customizações são possíveis no by Unico?


No by Unico é possível realizar customização dos seguintes itens:

  • Logotipo;

  • Cor do background do CTA;

  • Texto do CTA;

  • Arredondamento dos cantos do CTA em pixels.

Tempo para recuperar selfie do by Unico?


No by Unico, a selfie do usuário só fica disponível para consulta via REST API durante 8h após a finalização do processo biométrico. Após este período, não é possível recuperar a selfie do usuário.

Como funcionam as tecnologias de documentos?


  • A Tipificação funciona garantindo que o documento informado é ele mesmo (a validação é feita no layout do documento. Não é feita a documentoscopia do mesmo);

  • O FaceMatch funciona comparando a face da Selfie do usuário com a face do documento (o retorno pode ser true ou false);

  • O CPF Match funciona comparando o número do CPF que foi informado no cadastro com o CPF que consta no documento (o retorno pode ser true ou false);

  • O OCR Extração funciona extraindo os dados do documento em formato de texto a partir de uma imagem.

Posso utilizar o IDCloud de forma manual?


Sim, é possível utilizar o by Unico de forma manual.

A API do IDUnico é sincrona ou assincrona?


O retorno das informações é disponibilizado pelo IDUnico de duas formas: Síncrona ou Assíncrona. Na configuração da API Key você pode escolher como deseja se integrar.

Qual é o tempo médio de resposta (também conhecido como latência) da API para uma verificação de identidade?


O tempo médio de resposta esperado é de 3 segundos, mas este pode variar a depender da forma de utilização do produto (ex: se utiliza prova de vida, se a API Key está síncrona ou assíncrona, entre outros).

Quais sao os retornos na API do IDunico para eu tomar as decisoes de aprovar ou nao um CPF/cliente?


Os retornos da APIs dependerão da sua operação, que pode ter diferentes capacidades do IDCloud. O mais comum é tenha a Verificação de Identidade + Score de risco. Considerando o cenário mais comum, o retorno da API terá os seguintes campos:

{
   "id": "ID_do_processo",
   "status": status_do_processo},
   "unicoId": {
       "result": "resultado_do_ID"
   },
   "liveness": resultado_do_liveness,
   "score": resultado_do_score
}

A combinação dos retornos dependerá do resultado da análise biométrica. Veja mais na seção do by Client.

Os produtos da unico tem a similaridade da serpro?


Sim, a plataforma IDCloud oferece o recurso de similaridade da Serpro, tanto via by Client quanto via by Unico. Essa funcionalidade retorna o percentual de similaridade da Serpro, comumente utilizado para fluxos de empréstimo consignado.

A Unico faz algum tipo de validação automática dos documentos capturados? Como documentoscopia?


Não, atualmente a Unico não faz documentoscopia. A Unico possui as seguintes tecnologias associadas à capacidade de de captura e reaproveitamento de documentos:

  • Tipificação: validamos se o layout do documento enviado é o mesmo que foi informado na API;

  • Extração de dados OCR: extraímos no formato de texto os dados de um documento a partir da imagem enviada;

  • FaceMatch: comparamos a face da selfie capturada com a face que consta no documento informado;

  • CPF Match: procuramos no documento informado se há o CPF que foi enviado na API.

Quais são os erros de retorno mais comuns na API do IDUnico?


Os retornos de erros mais comuns são:

  • 400: geralmente associados a erros na requisição;

  • 403: geralmente associados a erros de permissão;

  • 404: quando não encontramos os dados informados;

  • 500: erros de servidor e falhas inesperadas.

O que acontece se a captura de biometria falhar?


by Unico: o by Unico, caso haja uma falha na biometria, na própria experiência que gerenciamos o usuário consegue retentar e temos altos números de conversão.

by Client: no by Client, caso haja algum erro, seja na requisição ou mesmo para gerar o resultado da Verificação de Identidade ou Score de risco, estes erros devem ser tratados como exceptions na API por você. Para isso, orientamos que verifique os cenários possíveis e os códigos de erro na nossa documentação para mapear todos os cenários possívels.


PoCs disponíveis

Nesta seção, você encontrará a lista com todas as PoCs de SDK disponíveis para apoiar a sua implementação


Os seguintes exemplos de projetos são disponibilizados para facilitar o entendimento do funcionamento de cada SDK.

Caso não encontre a POC nesta seção, solicite a POC ao seu Gerente de Projetos e ela será compartilhada através de um diretório SFTP.

PoCs em ambiente nativo


Linguagem de programação
Descrição
Repositório

Kotlin

PoC em Kotlin que implementa a SDK Android

Swift

PoC em Swift que implementa a SDK iOS

ObjC

PoC em ObjC que implementa a SDK iOS

React Native

PoC em React Native que implementa as SDKs Android e iOS

SFTP

Flutter

PoC em Dart que implementa a SDK Flutter

Nosso suporte é restrito a aplicativos desenvolvidos diretamente nas plataformas nativas Android e iOS, utilizando seus respectivos módulos nativos, além do framework Flutter (se a implementação for utilizando nosso plugin). No momento, não oferecemos suporte para aplicativos desenvolvidos em frameworks híbridos, como React Native, Ionic ou outras tecnologias de desenvolvimento multiplataforma.

PoCs em ambiente web


Linguagem de programação
Descrição
Repositório

Angular

PoC em Angular que implementa a SDK Web

JS Vanilla

PoC em JS Vanilla (JS puro) que implementa a SDK Web

Next JS

PoC em Next que implementa a SDK Web

React JS com TypeScript

PoC em React com TypeScript que implementa a SDK Web

React JS com JavaScript

PoC em React com JavaScript que implementa a SDK Web

React JS com Webpack + Babel

PoC em React JS com Webpack + Babel que implementa a SDK Web

Vue JS

PoC em Vue JS que implementa a SDK Web


Linguagem de programação
Descrição
Repositório

Android

PoC em uma Webview Android que executa o SDK Web

SFTP

Android x Web Flow

PoC de fluxo de comunicação entre aplicação web e webview nativa Android

SFTP

iOS

PoC em uma Webview iOS que executa o SDK Web

SFTP

iOS x Web Flow

PoC de fluxo de comunicação entre aplicação web e webview nativa iOS

SFTP


Melhores práticas de implementação da SDK

Nesta seção, você encontrará uma lista das melhores práticas para implementação da SDK da plataforma Unico IDCloud


Utilize uma POC para facilitar sua implementação


Mantenha sempre suas SDKs atualizadas


Constantemente as SDKs vêm evoluindo para garantir maior segurança e novos recursos e funcionalidades. É essencial que os clientes mantenham uma rotina de atualizações, além de ter agilidade em atualizações críticas.

Identifique qual é a versão mais atualizada disponível para SDK


Importante garantir que realize sua atualização para versão mais recente disponível:

Evite atualizar a SDK e outros componentes/funcionalidades ao mesmo tempo


Sabemos que seu aplicativo faz uso de diversas outras bibliotecas e funcionalidades, muitas vezes sendo carregadas de forma simultânea à SDK da Unico. Como boa prática de atualização, evite realizar o processo de upgrade de nossa SDK ao mesmo tempo que atualiza alguma outra funcionalidade / biblioteca pois, ao se deparar com uma falha e/ou mudança de comportamento, pode ser um desafio entender o que está sendo a causa raiz. Recomendamos realizar as atualizações separadamente para garantir maior controle das validações, além de utilizar o nosso ambiente de homologação.

Está com alguma dificuldade de atualização da SDK? Podemos apoiá-lo


Caso esteja com dificuldade, abra um ticket no nosso portal de clientes com as seguintes informações (para agilizar a tratativa):

  • Qual é a linguagem da SDK que você está tentando atualizar?

  • Caso seja mobile (Android ou IOs), trata-se de uma implementação nativa ou híbrida (informar detalhes)?

  • Em caso de implementação JavaScript, qual o framework utilizado?

  • Qual é a versão atual da SDK que você está tentando atualizar? (não é necessário caso seja uma nova instalação);

  • Qual é a nova versão que está sendo realizada a tentativa de instalação/atualização?

  • Por favor, informe qual API Key está sendo utilizada;

  • A atualização consiste apenas no upgrade do SDK ou outros componentes / funcionalidades também estão sendo alterados/atualizados/modificados ? Em caso afirmativo, por favor descreva quais itens adicionais estão sendo modificados;

  • Prover uma descrição dos passos executados e quais foram os resultados/erros;

  • Por favor anexar evidências e insumos relacionados a falha/problema (arquivos de logs contendo trecho de erros/falhas, printscreens e/ou vídeos reproduzindo o problema).

Não leia ou manipule o objeto JWT (Encrypted)


Ao efetuar uma captura de imagem com sucesso, o método onSuccessSelfie retorna um objeto do tipo ResultCamera que possui 2 atributos:

  • Base64 da imagem obtida, que pode ser utilizado se quiser exibir uma prévia da imagem em seu app;

  • Encrypted, que é um objeto JWT que deve ser deve ser enviado na chamada das APIs REST. O JWT (Encrypted) deve ser utilizado estritamente durante o envio da imagem através das APIs da Unico. Não se deve abrir e/ou serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista. Como dito, a SDK já fornece o atributo Base64 para obter a imagem em questão.

Um caso de exemplo em Swift: Método: onSuccessSelfie print("(result.encrypted)") para Encrypted print("(result.base64)") para para Base64 print("(result)") para Encrypted e Base64

Em resumo: nunca tente ler ou manipular o atributo Encrypted (JWT).

Envio do JWT dentro de 10 minutos


Por motivos de segurança, o envio da JWT deve ser realizado dentro de um período de 10 minutos. Caso o envio supere esta janela, o pacote será considerado inválido. Considere este tempo no momento da jornada do usuário em seu aplicativo e evite mudanças posteriores.

Envio do JWT somente uma vez


Por motivos de segurança, o envio da JWT deve ser feito somente uma vez para o backend da Unico. Ou seja, caso haja algum problema no processamento da imagem e/ou algum erro no response, deve-se realizar uma nova captura biométrica para geração de um novo objeto encrypted e então, enviar este novo arquivo para o backend da Unico.


A virtualização de dispositivos nas dinâmicas de testes do seu aplicativo pode ser interpretada como uma tentativa de burlar as camadas de segurança incorporadas ao provedor de biometria, podendo retornar os erros:

Mobile:

  • 73006 - Unable to open camera on emulators.

Web

  • 73600 - Could not find camera resource.

  • 73400 - Could not initialize camera.

Para evitar retrabalho e a identificação errônea de erros, os testes devem ser realizados em dispositivos físicos.

Utilizar a mesma API Key para captura e envio da foto para o backend


Toda comunicação e requisição é baseada em API Keys definidas previamente na instância do cliente. É muito importante que sua implementação utilize a mesma API Key no fluxo de captura e no fluxo de envio, pois evita erros de integração, facilita a validação e a rastreabilidade dos processos e fluxos.

Em caso de dúvidas sobre sua API Key acesse o suporte técnico.

Não manter o DevTools aberto quando realiza capturas Web


No processo de realização de testes e validações, é normal manter o DevTools aberto para verificação de fluxos e requisições. No entanto, não deve-se considerar o método de validação de captura nesses testes pois a SDK identifica como possível fraude e invalida a passagem quando enviada ao backend. Por isso, quando houver a realização de fluxos ponta-a-ponta, é essencial manter o DevTools desativado e seguir com a captura normal.

Excluir arquivos "resources" quando identificado na atualização de novas versões (Web)


Ao subir versões para o SDK WEB, caso tenha atualização também de arquivos resources, sempre excluir o arquivo antigo e inserir os novos na pasta Public, pois pode acontecer dos arquivos estarem com o mesmo nome e não serem substituídos. Certifique-se também de verificar se não há cache internamente dos arquivos resources antigos após a atualização e novo build.

Implementações em aplicações Flutter devem ser feitas utilizando nosso plugin Flutter


Para a implementação em aplicações flutter, deve-se sempre utilizar o nosso plugin de flutter específico para este propósito. Reforçamos que não tentem implementar as versões nativas do nosso SDK (Android, IOS) através de bridges em aplicações flutter pois normalmente esta ação gera erros que não foram mapeados pelo time de engenharia da Unico.

Separar o fluxo de preparação e abertura de câmera em 2 etapas


A implementação do SDK possui 2 etapas até a captura da foto e geração do encrypted:

  • A preparação da câmera e;

  • A abertura da câmera.

Na primeira etapa é preciso passar o tipo de câmera a ser utilizado e o bundle com as informações de API KEY, estando tudo correto a autenticação com o backend do SDK é realizada com sucesso. Na segunda etapa é feita a abertura da câmera, normalmente a partir de um clique de botão do usuário. A autenticação com o backend do SDK pode levar alguns segundos, então colocar essa etapa junto com a abertura de câmera no clique do botão que o usuário utiliza pode gerar uma frustração e sensação de lentidão. Dessa forma, o ideal é que, durante o carregamento da página de orientações de captura, a preparação da câmera já esteja sendo feita, assim, quando o usuário decidir abrir a câmera, o carregamento será mais rápido e a experiência final será superior.

Desta forma, você irá otimizar sua implementação e melhorar a velocidade da sua aplicação, diminuindo a percepção de lentidão no processamento para seu usuário final.

Limpeza de cache ao atualizar a SDK mobile


Sempre realize a limpeza de cache antes de realizar o build e subir novas versões. Caso esta limpeza não seja realizada, é possível se deparar com erros relacionados a cache de dependências que possivelmente tenham sido removidas ou atualizadas em novas versões. Abaixo alguns exemplos de como realizar:

Para o Flutter seguir com o comando:

  • Remover o arquivo: pubspec.lock ou;

  • flutter pub get.

Para o IOS seguir com o comando:

  • pod cache clean 'unicocheck-ios' –all ou;

  • pod cache clean –all ou

  • Remover o podfile.lock e seguir com o pod install.

Para o Android no build Gradle seguir com o comando:

  • ./gradlew clean.

Configurações de ofuscação


O ofuscamento é um processo de transformar o bytecode em uma forma menos legível por humanos, dificultando assim a engenharia reversa. A ferramenta de ofuscação que você utiliza em sua aplicação pode afetar o funcionamento da SDK, portanto é necessário que o mesmo não ofusque o código da SDK. Um bom indicador para problemas de ofuscação é verificar se sua aplicação funciona em modo debug e deixa de funcionar quando realiza o build em modo release, uma vez que a ofuscação não modifica os arquivos em modo debug.

Sendo assim, é necessário que durante a implementação do SDK vocêadicione às suas regras de ofuscação a configuração para o SDK Unico, caso contrário enfrentará problemas ao tentar buildar o projeto utilizando o SDK IOS, Android ou Flutter.

Abaixo os links para as configurações de ofuscação de cada SO:

Realize testes e validações no ambiente de homologação da Unico


A Unico fornece um ambiente de homologação para que os clientes possam realizar testes e validações de suas implementações antes de realizar qualquer mudança e alteração no ambiente de produção. Reforçamos a importância desta etapa a fim de garantir maior segurança quando for realizar a janela de mudança em produção. Garanta que seu plano de testes inclua o máximo de validações e cenários que encontrará no ambiente de produção (como variação de dispositivos, testes com limitação de conectividade, etc) Importante: lembre-se que o ambiente de homologação possui seu próprio conjunto de parametrizações/configurações, como conta de serviço e API Keys específicas (diferentes do ambiente de produção).

Crie um roteiro seguro para entrada em produção


  • Crie um roteiro / checklist levando em conta o plano de gestão de mudanças da sua empresa;

  • Certifique-se que tenha esteja utilizando as configurações corretas de produção (como API Key correta);

  • Garanta que tenha um plano de rollback (recovery) em caso de falha ao subir a nova versão em produção;

  • Ao se deparar com uma falha, colete todos os logs e insumos;

  • Reative a versão anterior funcional para mitigar impacto em produção;

  • Abra um um ticket no nosso portal de clientes contendo todas as informações e insumos da falha para que possamos apoiá-lo.


Release notes

Nesta seção, você encontrará todas as atualizações do SDK Web


Mantenha seu SDK Web sempre atualizado com a última versão disponível.

Versão 3.20.1 - 07/05/2025


  • Atualização do SDK e server do Liveness com interação;

  • Melhorias de acessibilidade no fluxo do Liveness com interação.

Versão 3.20.0 - 31/03/2025


  • Atualização do SDK e server do Liveness com interação;

  • Suporte a câmera traseira em fluxos de lojas físicas;

  • Correção de tratamento no uso do LocalStorage.

Versão 3.19.3 - 10/03/2025


  • Atualização do SDK e server do Liveness com interação.

Versão 3.19.2 - 29/01/2025


  • Adicionado novo método para customização de fontes na classe UnicoThemeBuilder.

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Versão 3.19.1 - 20/01/2025


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Versão 3.19.0 - 17/01/2025


  • Atualização do SDK e server do Liveness com interação.

  • Adição de novo frame de documentos OTHERS_V2;

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Versão 3.18.11 - 18/12/2024


  • Atualização do SDK e server do Liveness com interação.

  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Versão 3.18.10 - 10/12/2024


  • Atualização do SDK e server do Liveness com interação.

  • Melhorias de acessibilidade no fluxo do Liveness com interação.

Versão 3.18.9 - 18/11/2024


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação;

  • Resolução de conflitos entre ferramentas de observabilidade.


  • Atualização do SDK e server do Liveness com interação;

  • Correção de estilização em modo de captura em baixa luminosidade;


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação.


  • Atualização do SDK e server do Liveness com interação.


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


  • Melhoria no carregamento dos scripts do Liveness Interativo.


  • Atualização do SDK e server do Liveness com interação;

  • Novo modelo de implementação dos recursos do Liveness Interativo.

A partir da versão 3.18.0, para que o SDK busque automaticamente os recursos adicionais basta que o método setResourceDirectory não seja implementado e as configurações de CSP para uso do SDK sejam aplicadas corretamente.


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias nas verificações de injeção de vídeo recentemente adicionadas no lado do dispositivo e no lado do servidor para mitigar ameaças de IA generativa.


  • Melhorias internas de produto que melhoram nossa capacidade de detecção de erros.


  • Novas funcionalidades que melhoram a experiência de captura no Liveness Interativo.


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.

Content-Security-Policy: ...; worker-src 'self' blob:; child-src 'self' blob:


  • Melhorias internas de produto. Essas melhorias não afetam diretamente a experiência do usuário final, mantendo a interface e funcionalidades externas inalteradas.


Atualização Crítica

  • Atualização do SDK e server do Smartlive com interação;

  • Ajuste de tamanho de frames de CNH frente e verso em iPhones com telas de 6 polegadas ou mais.

Versão 3.14.0 - 05/03/2024


  • Implementação de suporte ao uso de iFrames no Liveness Interativo.


  • Melhoria internas no produto, sem impacto externo.


  • Habilitamos a customização das cores do botão de cancelar e barra de progresso através dos métodos opcionais setColorCancelButton() e setColorProgressBar();

  • Habilitamos a customização dos textos da UI do liveness interativo via configuração remota.


  • Nova personalização de logomarca no modo de captura do Liveness Ativo. Em breve adicionaremos mais informações na documentação;

  • Adição de novos tratamentos do Liveness Ativo durante o prepareCamera.

    • Lançar erro 73402 caso haja falha no carregamento do frame devido a problemas de rede;

    • Lançar erro 73403 caso o dispositivo/browser não seja suportado pelo SDK;

    • Lançar erro 73404 caso o dispositivo esteja em modo de tela paisagem;

    • Lançar erro 73405 caso o dispositivo esteja bloqueado por segurança devido a muitas tentativas mal sucedidas;

    • Lançar erro 73406 caso o SDK seja executado em um iFrame;

    • Lançar erro 73407 caso o SDK não tenha carregado todos os recursos completamente;

    • Lançar erro 73600 caso haja erro no carregamento dos recursos do Liveness Ativo.

  • Melhorias nas regras de compatibilidade do SDK com o Angular 10.


  • Atualização do SDK e server do Smartlive com interação.


  • Novas funcionalidades de autenticação e captura, disponíveis mediante análise interna pela equipe Unico para garantir segurança eficaz.

  • Adição de novos tratamentos de erros do Liveness Ativo:

    • Erro 73728 em caso de abertura do SDK em domínios sem HTTPS;

    • Erro 73729 em caso de abertura do SDK em browsers incompatíveis;

    • Erro 73730 um erro interno de licença;

    • Erro 73731 um erro interno de licença expirada;

    • Erro 73732 em caso de abertura do SDK em uma origem não configurada.


  • Atualização no modulo de segurança da SDK;

  • Melhoria internas no produto, sem impacto externo.


  • Melhoria no fluxo de autenticação, reduzindo falhas na autenticação de dispositivos com configurações específicas no Sistema Operacional.


  • Definição automática de ambientes de produção e homologação no SDK.


  • Melhorias internas do produto.


  • Atualização do SDK e server do Smartlive com interação.


  • Atualização do SDK e server do Smartlive com interação;

  • Atualização de segurança na lib crypto-es para a versão 2.1.0.


  • Disponibilizar o novo fluxo de captura e retentativas quando usado o Liveness com Interação (entrar em contato com a Unico caso queira habilitar essa nova funcionalidade);

  • Lançar erro 73800 caso haja falha na captura usando o fluxo de retentativa;

  • Lançar erro 73100 caso haja falha de conexão com internet durante uma requisição.


  • Correção no download do SDK via NPM.


  • Recomendamos atualizar! Correção e normalização das chaves de rastreabilidade da sessão de captura a qual nos permite ter uma analise anti-fraude mais sólida de ponta-a-ponta.

  • Melhorias internas do produto.


  • Melhorias internas do produto.


  • Atualização do SDK e server do Smartlive com interação;

  • Melhorias internas do produto;

  • Correção em frases da tela de retry em Inglês e Espanhol;

  • Correção do frame de documento others no desktop.


  • Atualização do SDK e server do Smartlive com interação;

  • Implementação de experiência de captura de selfie nos idiomas Inglês e Espanhol;

  • Correção em exceção lançada quando não há permissão de acesso a geolocalização;

  • Correção na abertura da câmera de documentos.


  • Atualização do SDK e server do Smartlive com interação;

  • Atualização de mensagem no final do fluxo de captura com Smartlive Interativo.


  • Atualização do SDK e server do Smartlive com interação;

  • Revisão dos textos de orientação ao usuário na captura biométrica.


  • Melhoria internas no produto, sem impacto externo.


  • Atualização do SDK e server do Smartlive com interação;

  • Melhoria em captura com Smartlive com interação no Samsung Internet Browser;

  • Possibilidade de utilizar ambientes de Uat ou Prod na mesma versão do SDK.


  • Melhoria de segurança na comunicação da SDK.


  • Atualização do SDK e server do Smartlive com interação.


  • Adição de nova forma de configuração que permite inserir as configurações do SDK pela classe UnicoConfig;

  • Hot fix: Correção em tratamento anti-injection para conflitos com o Sentry.


  • Atualização do SDK e server do Smartlive com interação;

  • Melhoria em tratamento anti-injection;

  • Melhoria na compatibilidade do SDK com frameworks mais antigos.


  • Hot fix: Correção em tratamento anti-injection para Motorola Edge;

  • Hot fix: Correção em validação de evento para browser Safari.


  • Melhorias de segurança voltadas a anti-injection;

  • Atualização da versão do SDK e Server do Smartlive com interação;

  • Correção em fechamento de câmera nos frames sem interação.


  • Suporte ao navegador Samsung internet;

  • Coleta de dados de uso, geolocalização e dispositivo (os dados coletados são usados para garantir a segurança do processo e melhorar a experiência do usuário).


  • Melhorias em tratamentos anti-injection;

  • Customização automática dos modos de alta e baixa luminosidade do Smartlive com interação;

  • Atualização da versão do SDK e Server do Smartlive com interação.


  • Implementação do cancelButton no Smartlive sem interação;

  • Adição do modo de Câmera Traseira ao Smartlive sem interação;

  • Adição de opacidade em botão principal do Smartlive com interação em caso de rosto desalinhado.


  • Atualização da versão do SDK do Smartlive com interação;

  • A partir dessa versão o SDK web conta com uma das ferramentas de ofuscação de código mais poderosas do mercado.


  • Compatibilidade dos frames das câmeras normal e inteligente ao uso de webview no instagram e facebook;

  • Atualização da versão do SDK do Smartlive com interação;

  • Hot fix: Correção na abertura do frame da câmera normal e da câmera inteligente.


  • Implementação do cancelButton do Smartlive com interação;

  • Hot fix: Retorno de erros de browsers não suportados;

  • Hot fix: Remoção do frame do Smartlive com interação após erro.


  • Hot fix: Correção da câmera invocada para captura de documentos em devices que possuem múltiplas câmeras


  • Atualização da versão do SDK do Smartlive.


  • Correção no frame de captura de CNH Aberta em desktop


  • Melhoria na qualidade da imagem retornada no base64;

  • Melhoria em requests de autenticação;

  • Correção para uso de WebCam na câmera de documentos.


  • Melhoria em tratamento anti-injection.


  • Lançamento de frames de captura de documentos com CNH frente e CNH verso;

  • Captura de documentos em modo paisagem no desktop.


  • Ajuste para utilização de função ao invés de classes;

  • Ajuste na inicialização da camera após a segunda abertura.


  • Ajuste na abertura da camera para Motorola Edge 20;

  • Ajuste nas informações criptografadas retornadas para o cliente.


  • Ajuste no fechamento da camera da FaceTec quando um erro é retornado.


  • Remoção da tela de permissão de camera da FaceTec.


  • Feature Flag para exibição do logo da unico.


  • Remoção do logo da unico.


  • Inclusão da funcionalidade de captura com liveness com interação.


  • Correção em um bug nas implementações em Angular > 6. Este bug deixava a tela congelada quando houvesse concorrência entre setTimeout's no SDK e a aplicação do cliente."


  • Remoção dos seguintes tipos de documentos utilizados no método initDocument():

    • 2: RG frente e verso;

    • 4: Novo RG frente e verso.

    Caso esteja utilizando os tipos mencionados acima (2 ou 4), realize a captura simples de cada documento através dos tipos:

    • 6: RG frente;

    • 7: RG verso;

    • 8: Novo RG frente;

    • 9: Novo RG verso.

  • Melhorias nos retornos callback de on.error e on.support;

  • Melhoria na mudança de orientação do celular;

    • Remoção da propriedade: boxOrientationHtml.

    • Caso a orientação mude, fechamos a câmera e retornamos no callback de erro;

  • Maior segurança no SDK;

  • Melhoria no objeto de retorno no método on.success, adicionando a propriedade encrypted que possui um JWT que deve ser enviado em menos de 10 minutos para integração com Unico check onboarding:

    {
        base64: string,
        encrypted: string
    }
  • Mudança no suporte a browsers.


Depreciações:

  • Remoção da lib js antiga e tornando esta a oficial.


  • Correção de silhueta grande em PWA.


  • Atualização de plugins externos para versões mais recentes corrigindo vulnerabilidades dos mesmos.


  • Correção de câmera invertida para capturas usando câmera traseira dos celulares.


  • Versão inicial.


QR Code

Nesta seção, você encontrará o funcionamento do fluxo com QR Code para experiências desktop


O by Unico disponibiliza a funcionalidade de QR code para facilitar o fluxo em dispositivos desktop. Através do QR code, é possível iniciar o By Unico em uma experiência web sem ter que se preocupar se o dispositivo do usuário possui câmera ou não. Dessa forma:

  • Diminuímos a chance de falha na captura biométrica;

  • Garantimos uma melhor experiência em outras capacidades;

  • Aumentamos as chances de conversão.

Solicite a ativação da funcionalidade para o responsável pelo seu projeto.


Quando o usuário inicia o By Unico através de um dispositivo desktop:

Identificamos que é um dispositivo desktop e oferecemos o QR code para possa continuar a jornada pelo celular:

Uma vez escaneado, o usuário segue sua jornada no celular normalmente, enquanto o dispositivo desktop aguarda sua conclusão:

O dispositivo desktop identifica que a jornada foi concluída no celular e redireciona o usuário para a experiência de origem:

Critérios de qualificação do dispositivo como desktop


  • Tamanho da tela: mínimo de 961px de largura;

  • Orientação da tela: paisagem;

  • User-Agent: não ser um dispositivo móvel.


SDK

Nesta seção, você encontrará como implementar o SDK da Unico na sua aplicação web para uso do by Unico


O uso de integrações que não estejam em conformidade com os padrões estabelecidos nesta documentação pode resultar em interrupções inesperadas no funcionamento do sistema, as quais não serão cobertas ou suportadas pelo by Unico.

Ex: Implementar o SDK (iFrame) dentro de uma webview, implementar iFrame através de uma tag de HTML, etc.

Como começar


Para utilizar o by Unico por meio do SDK do by Unico, o primeiro passo é cadastrar os domínios, sempre utilizando o protocolo HTTPS, que serão utilizados como host para exibir o iFrame da jornada do usuário no by Unico.

Sinalize o responsável pelo seu projeto de integração ou o time de suporte da Unico para realizar essa configuração.

Para começar a usar o SDK, é necessário realizar a instalação do SDK Web da Unico. Vale destacar que o "by Unico" utiliza o mesmo SDK empregado no IDPay.:

$ npm install idpay-b2b-sdk

Quando instalar o pacote do SDK da Unico, implemente sem especificar a versão que está utilizando e de modo que seu gerenciador de dependências atualize sempre os minors e patches para a versão mais recente.

Métodos disponíveis:


1

init(options)

Esse método inicializa o SDK, fazendo um pré-carregamento de assets, criando a experiência mais fluida para o usuário final. Nesse momento é preciso enviar o token recebido como resultado do CreateProcess.

Parâmetros:

  • options - é um objeto com as seguintes propriedades de configuração:

    • type

      • O tipo de fluxo que será inicializado. No by Unico utilizamos a opção "IFRAME".

    • token

      • Recebe o token do processo criado. Esse token é importante para conseguirmos autenticar a jornada e garantir que somente domínios autorizados utilizem-na (pode ser obtido na criação do processo via API).

import { UnicoSDK } from “idpay-b2b-sdk”;

UnicoSDK.init({
  type: 'IFRAME',
  env: 'uat'// Só irá ser preenchido se for ambiente de testes.
  token,
});
2

open(options)

Esse método realiza a abertura da experiência do by Unico. Para o fluxo do tipo IFRAME, essa função exibe o iframe já pré-carregado, e inicia o fluxo de mensageria entre a página do cliente e a experiência do by Unico.

Parâmetros:

options - é um objeto com propriedades de configuração:

  • processId

    • Recebe o ID do processo criado. Esse ID é importante para conseguirmos obter os detalhes do processo e realizarmos todo o fluxo da maneira correta (pode ser obtido na criação do processo via API).

  • token

    • Recebe o token do processo criado. Esse token é importante para conseguirmos autenticar a jornada e garantir que somente domínios autorizados utilizem-na (pode ser obtido na criação do processo via API).

  • onFinish(process)

    • Recebe uma função de callback que será executada no término da jornada do by Unico, passando como argumento o objeto do processo com os seguintes dados: { captureConcluded, concluded, id }

const processId = '9bc22bac-1e64-49a5-94d6-9e4f8ec9a1bf';
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';

const process = {
  id: '9bc22bac-1e64-49a5-94d6-9e4f8ec9a1bf',
  concluded: true,
  captureConcluded: true
};

const onFinishCallback = process => {
  console.log('Process', process);
}

UnicoSDK.open({
  transactionId: processId,
  token: token,
  onFinish: onFinishCallback
});

O diagrama de sequência abaixo demonstra como utilizar o SDK e o resultado da API do by Unico para configurar o iFrame:


Escolha pela Solução de Iframe com Auth Token em vez de CSP


Contexto e Desafios com CSP


Vulnerabilidade com Domínios Dinâmicos


Os domínios dinâmicos representam um risco substancial para a segurança ao usar CSP. Quando um cliente possui domínios que mudam com frequência ou são criados dinamicamente, seria necessário atualizar constantemente a política CSP para incluir esses novos domínios. Isso não só aumenta o esforço de manutenção, mas também expõe os domínios aos quais a política CSP se aplica. Cada domínio adicionado à política CSP é potencialmente um ponto de vulnerabilidade se não for adequadamente gerenciado.

Solução com Iframe e Auth Token


Para mitigar esses riscos e atender à flexibilidade exigida pelos nossos clientes, optamos por utilizar iframes combinados com tokens de autenticação. Esta solução oferece uma camada adicional de segurança e evita a necessidade de expor ou gerenciar uma lista extensa e dinâmica de domínios.


  • Autenticação Segura: Cada iframe é carregado com um token de autenticação exclusivo para cada transação, garantindo que apenas usuários autorizados possam acessar o conteúdo. Esse token é verificado em tempo real, proporcionando uma camada adicional de segurança e controle.

  • Isolamento de Conteúdo: O uso de iframes permite isolar o conteúdo em um contexto separado, reduzindo o risco de interferência entre diferentes origens e mitigando potenciais ataques.

  • Flexibilidade para Domínios Dinâmicos: Ao não depender de uma política CSP estática, nossa solução se adapta facilmente aos domínios dinâmicos dos clientes, sem a necessidade de atualização constante das políticas de segurança.


FAQ SDK

Nesta FAQ, você encontrará as dúvidas mais comuns relacionadas ao componente SDK da plataforma IDCloud


Qual a importância de implementar o SDK no seu projeto?


Os SDKs contam com recursos de criptografia e segurança contra injection de imagens, possuem recursos que auxiliam o usuário a obter fotos biometricamente válidas, reduzindo o drop das imagens quando comparados a captura realizada pelas câmeras padrões dos dispositivos. Além disso, é o pré-requisito para a utilização da capacidade de Prova de vida.

Qual é o diferencial do SDK da Unico?


Os SDKs da unico possuem funcionalidades de segurança anti fraude e usabilidade adaptados a diferentes fluxos, tais como: Liveness com interação, câmera inteligente, câmera normal e captura de documentos.

Quais as camadas de segurança dos SDKs da Unico?


Os SDKs possuem diversas camadas de segurança que funcionam de forma complementar, tanto no nivel da aplicação quanto em relação aos dados trafegados entre os SDKs e o backend. O SDK possui ofuscação de código, bloqueio de emulador e checagem de bundle do aplicativo que a está executando.

Quais os pré-requisitos para começar o desenvolvimento da SDK?


Android: É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

  • Possuir a versão 9 ou superior do Android Studio instalado (IDE oficial de desenvolvimento do Google);

  • Possuir a versão do SDK Android na versão 21 ou superior;

  • Possuir o repositório Maven da Unico configurado.

iOS: É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

  • Possuir a versão 16.0 ou superior do Xcode instalado (IDE oficial de desenvolvimento da Apple);

  • Possuir a versão do SDK iOS na versão 12 ou superior;

  • Possuir o gerenciador de dependências Cocoapods ou Swift Package Manager já configurado.

Flutter: É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

  • Possuir o Developer SDK do Flutter instalado.

Web: É necessário ter realizado a implantação do SDK Web em uma aplicação que contenha um domínio seguro com protocolo https.

Quais as versões mínimas de sistemas operacionais que a Unico suporta para Android, iOS e Web?


A SDK da Unico suporta as seguintes versões mínimas de sistemas operacionais:

  • Android: A partir da versão 5.1 (Lollipop).

  • iOS: A partir da versão 12.0.

  • Web: Não há nenhuma versão mínima de sistema operacional para Web, mas a SDK é compatível com os principais navegadores modernos.

Quais são os browsers compatíveis com a SDK?


iOS: Chrome, Firefox, Safari.

Android: Chrome, Samsung Internet.

MacOS (desktop): Chrome, Firefox, Safari.

Windows (desktop): Chrome, Firefox.

Qual é o tamanho do SDK Android?


O SDK Android da Unico aumenta o tamanho do seu aplicativo em 30MB.

Qual é o tamanho do SDK iOS?


O SDK iOS da Unico aumenta o tamanho do seu aplicativo em 29.9MB.

A SDK pode ser usada em ambientes híbridos, como Flutter ou React Native?


Possuímos o plugin de Flutter, portanto a implementação será mais simples. Em relação a outros frameworks híbridos, como React Native ou Ionic, você precisará implementar a SDK da Unico em uma camada nativa e criar uma “bridge” para compatibilizar o framework com a SDK.

É importante mencionar que o nosso suporte é restrito a aplicativos desenvolvidos diretamente nas plataformas nativas Android e iOS, utilizando seus respectivos módulos nativos, além do framework Flutter (se a implementação for utilizando nosso plugin). No momento, não oferecemos suporte para aplicativos desenvolvidos em frameworks híbridos, como React Native, Ionic ou outras tecnologias de desenvolvimento multiplataforma.

Como obtenho as credenciais para implementar SDK?


Qual objeto retornado pela SDK eu devo enviar na API?


O objeto que deve ser enviado na API após a utilização do SDK da Unico é o objeto encrypted. Este objeto contém as informações necessárias, de forma segura e criptografada, para a validação de identidade e autenticação.

Qual é o tamanho JWT gerado pelo SDK?


Não garantimos um tamanho exato do JWT porque a Unico constantemente evolui suas tecnologias e pode realizar modificações que alterem para mais ou para menos o tamanho médio de um JWT. Por conta dessas condições, garanta que sua aplicação não restrinja o tamanho do JWT a um valor fixo durante a integração com o SDK.

Qual a rigidez da segurança do JWT? Qual o nível de criptografia?


Os arquivos trafegam em um canal seguro usando criptografia TLS na versão 1.3. Cada arquivo também é criptografado usando o formato JWS (Json Web Signature), que contém as informações da criptografia, os dados a serem enviados e uma assinatura para o token gerado. A principal ferramenta de segurança do JWS é a assinatura, que é invalidada caso o conteúdo seja alterado. Além disso, os prazos de expiração dos tokens são curtos, então a janela para qualquer ataque é pequena.

Posso abrir o objeto encrypted para obter o base64 da foto do usuário?


O encrypted, que é um objeto JWT que deve ser deve ser enviado na chamada das APIs REST. O JWT (Encrypted) deve ser utilizado estritamente durante o envio da imagem através das APIs da Unico. Não se deve abrir e/ou serializar esse atributo, pois suas características podem ser alteradas sem aviso prévio. Seu uso deve ser exclusivo nas interações com as APIs para garantir a integridade e segurança dos dados. A Unico não se responsabiliza por quaisquer danos decorrentes dessa prática, uma vez que as modificações podem ocorrer de maneira imprevista. Como dito, a SDK já fornece o atributo Base64 para obter a imagem em questão.

A SDK oferece suporte para dispositivos mais antigos?


A SDK da Unico oferece suporte para sistemas operacionais que existem há muito tempo no mercado, como Android: A partir da versão 5.1 (Lollipop) e iOS: A partir da versão 12.0. Portanto, de forma indireta damos suporte para dispositivos antigos que contenham versões iguais ou superiores às versões de sistemas operacionais mencionados anteriormente.

É possível alterar os textos da SDK?


Não, atualmente não é possível customizar os textos da SDK, somente seu idioma.

É possível personalizar o idioma da SDK?


É possível configurar a experiência das mensagens informativas dos frames de captura alterando seu idioma. Utilize o enumerado LocaleTypes que contém os seguintes valores:

  • LocaleTypes.PT_BR: para Português(Brasil);

  • LocaleTypes.ES_MX: para Espanhol(México);

  • LocaleTypes.ES_ES: para Espanhol(Espanha);

  • LocaleTypes.EN_US: para Inglês(EUA).

OBS: Pode ser necessário uma ativação remota para ser utilizado, caso deseje usar, por favor acionar o CSM da conta. Caso não seja configurado, por padrão o SDK utiliza o Português como idioma principal.

É possível customizar o Layout da câmera?


É possível. Tanto para Android, iOS e JS, são disponibilizados métodos para a customização. Para saber mais basta clicar na documentação respectiva. Exemplo: ao clicar no ícone do Android, as funcionalidades são apresentadas. Selecionar “customizações” Android e iOS. Em implementação, todos os itens que podem ser customizados e as demais especificações são apresentados.

A SDK da Unico funciona com iFrames?


É possível utilizar o SDK Web com Liveness Interativo embarcado em um iFrame, para isso é preciso realizar uma implementação semelhante a seção anterior na preparação da câmera. A preparação da câmera será efetuada através do método prepareSelfieCameraForIFrame(), também disponibilizado a partir do builder. Este método recebe os mesmos parâmetros do prepareSelfieCamera().

A SDK da Unico funciona em webviews?


Sim, a SDK da Unico pode funcionar em webviews. Isso permite que você integre as funcionalidades de autenticação de identidade e captura de documentos em aplicativos que utilizam webviews para exibir conteúdo web. Para garantir uma implementação correta e verificar quaisquer limitações ou considerações específicas ao usar a SDK em webviews, recomendo consultar a documentação oficial da Unico.

A SDK funciona em câmera traseira?


Atualmente a SDK da Unico não é compatível com câmeras traseiras.

Quais documentos consigo capturar com a SDK da Unico?


A captura dos seguintes tipos de documentos está disponível:

  • CNH: Captura da CNH aberta;

  • CNH frente: Captura da frente da CNH;

  • CNH verso: Captura do verso da CNH;

  • CPF: Captura do documento de CPF;

  • RG frente: Captura da frente do RG;

  • RG verso: Captura do verso do RG;

  • Novo RG frente: Captura a frente do novo tipo de RG;

  • Novo RG verso: Captura o verso do novo tipo de RG;

  • Outros: Captura documento genérico.

Como faço para saber sobre novas atualizações do SDK?


Existem duas formas de saber sobre as atualizações do SDK:

  • Consulte o CSM da sua conta para que ele possa inseri-lo no nosso mailing de comunicação;

  • Acesse a nossa documentação regularmente para consultar o release notes.

Como faço para baixar as novas atualizações do SDK?


Para baixar as novas atualizações, primeiro confira o descritivo da versão no Release Notes - que se encontra na documentação - e posteriormente incremente a tag de implementação dentro do seu projeto.

Quando saber que o SDK possui versões mais atualizadas do que a que estou usando?


É possível se inscrever, junto ao gerente de contas, no newsletter da Unico. Assim as novidades são recebidas através do email. Também é possível saber através da documentação, na aba de Release Notes, onde se encontram as informações sobre as últimas atualizações do SDK.

Conflitos entre arquivos AndroidManifest envolvendo o meta-data com.google.mlkit.vision.DEPENDENCIES. O que fazer?


Em cenários onde ocorrem conflitos entre os arquivos de AndroidManifest envolvendo dependências com.google.mlkit.vision, basta adicionar a tag tools:replace="android:value" dentro do meta-data.


FAQ Autenticação

Nesta FAQ, você encontrará as dúvidas mais comuns relacionadas à autenticação da plataforma IDCloud


A Unico possui integração via SSO?


Sim, a Unico oferece integração via Single Sign-On (SSO). Essa funcionalidade permite que os usuários se autentiquem uma única vez e acessem múltiplos serviços ou aplicações sem precisar fazer login novamente em cada um deles.

É possível fazer uma requisição com os valores do “iat” e “exp” sendo os mesmos?


Não! Os valores de exp e iat precisam ser diferentes. O valor de iat é o momento atual de sua requisição e o valor de exp é o valor de iat acrescido de 3600 segundos.

O que é uma chave privada?


As chaves privadas são variáveis criptográficas utilizadas como algoritmos para encriptar e decriptar informações. Através da chave privada será possível que somente sua aplicação consiga fazer solicitações de tokens de acesso para a unico. O token de acesso permite que sua aplicação utilize nossos serviços, sendo assim, precisamos garantir que só quem possui a chave privada possa obter esse acesso.

Em que lugar obter a chave privada?


A chave privada deve ser solicitada para o executivo responsável pela sua empresa. A solicitação é enviada para o e-mail cadastrado como responsável pela conta.

Como calcular “iat” e “exp”?


De quanto em quanto tempo é necessário renovar o token de acesso?


O token de acesso possui uma duração padrão de 3600 segundos (1 hora), mas esse valor pode sofrer alterações de acordo com a configuração de segurança estabelecida pela unico para sua empresa. Esse valor pode sofrer alterações sem aviso prévio, de acordo com as configurações de segurança aplicadas, por este motivo utilize o campo <expires_in>, devolvido juntamente com o token de acesso <access_token>, para calcular o tempo necessário para obtenção de um novo token.

Quando o ambiente de produção é liberado?


O ambiente de produção é liberado após a realização de todos os testes mínimos do produto que está sendo testado no ambiente de homologação. O Gerente de Projetos será o responsável pelo acompanhamento dos testes e pela solicitação da liberação do ambiente de produção.

Qual a diferença entre o processo de autenticação de homologação e produção?


O processo para autenticação segue o mesmo padrão nos ambientes de produção e homologação. Porém, as informações utilizadas para gerar o token são diferentes:

  • A chave privada é diferente para cada ambiente. Tenha certeza de estar utilizando a chave correta.

  • O campo “iss”, no payload do JWT, tem a mesma composição nos dois ambientes, mas as informações são diferentes. O “tenant ID” e o “service account name” são específicos para cada ambiente. Você recebe essas informações ao gerar a chave privada para a conta de serviço, ou pode solicitá-las ao Gerente de Projetos.

  • O Campo “aud”, no payload do JWT, tem URLs diferentes para cada ambiente, como segue abaixo:

  • O endpoint utilizado na chamada também é diferente. Veja a seguir:


Personalizações

Nesta seção, você encontrará todas as personalizações disponíveis no by Unico


O by Unico oferece algumas opções de personalização em sua interface, permitindo que você a adapte à identidade visual da empresa e proporcione um visual personalizado da jornada.

Personalizações disponíveis:


Personalização do Logotipo


É possível personalizar o logotipo exibido aos usuários que acessam as jornadas do by Unico. Essa personalização reforça a parceria entre a empresa e a Unico, indicando que a verificação é realizada pela Unico a pedido do cliente ou parceiro.

Para solicitar a inclusão do logotipo, envie ao time da Unico uma URL onde o logotipo esteja hospedado em um diretório online (ou seja, o logotipo precisa ser acessível via URL no navegador).

Não é possível cadastrar uma URL que seja um base64 (geralmente essas URLs iniciam em "data:image/jpeg;base64,/9j/4AAQ...").

Recomendações:

  • Envie o logotipo preferencialmente no formato de logo ícone, devido à sua melhor legibilidade em tamanhos reduzidos.

Regras:

  • Certifique-se de que o logotipo seja quadrado, respeite o grid proporcional e garanta que seja exportado com no mínimo 192x192 pixels.

  • Formatos aceitos: SVG, PNG e JPEG.

Formatos de logotipo não aceitos


Regras:

  • Priorize a aplicação do logotipo em planos de fundo que garantam a legibilidade.

  • Não utilize logotipos que não respeitem o grid quadrado.

  • Evite o uso de logotipos em baixa resolução.

  • Não aplique o logotipo em fundos transparentes.

Recomendações:

    • Utilize o hexadecimal das cores para verificar a escala de contraste. Exemplo: Foreground ColorPicker: #000000, Background Color: #FFFFFF, Contrast Ratio: 21.00:1.

Personalização da cor e formato dos botões


Personalize os botões de ação do by Unico. Defina a cor do texto, fundo e arredondamento dos cantos do botão para reforçar a identidade visual da sua empresa.

Recomendações:

  • Escolha cores acessíveis: Ao personalizar as cores dos botões no by Unico, opte por um esquema de cores acessível, que garanta a visualização para todos os usuários, incluindo aqueles com deficiência visual.

  • Taxas de contraste: Busque uma taxa de contraste superior a 4.51:1 para obter os melhores resultados.

  • Exemplo: #FFFFFF (texto) em #000000 (fundo) resulta em uma taxa de contraste de 21.00:1.

Arredondamento dos cantos no botão


Além das cores do texto e de fundo, você também pode definir o arredondamento dos cantos (border radius) em pixels, conforme a escala abaixo:

Configurações de personalização


Para realizar as configurações da identidade visual do cliente ou parceiro para o botão, compartilhe com o time de implantação da Unico as seguintes informações:

  • Código hexadecimal da cor de background no botão.

    • Ex: #000000.

  • Código hexadecimal da cor de texto no botão.

    • Ex: #ffffff.

  • Arredondamento dos cantos no botão em pixels.

    • Ex: 10px.

Personalização da tela de contextualização


O módulo de contextualização do by Unico permite que o cliente ou parceiro forneça informações sobre a verificação, como empresa solicitante, motivo e valor da operação, tornando o processo mais seguro

O trecho da requisição a ser alterado é o seguinte:

"contextualization": {
    "currency": "BRL",
    "price": "<FLOAT_NUMBER>",
    "locale": {
      "ptBr": {
        "reason": "<REASON_PTBR>"
      },
      "enUs": {
        "reason": "<REASON_ENUS>"
      },
      "esMX": {
        "reason": "<REASON_ESMX>"
      }

Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

sucess
message
data
Descrição
Message
StatusCode
Errors

Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

sucess
message
data
Descrição
code
message
Descrição
code
message
Descrição
code
message
Descrição
code
message
Descrição
code
message
Descrição
code
message
Descrição
code
message
Descrição

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

.

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Web de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

A partir da versão 3.18.0, para que o SDK busque automaticamente os recursos adicionais basta que o método setResourceDirectory não seja implementado e as sejam aplicadas corretamente.

A classe UnicoConfig obtida ;

Comportamento em tela cheia

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o encrypted gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Este guia foi elaborado para ajudá-lo a implementar o SDK Web de forma rápida e fácil. Abaixo veja o passo a passo de todo o processo de integração. Após isso, caso deseje personalizar a experiência, não deixe de ver a seção .

Você pode conferir um exemplo de implementação através de um projeto (Angular).

A classe UnicoConfig obtida ;

A captura das imagens é apenas a primeira parte da jornada. Após capturar a imagem, é necessário enviar o base64 gerado pelo SDK para as APIs REST do by Client. Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Possíveis erros do openCamera

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Saiba mais na seção .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

PoCs em ambiente webview

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

A Unico fornece um conjunto de POC (Prova de Conceito) que são implementações nas diversas linguagens suportadas pela SDK que apresentam exemplos funcionais de código com os fluxos e métodos no contexto da SDK, para fins didáticos, facilitando o entendimento da sequência esperada e sua adaptação para o código a ser implementado pelos nossos clientes. Você pode consultar as POCs disponíveis e solicitá-las via abertura de ticket com nosso time de atendimento através do .

Para mais detalhes, consulte a .

Android: [];

IOS: [];

Flutter: [];

Web: [].

Não utilize virtualização

Android: ;

IOS: .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

O versionamento semântico é utilizado para numerar as versões. Para mais informações, consulte o artigo .

Versão 3.18.8 - 24/10/2024

Versão 3.18.7 - 15/10/2024

Versão 3.18.6 - 26/09/2024

Versão 3.18.5 - 11/09/2024

Versão 3.18.4 - 02/09/2024

Versão 3.18.3 - 22/08/2024

Versão 3.18.2 - 06/08/2024

Versão 3.18.1 - 31/07/2024

Versão 3.18.0 - 25/07/2024

Versão 3.17.0 - 04/07/2024

Versão 3.16.4 - 29/06/2024

Versão 3.16.3 - 04/06/2024

Versão 3.16.2 - 30/05/2024

Versão 3.16.1 - 02/05/2024

Versão 3.16.0 - 22/04/2024

Versão 3.15.1 - 09/04/2024

O SDK Web emprega Web Workers para aprimorar a segurança e a performance. Para garantir a funcionalidade desses workers ao usar a Content Security Policy (), adicione as seguintes configurações à sua política:

Versão 3.15.0 - 25/03/2024

Versão 3.14.1 - 14/03/2024

Versão 3.13.1 - 28/02/2024

Versão 3.13.0 - 22/02/2024

Versão 3.12.1 - 07/02/2024

Versão 3.11.1 - 22/01/2024

Versão 3.11.0 - 16/01/2024

Versão 3.10.6 - 11/01/2024

Versão 3.10.5 - 15/12/2023

Versão 3.10.4 - 12/12/2023

Versão 3.10.3 - 04/12/2023

Versão 3.10.2 - 28/11/2023

Versão 3.10.1 - 14/11/2023

Versão 3.10.0 - 16/10/2023

Versão 3.9.4 -12/09/2023

Versão 3.9.3 - 05/09/2023

Versão 3.9.2 - 18/08/2023

Versão 3.9.1 - 30/07/2023

Versão 3.9.0 - 18/07/2023

Versão 3.8.3 - 20/06/2023

Versão 3.8.2 - 17/05/2023

Versão 3.8.1 - 28/04/2023

Versão 3.8.0 - 24/04/2023

Versão 3.7.2 - 31/03/2023

Versão 3.7.1 - 28/03/2023

Versão 3.7.0 - 15/02/2023

Versão 3.6.5 - 03/02/2023

Versão 3.6.4 - 06/01/2023

Versão 3.6.3 - 26/12/2022

Versão 3.6.2 - 07/12/2022

Versão 3.6.1 - 17/11/2022

Versão 3.6.0 - 03/11/2022

Versão 3.5.4 - 19/09/2022

Versão 3.5.3 - 23/08/2022

Versão 3.5.2 - 25/07/2022

Versão 3.5.1 - 28/06/2022

Versão 3.5.0 - 17/06/2022

Versão 3.4.3 - 18/04/2022

Versão 3.4.2 - 12/04/2022

Versão 3.4.1 - 04/04/2022

Versão 3.4.0 - 04/04/2022

Versão 3.3.1 - 22/03/2022

Versão 3.3.0 - 10/03/2022

Versão 3.2.2 - 18/02/2022

Versão 3.2.1 - 17/02/2022

Versão 3.1.0 - 31/01/2022

Versão 3.0.1 - 25/01/2022

Versão 3.0.0 - 24/01/2022

Versão 2.0.3

Versão 2.0.2

Versão 1.0.0

Versão 0.0.6

Versão 0.0.5

Versão 0.0.4

Versão 0.0.3

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Como funciona?

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Para verificar versões anteriores, acesse .

Segurança

Após uma análise cuidadosa das necessidades e desafios que enfrentamos, decidimos adotar uma solução baseada em iframes com tokens de autenticação ao invés de implementar uma política de Content Security Policy (CSP). Essa escolha foi motivada por diversas considerações relacionadas à segurança e à flexibilidade necessárias para atender às demandas dos nossos clientes.

O Content Security Policy (CSP) é uma ferramenta poderosa para proteger aplicações web contra diversos tipos de ataques, como Cross-Site Scripting (XSS) e injeção de código. No entanto, ao configurar uma política CSP, é necessário definir uma lista rígida de domínios confiáveis. Essa abordagem é eficaz quando os domínios são fixos e previsíveis. No entanto, para nossos clientes, que frequentemente utilizam domínios dinâmicos e variáveis, essa configuração rígida apresenta desafios significativos.

Como funciona

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Para obter as credenciais de utilização da SDK, fale com o CSM responsável pela sua conta ou no contate via suporte através da central de ajuda: .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

A chave pública é necessária para conseguir o token de acesso aos produtos da unico?

Não! A chave pública é utilizada por nós para validar a requisição feita pela sua aplicação. Caso sua aplicação precise também da chave pública, você pode solicitá-la para o executivo responsável pela sua empresa, ou até mesmo gerar uma nova através de sua chave privada, utilizando o comando openssl encontrado .

No site é possível encontrar os métodos para obtenção dos valores para estes campos em diversas linguagens de programação.

Produção:

Homologação:

Produção:

Homologação:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Ex: .

Personalização do logotipo
Grids de logotipo aceitos
Formato de logotipo não aceitos

Priorize cores com contraste legível de no mínimo 4.5:1, seguindo os parâmetros de acessibilidade da .

Personalização do botão
Exemplos de contraste

Cores acessíveis facilitam a navegação para todos, especialmente para pessoas com baixa visão. Utilize o hexadecimal das cores para verificar o contraste e siga as recomendações da .

Arredondamento dos cantos no botão
Tela de contextualização no by Unico

Para personalizar as informações na tela de contextualização, altere os valores dos parâmetros contidos no objeto contextualization no momento de realizar a chamada .

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

9.7.61
9.7.55
9.7.51
9.7.47
9.7.45
9.7.41
9.7.39
9.7.36
9.7.33
9.7.31
9.7.29
9.7.27
9.7.25
9.6.92
9.6.89
9.6.85
9.6.84
9.6.73
9.6.65
9.6.56
9.6.53
9.6.40
9.6.38
9.6.33
9.6.30
9.6.26
9.6.24
9.6.16
9.6.11
9.6.4
9.4.18
9.4.14
9.4.11
​
Central de Ajuda
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden
​
Central de Ajuda
Personalização Web
configurações de CSP para uso do SDK
neste passo
​
CreateProcess do by Client
​
Central de Ajuda
Personalização Web
nesta página
neste passo
CreateProcess do by Client
​
Central de Ajuda
​
Central de Ajuda
​
​
Central de Ajuda
Fluxos possíveis
​
Central de Ajuda
​
​
Central de Ajuda
neste link
portal de clientes
política de atualizações das SDKs
lista de versões
lista de versões
lista de versões
lista de versões
​
Link documentação ofuscação Android
Link documentação ofuscação IOS
​
Central de Ajuda
Visão Geral
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
CSP
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Central de Ajuda
​
​
Central de Ajuda
https://www.npmjs.com/package/idpay-b2b-sdk?activeTab=versions
​
​
​
​
​
Central de Ajuda
https://empresas.unico.io/hc/pt-br/p/atendimentoparaempresas
​
Central de Ajuda
​
aqui
EpochConverter
https://identity.acesso.io
https://identityhomolog.acesso.io
https://identity.acesso.io/oauth2/token
https://identityhomolog.acesso.io/oauth2/token
​
Central de Ajuda
https://storage.googleapis.com/portal-orca-unico-prod/apps/orca/logo-default.png
WCAG
WCAG
CreateProcess
​
Central de Ajuda

false

Falha ao consultar o arquivo do documento.

Documento não existe.

O id do documento informado não existe

Not Found - Documento não existe

404

null

false

Falha ao consultar o arquivo do documento.

Documento não existe.

O id do documento informado não existe

20023

O parâmetro processId não foi informado.

Falta o parâmetro id do processo.

20002

O parâmetro APIKey não foi informado.

Falta o parâmetro APIKEY no header da requisição.

20001

O parâmetro authtoken não foi informado.

QFalta o parâmetro do token de integração no header da requisição.

50001

O processo informado não foi encontrado.

O processo não existe na base de dados.

30017

O usuário não tem permissão para executar está ação.

Quando o access-token utilizado contém caracteres errados.

10502

O token informado está expirado.

Quando o access-token utilizado expirou.

10501

O token informado é inválido.

O token de autenticação é inválido.

10201

O AppKey informado é inválido.

O parâmetro APIKEY não foi informado ou não existe.

99999

Internal failure! Try again later

Quando há algum erro interno.

20900

O base64 informado não é válido.

O parâmetro base64 é inválido. Possíveis causas: Não é uma imagem ou é uma tentativa de injection.

20807

A imagem precisa estar no padrão HD ou possuir uma resolução superior a 640 x 480.

A resolução da imagem enviada é muito pequena.

20507

O parâmetro subject.code é inválido.

CPF fora do padrão ou inexistente.

20506

O base64 informado é muito grande. O tamanho máximo suportado é até 800kb.

Quando o e-mail informado não é vA imagem é muito grande. A imagem pode ser comprimida para JPEG92 sem perda de qualidade.

20505

O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp.

Quando o telefone informado não é válBase64 inválido. Possíveis causas: não é uma imagem válida ou prefixo inválido.

20009

O parâmetro imagebase64 não foi informado.

Falta o parâmetro imagebase64, que contém a selfie da pessoa.

20006

O parâmetro subject.name não foi informado.

Falta o parâmetro subject.name, que contém o nome da pessoa.

20005

O parâmetro subject.code não foi informado.

Falta o parâmetro subject.code, que contém o cpf da pessoa.

20004

O parâmetro subject não foi informado.

Falta o parâmetro subject, que contém os dados da pessoa (cpf, nome).

20003

The request body is missing or invalid.

Payload nulo ou inválido.

20002

O parâmetro APIKey não foi informado.

Falta o parâmetro APIKEY no cabeçalho da requisição.

20001

O parâmetro authtoken não foi informado

Falta o parâmetro do token de integração no cabeçalho da requisição.

10508

The JWT with the captured face has already been used.

O .jwt só pode ser usado uma única vez.

10507

The JWT with the captured face is expired.

JWT expirado. O .jwt deve ser enviado em até 10 minutos.

10506

The bundle is invalid.

Bundle inválido. APIKEY usa um método de segurança e esta solicitação não atende aos requisitos de segurança (SDK).

30017

Jwt header is an invalid JSON.

Quando o access-token utilizado contém caracteres errados.

10502

O token informado está expirado.

Quando o access-token utilizado expirou

10501

O token informado é inválido.

O token de autenticação é inválido.

10201

O AppKey informado é inválido.

O parâmetro APIKEY não foi informado ou não existe.

99999

Internal failure! Try again later

Quando há algum erro interno.

Criar Processo

post

Endpoint para criar um novo processo de prova de vida + verificação de identidade + alerta de comportamento no by Client.

Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com as capacidades prova de vida + verificação de identidade + alerta de comportamento habilitadas.

Corpo
useCasestringObrigatório

Caso de uso da operação.

Example: Onboarding
subsidiaryIdstringOpcional

o ID da filial onde o processo será criado. Caso haja somente uma filial associada a conta de serviço, não há a necessidade de passar este parâmetro. Caso haja separação de processos por filial, você receberá os IDs das filiais do time Unico.

Example: 35d734c4-7fbb-4b2f-a1dc-7e1575514819
imageBase64stringObrigatório

Arquivo encrypted gerado pelo SDK ou base64 (caso não utilize a Prova de vida).

Example: /9j/4AAQSkZJR...
Respostas
200
Processo criado com sucesso.
application/json
400
Payload inválido.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
post
POST /processes/v1 HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Content-Type: application/json
Accept: */*
Content-Length: 215

{
  "subject": {
    "code": "12345678909",
    "name": "Luke Skywalker",
    "email": "luke@unico.io",
    "phone": "551972557070"
  },
  "useCase": "Onboarding",
  "subsidiaryId": "35d734c4-7fbb-4b2f-a1dc-7e1575514819",
  "imageBase64": "/9j/4AAQSkZJR..."
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "identityFraudsters": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Criar Processo

post

Endpoint para criar um novo processo de prova de vida + validação 1:1 + Alerta de comportamento no by Client.

Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com as capacidades prova de vida + validação 1:1 + alerta de comportamento habilitadas.

Corpo
referenceProcessIdstringObrigatório

Identificador do processo que foi gerado durante a criação da transação biométrica, cuja foto será usada para comparação.

Example: 80371b2a-3ac7-432e-866d-57fe37896ac6
subsidiaryIdstringOpcional

o ID da filial onde o processo será criado. Caso haja somente uma filial associada a conta de serviço, não há a necessidade de passar este parâmetro. Caso haja separação de processos por filial, você receberá os IDs das filiais do time Unico.

Example: 35d734c4-7fbb-4b2f-a1dc-7e1575514819
imageBase64stringObrigatório

Arquivo encrypted gerado pelo SDK ou base64 (caso não utilize a Prova de vida).

Example: /9j/4AAQSkZJR...
Respostas
200
Processo criado com sucesso (Usuário autenticado).
application/json
400
Payload inválido.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
post
POST /processes/v1 HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Content-Type: application/json
Accept: */*
Content-Length: 252

{
  "subject": {
    "code": "12345678909",
    "name": "Luke Skywalker",
    "email": "luke@unico.io",
    "phone": "551972557070"
  },
  "referenceProcessId": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "subsidiaryId": "35d734c4-7fbb-4b2f-a1dc-7e1575514819",
  "imageBase64": "/9j/4AAQSkZJR..."
}
{
  "id": "fda9bdb4-00cd-4ddb-bfea-d8cfe78eaa34",
  "status": 3,
  "identityFraudsters": {
    "result": "yes"
  },
  "biometryToken": {
    "result": "true"
  },
  "liveness": 1
}

Consultar Resultado do Processo

get

Endpoint para buscar o resultado de um processo de prova de vida + verificação de identidade + alerta de comportamento + score de risco no by Client.

Parâmetros de rota
processIdstringObrigatório

ID do processo.

Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com as capacidades prova de vida + verificação de identidade + alerta de comportamento + score de risco habilitadas.

Respostas
200
Informações do processo obtidas com sucesso.
application/json
400
Payload inválido.
application/json
403
Falta o parâmetro APIKEY no header da requisição.
application/json
404
Quando o processo não é encontrado.
application/json
410
Processo criado com erro.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get
GET /processes/v1/{processId} HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Accept: */*
{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "unicoId": {
    "result": "inconclusive"
  },
  "score": 50,
  "identityFraudsters": {
    "result": "inconclusive"
  },
  "liveness": 1
}
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub
GitHub

Criar Processo

post

Endpoint para criar um novo processo de prova de vida + verificação de identidade + alerta de comportamento + score de risco no by Client.

Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com as capacidades prova de vida + verificação de identidade + alerta de comportamento + score de risco habilitadas.

Corpo
useCasestringObrigatório

Caso de uso da operação.

Example: Onboarding
subsidiaryIdstringOpcional

o ID da filial onde o processo será criado. Caso haja somente uma filial associada a conta de serviço, não há a necessidade de passar este parâmetro. Caso haja separação de processos por filial, você receberá os IDs das filiais do time Unico.

Example: 35d734c4-7fbb-4b2f-a1dc-7e1575514819
imageBase64stringObrigatório

Arquivo encrypted gerado pelo SDK ou base64 (caso não utilize a Prova de vida).

Example: /9j/4AAQSkZJR...
Respostas
200
Processo criado com sucesso.
application/json
400
Payload inválido.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
post
POST /processes/v1 HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Content-Type: application/json
Accept: */*
Content-Length: 215

{
  "subject": {
    "code": "12345678909",
    "name": "Luke Skywalker",
    "email": "luke@unico.io",
    "phone": "551972557070"
  },
  "useCase": "Onboarding",
  "subsidiaryId": "35d734c4-7fbb-4b2f-a1dc-7e1575514819",
  "imageBase64": "/9j/4AAQSkZJR..."
}
{
  "id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
  "status": 1,
  "unicoId": {
    "result": "inconclusive"
  },
  "identityFraudsters": {
    "result": "inconclusive"
  },
  "liveness": 1
}

Guia de instalação

Nesta seção, você encontrará todas as informações necessárias para instalação do SDK da plataforma Unico IDCloud em seus aplicativos Flutter


Pré-requisitos do ambiente de desenvolvimento


É necessário que seu ambiente de desenvolvimento esteja de acordo com os seguintes pré-requisitos:

O componente de captura disponibilizado por meio do SDK Flutter dá suporte às versões igual ou superiores para as tecnologias:

  • Android: 5.0 (API 21);

  • iOS: 11.

Dispositivos compatíveis


Este SDK não funciona em emuladores, somente em dispositivos físicos.

Dispositivos iOS:

  • iOS: é compatível com quase todos os dispositivos que possuam iOS 11.

Dispositivos Android:

  • É compatível com a grande maioria dos dispositivos que possuam Android 5.0 (API de nível 21) ou versões superiores;

A tabela a seguir lista os dispositivos testados em laboratório, além da disponibilidade das extensões do fornecedor/fabricante. Algumas extensões listadas podem estar sujeitas as API ou SKUs específicos do fabricante. Clique abaixo para ver os dispositivos testados:

Instalando o SDK Flutter


Para implementar o SDK Flutter da plataforma Unico IDCloud ao seu aplicativo Flutter, siga o passo a passo listado abaixo:

1

Utilizando o CLI do Flutter

Para adicionar o SDK Flutter do Unico Check ao seu projeto, execute o seguinte comando utilizando o CLI do flutter:

Este comando adiona a seguinte linha no arquivo pubspec.yaml de seu pacote:

Obter pacotes manualmente: o comando flutter pub add unico_check dispara implicitamente o comando flutter pub get. Caso o pacote não tenha sido instalado corretamente, certifique-se que o unico_check em seu arquivo pubspec.yaml e rode o flutter pub get manualmente.

2

Permissões para utilização da Câmera e Internet

Para utilizar o método de abertura de câmera em seu projeto é necessário adicionar as permissões antes de compilar a sua aplicação. Segue o exemplo:

3

Inclusão da dependência

Após configurar o SDK Android, basta importá-lo em seu projeto. Para isto, adicione Após configurar o SDK Flutter, basta importa-lo em seu projeto. Para isto, importe o pacote em código Dart:

4

Obtendo as credenciais

  • Entre em contato com o CSs e/ou time de Onboarding.

  • Solicite a SDK Key informando os identificadores de suas aplicações. Bundle Identifier para iOS, PackageID para Android e Host para WEB.

  • Os identificadores de suas aplicações serão vinculados a SDK Key pela equipe da Unico.

  • Você recebe a sua SDK Key para implementar o AcessoBioConfigDataSource.

5

Embarcando as credenciais em seu projeto

Para embarcar a SDK Key ao projeto, implemente o protocolo AcessoBioConfigDataSource em sua classe:

Método depreciado - Dart


Você pode conferir a lista com esses dispositivos nos oficiais da Apple.

Pronto. Finalizada a instalação do SDK, siga para a implementação lendo o material a seguir:

Dúvidas?

Não encontrou algo ou ainda precisa de ajuda? Se já é um cliente ou parceiro, pode entrar em contato através da .

Logotipo
Botões
Contextualização
$ flutter pub add unico_check
dependencies:
  unico_check: ^2.0.2
<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>
main.dart
import 'package:unico_check/unico_check.dart';
final _configIos = UnicoConfig(
      getBundleIdentifier: "Your BundleIdentifier Ios",
      getHostKey: "Your HostKey Ios"); 

  final _configAndroid = UnicoConfig(
      getBundleIdentifier: "Your BundleIdentifier Android",
      getHostKey: "Your HostKey Android");

  void initUnicoCamera() {
    _unicoCheck = new UnicoCheck(
        listener: this,
        unicoConfigIos: _configIos,
        unicoConfigAndroid: _configAndroid);
  }

  final _configIos = UnicoConfig(
      getProjectNumber: "Your ProjectNumber Ios",
      getProjectId: "Your ProjectId Ios",
      getMobileSdkAppId: "Your MobileSdkAppId Ios",
      getBundleIdentifier: "Your BundleIdentifier Ios",
      getHostInfo: "Your HostInfo Ios",
      getHostKey: "Your HostKey Ios");

  final _configAndroid = UnicoConfig(
      getProjectNumber: "Your ProjectNumber Android",
      getProjectId: "Your ProjectId Android",
      getMobileSdkAppId: "Your MobileSdkAppId Android",
      getBundleIdentifier: "Your BundleIdentifier Android",
      getHostInfo: "Your HostInfo Android",
      getHostKey: "Your HostKey Android");

@override
  void initState() {
    super.initState();
    initUnicoCamera();
    configUnicoCamera();
  }

  void initUnicoCamera() {
    _unicoCheck = new UnicoCheck(
        listener: this,
        unicoConfigIos: _configIos,
        unicoConfigAndroid: _configAndroid);
  }

code
message
Descrição

3

process id is invalid

Quando o id de processo é inválido.

message
Descrição

Jwt header is an invalid JSON

Quando o access-token utilizado contém caracteres errados.

Jwt is expired

Quando o access-token utilizado expirou

code
message
Descrição

5

error getting process: rpc error: code = NotFound desc = process not found

Quando o id do processo não foi encontrado

Não será fornecido nenhum código de erro detalhado para esta situação, apenas o código de status HTTP.

code
message
Descrição

99999

Internal failure! Try again later

Quando há algum erro interno.

  • Type: CNH

  • Content: Carteira Nacional de Habilitação

    • String numero;

    • String rgNumero;

    • String cpfNumero;

    • String nomeCivil;

    • List string filiacao;

    • Datetime dataNascimento;

    • Datetime data_habilitacao;

    • Datetime data_expiracao;

    • Datetime data_emissao;

    • String local_emissao;

    • String categoria;

    • String renachNumero.

"content": {
    "numero": "044589731564",
    "rgNumero": "123456789 SESP PR",
    "nomeCivil": "Homer Simpson",
    "filiacao": [
        "Monasimpson",
        "Monasimpson"
    ],
    "dataNascimento": "1990-05-12T00:00:00Z",
    "dataHabilitacao": "1997-11-18T00:00:00Z",
    "dataExpiracao": "2017-12-07T00:00:00Z",
    "dataEmissao": "2012-12-07T00:00:00Z",
    "localEmissao": "Curitiba PR",
    "categoria": "B",
    "renachNumero": "PR904987581"
}
  • Type: RG

  • Content: Registro Geral

    • String numero;

    • String orgao_emissor;

    • String uf_emissor;

    • String cpfNumero;

    • String carteira_profissionalNumero;

    • String certificado_militarNumero;

    • String cnsNumero;

    • String nis_pis_pasepNumero;

    • String ctpsNumero;

    • String ctps_serie;

    • String ctps_uf;

    • String titulo_eleitorNumero;

    • String nomeCivil;

    • String nome_social;

    • List string filiacao;

    • Datetime dataNascimento;

    • String naturalidade;

    • Datetime data_emissao;

"content": {
    "dataEmissao": "2012-12-21T02:00:00Z",
    "dataNascimento": "1980-12-19T03:00:00Z",
    "filiacao": [
     "Rosa Coelho Da Costa",
     "Edivaldo Da Costa",
     "Rosa Coelho Da Costa",
     "Edivaldo Da Costa"
    ],
    "naturalidade": "Sao Paulo SP",
    "nomeCivil": "Daniel Coelho Da Costa",
    "numero": "4815162342",
    "orgaoEmissor": "Secretaria Da Segurança Pública (SSP)",
    "ufEmissor": "UF_SP"
}
  • Type: CIN

  • Content: Carteira de Identidade Nacional

    • string rgNumero;

    • string cpfNumero;

    • string nomeCivil;

    • string nome_social;

    • List string filiacao;

    • Datetime dataNascimento;

    • Datetime data_expiracao;

    • Datetime data_emissao;

    • string orgao_emissor;

    • string local_emissao;

    • string naturalidade;

    • string nacionalidade;

"content": {
    "nomeCivil": "Vitor Ra",
    "nomeSocial": "Vitor Ra",
    "filiacao": [
        "Danilo Luis Renan Ramos",
        "Giovanna Vitoria",
        "Danilo Luis Renan Ramos",
        "Giovanna Vitoria"
    ],
    "dataExpiracao": "2034-03-02T00:00:00Z",
    "dataEmissao": "2024-03-02T00:00:00Z",
    "orgaoEmissor": "Detran/Rj",
    "localEmissao": "Rio De Janeiro RJ",
    "naturalidade": "Rio De Janeiro RJ",
    "nacionalidade": "BRA"
}
  • Type: PASSAPORTE

  • Content: Passaporte brasileiro

    • string numero;

    • string nome;

    • string sobrenome;

    • string pais_emissor;

    • string nacionalidade;

    • string naturalidade;

    • Datetime data_nascimento;

    • Datetime data_emissao;

    • Datetime data_expiracao;

    • string autoridade.

"content": {
            "numero": "AA011906",
            "nome": "CHANCHÃO AMARELO",
            "sobrenome": "PASSAREDO",
            "paisEmissor": "BRA",
            "nacionalidade": "BRASILEIRO(A)",
            "naturalidade": "<nil>",
            "dataNascimento": "1920-06-01T00:00:00Z",
            "dataEmissao": "2000-01-01T00:00:00Z",
            "dataExpiracao": "2010-01-01T00:00:00Z",
            "autoridade": "SR/DPF/DF"
        }
  • Type: UNKNOWN

  • Content: Documento desconhecido. Significa que não foi possível detectar o tipo daquele documento.

content {
}
  • Type: CNH

  • Content: Carteira Nacional de Habilitação

    • String numero;

    • String rgNumero;

    • String cpfNumero;

    • String nomeCivil;

    • List string filiacao;

    • Datetime dataNascimento;

    • Datetime data_habilitacao;

    • Datetime data_expiracao;

    • Datetime data_emissao;

    • String local_emissao;

    • String categoria;

    • String renachNumero.

"content": {
    "numero": "044589731564",
    "rgNumero": "123456789 SESP PR",
    "nomeCivil": "Homer Simpson",
    "filiacao": [
        "Monasimpson",
        "Monasimpson"
    ],
    "dataNascimento": "1990-05-12T00:00:00Z",
    "dataHabilitacao": "1997-11-18T00:00:00Z",
    "dataExpiracao": "2017-12-07T00:00:00Z",
    "dataEmissao": "2012-12-07T00:00:00Z",
    "localEmissao": "Curitiba PR",
    "categoria": "B",
    "renachNumero": "PR904987581"
}
  • Type: RG

  • Content: Registro Geral

    • String numero;

    • String orgao_emissor;

    • String uf_emissor;

    • String cpfNumero;

    • String carteira_profissionalNumero;

    • String certificado_militarNumero;

    • String cnsNumero;

    • String nis_pis_pasepNumero;

    • String ctpsNumero;

    • String ctps_serie;

    • String ctps_uf;

    • String titulo_eleitorNumero;

    • String nomeCivil;

    • String nome_social;

    • List string filiacao;

    • Datetime dataNascimento;

    • String naturalidade;

    • Datetime data_emissao;

"content": {
    "dataEmissao": "2012-12-21T02:00:00Z",
    "dataNascimento": "1980-12-19T03:00:00Z",
    "filiacao": [
     "Rosa Coelho Da Costa",
     "Edivaldo Da Costa",
     "Rosa Coelho Da Costa",
     "Edivaldo Da Costa"
    ],
    "naturalidade": "Sao Paulo SP",
    "nomeCivil": "Daniel Coelho Da Costa",
    "numero": "4815162342",
    "orgaoEmissor": "Secretaria Da Segurança Pública (SSP)",
    "ufEmissor": "UF_SP"
}
  • Type: CIN

  • Content: Carteira de Identidade Nacional

    • string rgNumero;

    • string cpfNumero;

    • string nomeCivil;

    • string nome_social;

    • List string filiacao;

    • Datetime dataNascimento;

    • Datetime data_expiracao;

    • Datetime data_emissao;

    • string orgao_emissor;

    • string local_emissao;

    • string naturalidade;

    • string nacionalidade;

"content": {
    "nomeCivil": "Vitor Ra",
    "nomeSocial": "Vitor Ra",
    "filiacao": [
        "Danilo Luis Renan Ramos",
        "Giovanna Vitoria",
        "Danilo Luis Renan Ramos",
        "Giovanna Vitoria"
    ],
    "dataExpiracao": "2034-03-02T00:00:00Z",
    "dataEmissao": "2024-03-02T00:00:00Z",
    "orgaoEmissor": "Detran/Rj",
    "localEmissao": "Rio De Janeiro RJ",
    "naturalidade": "Rio De Janeiro RJ",
    "nacionalidade": "BRA"
}
  • Type: PASSAPORTE

  • Content: Passaporte brasileiro

    • string numero;

    • string nome;

    • string sobrenome;

    • string pais_emissor;

    • string nacionalidade;

    • string naturalidade;

    • Datetime data_nascimento;

    • Datetime data_emissao;

    • Datetime data_expiracao;

    • string autoridade.

"content": {
            "numero": "AA011906",
            "nome": "CHANCHÃO AMARELO",
            "sobrenome": "PASSAREDO",
            "paisEmissor": "BRA",
            "nacionalidade": "BRASILEIRO(A)",
            "naturalidade": "<nil>",
            "dataNascimento": "1920-06-01T00:00:00Z",
            "dataEmissao": "2000-01-01T00:00:00Z",
            "dataExpiracao": "2010-01-01T00:00:00Z",
            "autoridade": "SR/DPF/DF"
        }
  • Type: UNKNOWN

  • Content: Documento desconhecido. Significa que não foi possível detectar o tipo daquele documento.

content {
}
LogoGuia de uso e integração | Unico IDCloud - DevCenter
canais de suporte
Guia de uso e integração
​
Central de Ajuda

Dispositivo

Versão do Android

Resultado do teste

Tipo do teste

ASUS - X01BDA

10.0.0

Físico

ASUS - Z01KD

8.0.1

Físico

HUAWEY - P30 Lite

9.0.0

Físico

LG - K22

10.0.0

Físico

LG - Q6

7.0.0

Físico

MOTOROLA - Moto one macro

10.0.0

Físico

MOTOROLA - Moto G4

6.0.1

Físico

MOTOROLA - Moto G5s Plus

8.1.0

Físico

MOTOROLA - Moto G6 Play

9.0.0

Físico

MOTOROLA - Moto G7 Play

10.0.0

Físico

MOTOROLA - Moto G7 Power

10.0.0

Físico

MOTOROLA - Moto G8 Power Lite

10.0.0

Físico

SAMSUNG - A01

10.0.0

Físico

SAMSUNG - J8 SM J810M

8.1.0

Físico

SAMSUNG - Galaxy A30s SM-A307GT

10.0.0

Físico

SAMSUNG - Galaxy A51

10.0.0

Físico

SAMSUNG - Galaxy A71

11.0.0

Físico

SAMSUNG - Galaxy S20+

11.0.0

Físico

SAMSUNG - s10e

11.0.0

Físico

XIAOMI - Mi 8 Lite

9.0.0

Físico

XIAOMI - Mi 8 Lite

10.0.0

Físico

XIAOMI - Poco X3

10.0.0

Físico

XIAOMI - Redmi Note 8

10.0.0

Físico

XIAOMI - Redmi Note 8 Pro

10.0.0

Físico

XIAOMI - Redmi Note 9

10.0.0

Físico

XIAOMI - Redmi Note 9 Pro

10.0.0

Físico

GOOGLE - Pixel sailfish

8.0.0

Virtual (TestLab)

HUAWEY - ALE L23

5.0.0

Virtual (TestLab)

HUAWEY - ANE LX1

9.0.0

Virtual (TestLab)

HUAWEY - ANE LX2

9.0.0

Virtual (TestLab)

HUAWEY - COR L29

8.1.0

Virtual (TestLab)

HUAWEY - MHA L29

7.0.0

Virtual (TestLab)

HUAWEY - NEO L29

9.0.0

Virtual (TestLab)

SAMSUNG - SC 02J

8.0.0

Virtual (TestLab)

SAMSUNG - SM G891A

9.0.0

Virtual (TestLab)

SAMSUNG - SM G930AZ

8.0.0

Virtual (TestLab)

SAMSUNG - SM G935A

8.0.0

Virtual (TestLab)

SAMSUNG - SM G965N

9.0.0

Virtual (TestLab)

SAMSUNG - SM G965U1

8.0.0

Virtual (TestLab)

SAMSUNG - SM G981U1

10.0.0

Virtual (TestLab)

SAMSUNG - SM J727V

8.1.0

Virtual (TestLab)

SAMSUNG - SM N950F

9.0.0

Virtual (TestLab)

SAMSUNG - SM N950N

9.0.0

Virtual (TestLab)

SAMSUNG - SM N950U

8.0.0

Virtual (TestLab)

SAMSUNG - SM N960F

9.0.0

Virtual (TestLab)

SAMSUNG - SM N960N

9.0.0

Virtual (TestLab)

SAMSUNG - SM N960U1

8.1.0

stLab)

Possuir o Developer SDK do instalado

Flutter

Criar Processo

post

Endpoint para criar um novo processo no by Unico.

Autorizações
Corpo
callbackUristringObrigatório

Define para onde o usuário será redirecionado ao fim do processo. Valores possíveis são: Uma URL https para redirecionar páginas web (ex: https://developers.unico.io/callback), uma URL Schema para redirecionamento em aplicações móveis nativas (ex: br.com.meupacote.app://callback - o callback precisa estar registrado em sua aplicação móvel) ou sem redireciomento (incluir apenas a '/').

Example: /
flowstring · enumObrigatório

Tipo de fluxo. Veja detalhes dos fluxos na seção 'Visão Geral' nesta mesma documentação (alguns fluxos foram depreciados e você pode consultá-los também na seção 'Visão Geral').

Example: idunicosignValores possíveis:
companyBranchIdstringOpcional

É o ID da filial onde o processo será criado. Caso haja somente uma filial associada a conta de serviço, não há a necessidade de passar este parâmetro. Caso haja separação de processos por filial, você receberá os IDs das filiais do time Unico.

Example: 60837cd3-ed3c-4038-ad7c-0a85ad64b03a
bioTokenIdstringOpcional

Identificação do token biométrico. Obrigatório para o flow "idtoken" e deve-se utilizar um id de um processo concluído de qualquer outro flow de verificação de identidade.

Example: 60837cd3-ed3c-4038-ad7c-0a85ad64b03a
purposestring · enumObrigatório

Propósito do processo.

Example: creditprocessValores possíveis:
expiresInstringOpcional

É o tempo de expiração do processo em segundos a partir de sua criação. Deve ser passado um valor no padrão "10080s", com "s" no fim. Caso este parâmetro não seja informado, será usado o valor default de 7 dias.

Example: 3600s
Respostas
200
Processo criado com sucesso.
application/json
400
Payload inválido.
application/json
401
Erro no access-token.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
post
POST /client/v1/process HTTP/1.1
Host: api.cadastro.uat.unico.app
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 893

{
  "callbackUri": "/",
  "flow": "idunicosign",
  "flow_config": {
    "biometry_capture": {
      "enabled_back_camera": true
    }
  },
  "companyBranchId": "60837cd3-ed3c-4038-ad7c-0a85ad64b03a",
  "bioTokenId": "60837cd3-ed3c-4038-ad7c-0a85ad64b03a",
  "person": {
    "duiType": "DUI_TYPE_BR_CPF",
    "duiValue": "12345678909",
    "friendlyName": "Luke Skywalker",
    "phone": "5511912345678",
    "email": "teste@teste.com",
    "notifications": [
      {
        "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
      }
    ]
  },
  "purpose": "creditprocess",
  "expiresIn": "3600s",
  "contextualization": {
    "currency": "BRL",
    "price": 15990.9,
    "locale": {
      "ptBr": {
        "reason": "Abertura de cadastro"
      },
      "enUs": {
        "reason": "Identity validation for personal loan application"
      },
      "esMX": {
        "reason": "Validación de identidad para solicitud de préstamo personal"
      }
    }
  },
  "payload": [
    {
      "envelopePayload": {
        "documents": [
          {
            "documentName": "teste",
            "fileContents": "JVBERi0xLjMNCiXi48/[...]DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg=="
          }
        ]
      }
    }
  ]
}
{
  "process": {
    "id": "53060f52-f146-4c12-a234-5bb5031f6f5b",
    "companyBranchId": "60837cd3-ed3c-4038-ad7c-0a85ad64b03a",
    "flow": "idunicosign",
    "callbackUri": "/path/to/callback-url/",
    "userRedirectUrl": "https://cadastro.dev.unico.app/process/53060f52-f146-4c12-a234-5bb5031f6f5b",
    "state": "PROCESS_STATE_CREATED",
    "createdAt": "2023-10-09T15:15:25.417105Z",
    "person": {
      "duiType": "DUI_TYPE_BR_CPF",
      "duiValue": "73689290074",
      "friendlyName": "Luke Skywalker",
      "phone": "5511912345678",
      "email": "teste@teste.com",
      "notifications": [
        {
          "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
        }
      ]
    },
    "purpose": "creditprocess",
    "authenticationInfo": {},
    "capacities": [
      [
        "PROCESS_CAPACITY_IDUNICO",
        "PROCESS_CAPACITY_IDCHECK",
        "PROCESS_CAPACITY_IDDOCS"
      ]
    ],
    "expiresAt": "2023-10-09T15:15:25.417105Z",
    "token": "eyJhbGciOiJSUzI1[...]d_jhQ",
    "companyData": {
      "branchId": "60837cd3-ed3c-4038-ad7c-0a85ad64b03a",
      "countryCode": "BRA"
    }
  }
}

Consultar Resultado do Processo

get

Endpoint para buscar o resultado de um processo no by Unico.

Autorizações
Parâmetros de rota
processIdstringObrigatório

ID do processo.

Respostas
200
Detalhes do processo obtidos com sucesso.
application/json
400
Quando o ID de processo é inválido.
application/json
401
Erro no access-token.
application/json
404
Quando não foi possível encontrar o processo.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get
GET /client/v1/process/{processId} HTTP/1.1
Host: api.cadastro.uat.unico.app
Authorization: Bearer JWT
Accept: */*
{
  "process": {
    "id": "53060f52-f146-4c12-a234-5bb5031f6f5b",
    "flow": "idunicosign",
    "callbackUri": "/path/to/callback-url/",
    "userRedirectUrl": "https://cadastro.dev.unico.app/process/53060f52-f146-4c12-a234-5bb5031f6f5b",
    "state": "PROCESS_STATE_FINISHED",
    "result": "PROCESS_RESULT_OK",
    "createdAt": "2023-10-05T18:28:58.537985Z",
    "finishedAt": "2023-10-09T15:15:25.417105Z",
    "person": {
      "duiType": "DUI_TYPE_BR_CPF",
      "duiValue": "73689290074",
      "friendlyName": "Luke Skywalker",
      "notifications": [
        {
          "notificationChannel": "NOTIFICATION_CHANNEL_WHATSAPP"
        }
      ]
    },
    "purpose": "creditprocess",
    "authenticationInfo": {
      "authenticationResult": "AUTHENTICATION_RESULT_INCONCLUSIVE",
      "authenticationId": "fd433602-d496-4291-adbb-dda95a3e50b1",
      "livenessResult": "LIVENESS_RESULT_LIVE",
      "bioTokenEngineResult": "BIO_TOKEN_ENGINE_RESULT_UNSPECIFIED",
      "identityFraudstersResult": "TRUST_RESULT_UNSPECIFIED",
      "scoreEngineResult": {
        "scoreEnabled": "SCORE_ENABLED_TRUE",
        "score": 50
      },
      "serproResult": {
        "score": 50
      }
    },
    "capacities": [
      "PROCESS_CAPACITY_IDUNICO",
      "PROCESS_CAPACITY_IDSIGN",
      "PROCESS_CAPACITY_IDLIVE"
    ],
    "services": [
      {
        "documents": [
          {
            "doc": {
              "version": 2,
              "code": "RG",
              "data": {
                "dataExpiracao": "2025-10-35T00:00:00Z",
                "dataHabilitacao": "2022-08-09T00:00:00Z",
                "dataNascimento": "1950-06-30T00:00:00Z",
                "nomeCivil": "John Doe",
                "rgNumero": 5478854,
                "categoria": "D",
                "cpfNumero": 73689290074,
                "dataEmissao": "2020-08-09T00:00:00Z",
                "localEmissao": "DEREX SP",
                "numero": 85775532778,
                "renachNumero": ""
              }
            },
            "typified": true,
            "cpf_match": true,
            "face_match": true,
            "doc_id": "1e61a978-3673-4fdd-8fa8-808d0a26d131",
            "validate_doc": true,
            "reused_doc": true,
            "signed_url": "https://api.datafortre[...]OXc9PQ%3D%3D"
          }
        ],
        "consent_granted": true,
        "envelopeId": "4d4f3d90-04a3-4259-b63b-930ab10d2e47",
        "documentIds": [
          "03307601-b518-49ca-b368-ae3919e24e54"
        ]
      }
    ],
    "expiresAt": "2023-10-09T15:15:25.417105Z",
    "token": "",
    "companyData": {
      "branchId": "60837cd3-ed3c-4038-ad7c-0a85ad64b03a",
      "countryCode": "BRA"
    }
  }
}
338KB
oauth2.postman_collection.json
132KB
Plataforma Unico.postman_collection.json
877KB
byClient.postman_collection
Exemplo de conjunto probatório

Obter Conjunto Probatório do Documento Assinado

get

Endpoint para obter o conjunto probatório da assinatura no by Unico. Somente para fluxos com assinatura eletrônica.

Autorizações
Parâmetros de rota
documentIdstringObrigatório

ID do documento.

Respostas
200
Conjunto probatório obtido com sucesso.
application/pdf
Respostastring · binary

Arquivo PDF gerado pelo sistema.

401
Erro no access-token.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get
GET /api/v1/service/evidence/{documentId} HTTP/1.1
Host: signhom.acesso.io
Authorization: Bearer JWT
Accept: */*
binary

Obter Documento Assinado

get

Endpoint para obter o documento assinado em PDF no by Unico. Somente para fluxos com assinatura eletrônica.

Autorizações
Parâmetros de rota
documentIdstringObrigatório

ID do documento.

Respostas
200
Documento assinado obtido com sucesso.
application/pdf
Respostastring · binary

Arquivo PDF gerado pelo sistema.

401
Erro no access-token.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get

Consultar documento para ser reaproveitado

get

Endpoint para buscar os documentos de um usuário para serem reaproveitados no by Client.

Parâmetros de consulta
codestringObrigatório

Valor do identificador do usuário (ex: Valor do CPF). Deve conter 11 caracteres e ser enviado sem pontos ou traços.

Example: 12345678909
typestringObrigatório

Tipo do documento (exemplo: BR_CPF).

Example: BR_CPF
Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com a capacidade reaproveitamento e captura de documentos habilitada.

Respostas
200
Informações do processo obtidas com sucesso.
application/json
400
Payload inválido.
application/json
403
Falta o parâmetro APIKEY no header da requisição.
application/json
404
Quando o processo não é encontrado.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get

Obter Conjunto Probatório

get

Endpoint para obter o conjunto probatório do processo no by Unico.

Autorizações
Parâmetros de rota
processIdstringObrigatório

ID do processo.

Respostas
200
Conjunto probatório obtido com sucesso.
application/json
400
Quando o ID de processo é inválido.
application/json
401
Erro no access-token.
application/json
404
Quando não foi possível encontrar o processo.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get

Obter Selfie do Usuário

get

Endpoint para obter a selfie do processo do by Unico.

Parâmetros de rota
processIdstringObrigatório

ID do processo.

Respostas
200
Selfie obtida com sucesso.
application/json
400
Quando o ID de processo é inválido.
application/json
401
Erro no access-token.
application/json
403
Quando a conta de serviço não possui a permissão para obter a selfie.
application/json
404
Quando não foi possível encontrar o processo.
application/json
500
Erro inesperado (Erro interno ou problema de parâmetro).
application/json
get
GET /api/v1/service/file/{documentId} HTTP/1.1
Host: signhom.acesso.io
Authorization: Bearer JWT
Accept: */*
binary
GET /documents/v1 HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Accept: */*
{
  "items": [
    {
      "documentType": "unico.moja.dictionary.br.rg.v2.Rg",
      "documentId": "2aaf6037-0153-415d-b9fe-cf7e8198408f"
    }
  ]
}
GET /client/v1/process/{processId}/evidenceset HTTP/1.1
Host: api.cadastro.uat.unico.app
Authorization: Bearer JWT
Accept: */*
{
  "fileContents": "JVBERi0xLjUNCiWDk[...]NCg==",
  "contentType": "x-pdf"
}

Criar Processo

post

Endpoint para criar um novo processo de documentos no by Client.

Parâmetros de cabeçalho
AuthorizationstringObrigatório

Access-token válido.

APIKEYstringObrigatório

APIKEY válida com a capacidade reaproveitamento e captura de documentos habiitada.

Corpo
Respostas
200
Informações do processo obtidas com sucesso.
application/json
post
POST /processes/v1 HTTP/1.1
Host: api.id.uat.unico.app
Authorization: text
APIKEY: text
Content-Type: application/json
Accept: */*
Content-Length: 278

{
  "subject": {
    "code": "12345678909",
    "name": "Luke Skywalker",
    "email": "luke@unico.io",
    "phone": "551972557070"
  },
  "document": {
    "purpose": null,
    "authProcessId": "80371b2a-3ac7-432e-866d-57fe37896ac6",
    "documentId": "80371b2a-3ac7-432e-866d-57fe37896ac6",
    "files": [
      {
        "data": "/9j/4AAQSkZJR..."
      }
    ]
  }
}
200

Informações do processo obtidas com sucesso.

{
  "id": "2b034568-dfaf-463f-94fb-18ed93c312e8",
  "status": 3,
  "document": {
    "id": "b97c3fd9-d95d-413f-bc0a-75eb87304421",
    "type": "CNH",
    "cpfMatch": false,
    "faceMatch": false,
    "content": {
      "numero": "044589731564",
      "rgNumero": "123456789 SESP PR",
      "nomeCivil": "Homer Simpson",
      "filiacao": [
        "Monasimpson",
        "Monasimpson"
      ],
      "dataNascimento": "1990-05-12T00:00:00Z",
      "dataHabilitacao": "1997-11-18T00:00:00Z",
      "dataExpiracao": "2017-12-07T00:00:00Z",
      "dataEmissao": "2012-12-07T00:00:00Z",
      "localEmissao": "Curitiba PR",
      "categoria": "B",
      "renachNumero": "PR904987581"
    },
    "fileUrls": [
      "https://url-signer-1",
      "https://url-signer-2"
    ]
  }
}
GET /client/v1/process/{processId}/selfie HTTP/1.1
Host: api.cadastro.uat.unico.app
Accept: */*
{
  "fileContents": "/9j/4AAQSkZJRgABAQA[...]QkeQUjE",
  "contentType": "image/jpeg"
}