Guia oficial de integração Para sites e aplicativos web

Integre a biblioteca JavaScript fio.js e o Widget do FACEIO ao seu site ou aplicativo web. Use enroll() para cadastrar novos usuários e authenticate() para permitir que usuários já cadastrados façam login com autenticação facial.

quick-start.js
JavaScript
// 1. Adicione ao HTML antes de </body>
<div id="faceio-modal"></div>
<script src="https://cdn.faceio.net/fio.js"></script>

// 2. Crie a instância com seu Public ID
const faceio = new faceIO("app-public-id");

// 3. Cadastre um novo usuário
faceio.enroll({ "locale": "auto",
         "payload": { "email": "user@example.com" }
}).then(userInfo => {
  console.log(`Cadastrado: ${userInfo.facialId}`);
}).catch(err => handleError(err));

// 4. Autentique um usuário já cadastrado
faceio.authenticate({ "locale": "auto" })
.then(userData => {
  console.log("Payload:", JSON.stringify(userData.payload));
}).catch(err => handleError(err));

O que é o FACEIO?

FACEIO é uma plataforma de autenticação facial da PixLab ↗ que permite cadastrar e autenticar usuários pelo rosto em um aplicativo web sem exigir senhas, códigos OTP ou sensores biométricos dedicados no fluxo do FACEIO. O serviço usa uma webcam comum ou a câmera de um smartphone em navegadores modernos compatíveis.

A biblioteca do lado do cliente é fio.js. Ela oferece dois métodos principais: enroll() para cadastro e authenticate() para login, além do utilitário restartSession() para fluxos com várias operações. O FACEIO coordena o fluxo de autenticação, enquanto o mecanismo de reconhecimento facial escolhido pelo proprietário do aplicativo realiza a comparação facial e gerencia os hashes biométricos. Seu aplicativo recebe uma Promise resolvida com o Facial ID e o payload associado durante o cadastro.

Está começando com o FACEIO?

Comece pelo Guia de configuração em 5 minutos para criar seu primeiro aplicativo e obter o Public ID no FACEIO Console ↗.


Integração da biblioteca fio.js

fio.js funciona em navegadores modernos compatíveis com uma webcam comum ou a câmera de um smartphone, sem exigir um sensor biométrico dedicado. A biblioteca JavaScript é independente de framework e pode ser usada com React, Vue, Angular, Next.js ou JavaScript sem framework.

1 Importar fio.js ao seu site

Cole o trecho abaixo antes da tag de fechamento </body> em qualquer página que ofereça autenticação facial. Uma biblioteca é carregada pela CDN ↗ do FACEIO. A hospedagem própria não é compatível, portanto as integrações recebem as atualizações suportadas do fio.js pela CDN do FACEIO.

index.html
HTML
<div id="faceio-modal"></div>
<script src="https://cdn.faceio.net/fio.js"></script>

2 Crie uma instância do faceIO

Crie uma instância de faceIO() com o Public ID do seu aplicativo. Esse identificador está disponível no Application Manager do FACEIO Console ↗.

app.js
JavaScript
<script type="text/javascript">
  /* Crie uma instância de fio.js com o Public ID */
  const faceio = new faceIO("app-public-id");
</script>

Antes de continuar, confirme que você:

3 Inicie o Widget

Com fio.js carregado e a instância faceIO() pronta, inicie o reconhecimento facial chamando um dos métodos oferecidos pela classe:

enroll()

Cadastra um novo usuário por reconhecimento facial. É o equivalente sem senha de um cadastro tradicional.

authenticate()

Autentica um usuário já cadastrado. É o equivalente sem senha de um login tradicional.

app.js
JavaScript
<button onclick="enrollNewUser()">Cadastrar novo usuário</button>
<button onclick="authenticateUser()">Autenticar usuário</button>

<script type="text/javascript">
  const faceio = new faceIO("app-public-id");

  function enrollNewUser() {
    // faceio.enroll() inicia o fluxo de cadastro
  }

  function authenticateUser() {
    // faceio.authenticate() inicia o fluxo de autenticação
  }

  function handleError(errCode) {
    // Trate o erro aqui
  }
</script>

Modelo de referência

O Modelo HTML inclui uma implementação de referência com os dois métodos e tratamento completo de erros.


enroll() - Cadastrar novo usuário

Inicia o Widget do FACEIO para cadastrar um novo usuário por reconhecimento facial. É o equivalente sem senha de um cadastro tradicional. Quando concluído, retorna uma Promise resolvida com um objeto userInfo que contém o Facial ID exclusivo do usuário, o timestamp do cadastro e estimativas demográficas de gênero e idade.

Sintaxe

Assinatura
promise = faceio.enroll({ parameters })
Alias
enrol() register() record()
Retorna
Uma Promise que é resolvida com um objeto userInfo quando a operação é concluída, ou rejeitada com um fioErrCode em caso de falha.

Descrição

Comportamento

Quando chamado, o Widget do FACEIO solicita o consentimento do usuário quando necessário, pede acesso à câmera e envia a captura ao mecanismo de reconhecimento facial escolhido pelo proprietário do aplicativo.

O FACEIO não armazena, manipula nem acessa hashes biométricos. O mecanismo de reconhecimento facial selecionado cria e gerencia os hashes biométricos usados na comparação, enquanto sua integração recebe o Facial ID resultante e os dados do cadastro.

PIN
Durante o cadastro, os usuários definem um PIN Code de 4 a 16 dígitos. Ele pode ser solicitado em autenticações futuras se houver uma colisão facial, se a confiança ficar ligeiramente abaixo de 99% ou se seu site ou aplicativo web exigir a confirmação do PIN Code.
Payload
O payload associa dados arbitrários (e-mail, userId, nome etc.) ao usuário cadastrado. Esses dados são retornados após cada autenticação concluída desse usuário. Tamanho máximo: 16 KB. Codifique em Base64 conteúdos binários ou não ASCII.
Webhook
Se você configurou um Webhook, o FACEIO enviará os dados de cadastro por POST ao seu endpoint para sincronizar o backend em tempo real.

Parâmetros

Aceita um único objeto opcional. Todas as propriedades são opcionais:

Propriedade Type Padrão Descrição
payload JSON null Dados arbitrários associados ao usuário e retornados em autenticações futuras. Máximo de 16 KB. Codifique dados não ASCII em Base64.
permissionTimeout Number 27 sec Segundos de espera pela permissão da câmera. Interrompe com fioErrCode.PERMISSION_REFUSED quando o tempo se esgota.
termsTimeout Number 10 min Minutos de espera pela aceitação dos Termos de Serviço. Interrompe com fioErrCode.TERMS_NOT_ACCEPTED quando o tempo se esgota.
idleTimeout Number 27 sec Segundos de espera quando nenhum rosto é detectado. Interrompe com fioErrCode.NO_FACES_DETECTED quando o tempo se esgota.
replyTimeout Number 40 sec Segundos de espera por uma resposta do servidor. Interrompe com fioErrCode.TIMEOUT quando o tempo se esgota.
enrollIntroTimeout Number 12 sec Segundos de exibição da tela de introdução e instruções do cadastro.
locale String auto Idioma do Widget. auto detecta o idioma do navegador. Também é possível informar um código BCP 47 (en, ar, es, ja, de). Se não houver suporte, usa en-US.
userConsent Boolean false Defina como true se você já obteve o consentimento do usuário, por exemplo durante a criação da conta. Isso pula a tela de consentimento dos Termos de Serviço. É sua responsabilidade solicitar consentimento explícito antes de cadastrar um novo usuário. Consulte guia de práticas recomendadas de privacidade.
showAbortBtn Boolean false Defina como true para sempre exibir o botão de fechar ou cancelar. Se o usuário clicar nele, o erro fioErrCode.ABORTED_BY_USER será gerado.

Valor retornado

userInfo

Uma Promise resolvida com um objeto userInfo quando concluída, ou rejeitada com um código de erro em caso de falha:

Propriedade Type Descrição
facialId String (UUID) Identificador único atribuído pelo mecanismo de reconhecimento facial. Consulte Facial ID.
timestamp String ISO 8601 ↗ timestamp de conclusão do cadastro.
details Object Contém as estimativas de gender e age do usuário cadastrado.

Exemplo

Uso
app.js
JavaScript
// Crie uma instância do fio.js com o Public ID do seu aplicativo
const faceio = new faceIO("app-public-id");
function enrollNewUser(){
faceio.enroll({
  "locale": "auto", // Idioma padrão do usuário
  "payload": {
      /* Payload que será associado a este usuário e retornado nas autenticações futuras. */
      "whoami": 123456, // ID de exemplo associado a este usuário
      "email": "john.doe@example.com"
      }
  }).then(userInfo => {
      // Usuário cadastrado com sucesso 
      alert(
          `Usuário cadastrado com sucesso. Detalhes:
           Facial ID exclusivo: ${userInfo.facialId}
           Data do cadastro: ${userInfo.timestamp}
           Gênero estimado: ${userInfo.details.gender}
           Idade aproximada: ${userInfo.details.age}`
      );
     console.log(userInfo);
     // Trate o resultado, salve o Facial ID e redirecione para o painel
  }).catch(errCode => {
     // Registre o erro ocorrido durante o cadastro
     handleError(errCode);
  })
}
Observações
  • Armazene o facialId retornado no banco de dados como chave de autenticação exclusiva do usuário.
  • O payload é retornado sem alterações em cada chamada futura de authenticate() para esse usuário.
  • Consulte o modelo HTML para ver uma referência funcional completa.

authenticate() - Autenticar usuário

Inicia o Widget do FACEIO para verificar um usuário já cadastrado. É o equivalente sem senha de um login tradicional. Quando concluído, retorna uma Promise resolvida com um objeto userData que contém o Facial ID do usuário, o timestamp da autenticação e o payload associado durante o cadastro.

Sintaxe

Assinatura
promise = faceio.authenticate({ parameters })
Alias
auth() recognize() identify()
Retorna
Uma Promise que é resolvida com um objeto userData quando a operação é concluída, ou rejeitada com um fioErrCode em caso de falha.

Descrição

Comportamento

Quando chamado, o Widget do FACEIO solicita acesso à câmera e compara a captura com o índice facial de usuários cadastrados no aplicativo. Uma duração depende da permissão da câmera, da qualidade da imagem, das verificações de liveness, da rede e da configuração do fluxo.

Uma comparação facial é realizada pelo mecanismo de reconhecimento facial selecionado. O FACEIO não armazena, manipula nem acessa hashes biométricos, e sua integração no cliente trabalha com o resultado de autenticação retornado.

PIN
Uma solicitação de PIN Code pode ser exibida se houver colisão facial, se a confiança ficar ligeiramente abaixo de 99% ou se seu site ou aplicativo web exigir a confirmação do PIN Code nas opções de segurança do FACEIO Console.
Payload
O payload associado durante enroll() é retornado sem alterações dentro do objeto userData resolvido. Valide o facialId retornado e aplique suas próprias regras de autorização no servidor antes de criar uma sessão no site ou aplicativo web.
Webhook
Se um Webhook estiver configurado, o FACEIO enviará os dados do evento por POST ao endpoint após uma autenticação concluída.

Parâmetros

Aceita um único objeto opcional. Todas as propriedades são opcionais:

Propriedade Type Padrão Descrição
permissionTimeout Number 27 sec Segundos de espera pela permissão da câmera. Interrompe com fioErrCode.PERMISSION_REFUSED quando o tempo se esgota.
idleTimeout Number 27 sec Segundos de espera quando nenhum rosto é detectado. Interrompe com fioErrCode.NO_FACES_DETECTED quando o tempo se esgota.
replyTimeout Number 40 sec Segundos de espera por uma resposta do servidor. Interrompe com fioErrCode.TIMEOUT quando o tempo se esgota.
locale String auto Idioma do Widget. auto detecta o idioma do navegador. Também é possível informar um código BCP 47 (en, ar, es, ja, de). Se não houver suporte, usa en-US.

Valor retornado

userData

Uma Promise resolvida com um objeto userData quando concluída, ou rejeitada com um código de erro em caso de falha:

Propriedade Type Descrição
facialId String (UUID) Identificador único atribuído durante o cadastro. Consulte a documentação do Facial ID.
payload Any Os dados arbitrários associados ao usuário durante o cadastro, como e-mail ou userId.

Exemplo

Uso
app.js
JavaScript
const faceio = new faceIO("app-public-id"); // Inicialize com o Public ID do seu aplicativo
function authenticateUser(){
  faceio.authenticate({
      "locale": "auto" // Idioma padrão do usuário
  }).then(userData => {
      console.log("Operação concluída, usuário identificado")
      // Obtenha o Facial ID associado ao usuário. Ele será o mesmo
      // em cada autenticação futura concluída. O FACEIO recomenda 
      // usar esse Facial ID para identificar de forma exclusiva 
      // os usuários cadastrados no seu backend.
      console.log("Facial ID associado: " + userData.facialId)
      // Obtenha os dados arbitrários associados anteriormente ao usuário
      // durante o cadastro pelo parâmetro payload de enroll().
      console.log("Payload: " + JSON.stringify(userData.payload)) // Dados do exemplo de enroll() acima
  }).catch(errCode => {
      handleError(errCode)
  })
}
Observações
  • Compare o facialId retornado com o banco de dados antes de autorizar a sessão.
  • O payload do cadastro, como e-mail ou userId, está disponível em userData.payload. Mesmo assim, valide a sessão no backend.
  • Consulte o modelo HTML para ver uma referência completa.

restartSession() - Reiniciar sessão

Reinicia a sessão atual do FACEIO para permitir uma nova chamada de enroll() ou authenticate() na mesma página sem recarregá-la. É útil em terminais compartilhados, pontos de check-in ou outros fluxos em que várias pessoas usam a mesma sessão do navegador em sequência.

Sintaxe

Assinatura
boolean = faceio.restartSession()
Parâmetros
Nenhum. Esse método não recebe argumentos.
Retorna
true quando a sessão é reiniciada e está pronta para uma nova operação; caso contrário, false.

Descrição

Comportamento

Quando enroll() ou authenticate() é resolvido ou rejeitado, a sessão interna do FACEIO é marcada como consumida. Qualquer chamada posterior a um desses métodos na mesma instância faceIO sem reiniciá-la será rejeitada imediatamente com fioErrCode.SESSION_IN_PROGRESS.

Chamar restartSession() limpa esse estado e deixa a instância pronta para outra operação de reconhecimento.

Casos de uso
  • Quiosque ou terminal compartilhado - Permite que vários usuários se autentiquem em sequência no mesmo dispositivo sem recarregar a página.
  • Fluxo de cadastro seguido de autenticação - Cadastre um usuário e autentique-o na mesma página depois de reiniciar a sessão.
  • Nova tentativa após um erro - Reinicie após uma falha para permitir outra tentativa sem atualizar a página.
Escopo
Uma reinicialização afeta apenas uma instância faceIO. Se você criou várias instâncias faceIO (não recomendado), cada uma mantém seu próprio estado de sessão.
Recurso Premium

Uma geração dinâmica de sessões está disponível apenas nos planos Premium. Atualize seu aplicativo pelo FACEIO Console ↗ para usar esse recurso.

Valor retornado

Sucesso
true - A sessão foi reiniciada e a instância está pronta para uma nova chamada de enroll() ou authenticate().
Falha
false quando não foi possível criar uma nova sessão.

Códigos de erro - fioErrCode

Quando enroll() ou authenticate() falham, a Promise é rejeitada com um valor numérico fioErrCode. Trate os erros avaliando esse valor no manipulador .catch(). Para restartSession(), verifique o booleano retornado (true ou false).

Código Constante Descrição
1 fioErrCode.PERMISSION_REFUSED O usuário negou acesso à câmera. Oriente-o a habilitar a permissão nas configurações do navegador.
2 fioErrCode.NO_FACES_DETECTED Nenhum rosto foi detectado dentro do tempo limite. Peça ao usuário para se posicionar diante da câmera e tentar novamente.
3 fioErrCode.UNRECOGNIZED_FACE O rosto capturado não correspondeu a nenhum usuário cadastrado no aplicativo. Ocorre apenas na autenticação.
4 fioErrCode.MANY_FACES Vários rostos foram detectados ao mesmo tempo. Apenas um rosto deve aparecer no enquadramento.
5 fioErrCode.FACE_DUPLICATION O usuário está tentando se cadastrar novamente, mas o rosto já está registrado. Isso ocorre quando a opção "Prevent Same User from Enrolling Twice" está habilitada no FACEIO Console ↗. O cadastro é interrompido; direcione o usuário para o fluxo de autenticação.
6 fioErrCode.MINORS_NOT_ALLOWED O cadastro foi rejeitado pela política de idade mínima configurada. Exiba uma mensagem adequada e siga a política de acesso do proprietário do aplicativo.
7 fioErrCode.PAD_ATTACK Foi detectado um possível ataque de apresentação, como uma foto, reprodução de vídeo ou máscara no lugar de um rosto ao vivo. Trate-o como um sinal de segurança e aplique sua política de nova tentativa ou revisão. Nenhum sistema anti-spoofing detecta todas as tentativas. Saiba mais sobre detecção de liveness ↗.
8 fioErrCode.FACE_MISMATCH Os vetores faciais capturados durante o cadastro não corresponderam entre si. Ocorre apenas em enroll(). Peça ao usuário para tentar o cadastro novamente.
9 fioErrCode.NETWORK_IO Ocorreu um erro de rede. Verifique a conexão e tente novamente.
10 fioErrCode.WRONG_PIN_CODE Um PIN Code incorreto foi informado durante a autenticação. Ocorre apenas em authenticate(). A operação é interrompida após três tentativas. Permita que o usuário reinicie a autenticação.
11 fioErrCode.PROCESSING_ERR Erro interno do servidor. Uma condição pode ser temporária; tente novamente após uma breve espera.
12 fioErrCode.UNAUTHORIZED O Public ID é inválido ou o aplicativo ainda não foi ativado no FACEIO Console.
13 fioErrCode.TERMS_NOT_ACCEPTED O usuário não aceitou os Termos de Serviço dentro do período definido por termsTimeout. Ocorre apenas no cadastro.
14 fioErrCode.UI_NOT_READY O Widget do FACEIO ainda não terminou a inicialização. Aguarde o carregamento completo do DOM antes de chamar um método.
15 fioErrCode.UNIQUE_PIN_REQUIRED O PIN Code deve ser exclusivo entre os usuários quando essa verificação está habilitada.
16 fioErrCode.TIMEOUT O servidor não respondeu dentro do período definido por replyTimeout. Verifique a conexão e tente novamente.
17 fioErrCode.TOO_MANY_REQUESTS O limite de solicitações foi excedido. Implemente backoff exponencial antes de tentar novamente.
18 fioErrCode.EMPTY_ORIGIN O cabeçalho de origem da solicitação está ausente. Confirme que fio.js é servido por um domínio válido.
19 fioErrCode.FORBIDDEN_ORIGIN Uma origem da solicitação não está na lista permitida. Adicione o domínio nas opções de segurança do FACEIO Console.
20 fioErrCode.FORBIDDEN_COUNTRY O país do usuário está bloqueado pelas restrições geográficas configuradas no FACEIO Console.
21 fioErrCode.SESSION_IN_PROGRESS Já existe um cadastro ou uma autenticação em andamento. Isso pode ocorrer se enroll() ou authenticate() for chamado várias vezes, como após um clique duplo. Use restartSession() para iniciar uma nova sessão sem recarregar a página. Se o Widget ainda estiver em execução, trate esse estado sem iniciar outra operação.
22 fioErrCode.ABORTED_BY_USER O usuário clicou no botão de cancelar ou fechar, disponível apenas quando showAbortBtn: true.

Prática recomendada para tratamento de erros

Implemente o tratamento de erros com mensagens claras para o usuário. Use uma instrução switch ou uma cadeia if-else para tratar cada código e orientar o usuário, por exemplo oferecendo o cadastro quando fioErrCode.UNRECOGNIZED_FACE for retornado.


Modelo HTML

Uma implementação de referência com enroll() e authenticate() e tratamento de erros. Use-a como ponto de partida para sua integração.

Importante

Substitua app-public-id pelo Public ID real do seu aplicativo obtido no FACEIO Console ↗.

Modelo de referência

Observações de implementação

  • O enroll() da linha 31 inclui um payload com dados de exemplo. Ajuste-o às necessidades do seu site ou aplicativo web.
  • Armazene o facialId no banco de dados e associe-o à conta do usuário para autenticações futuras.
  • O manipulador da linha 60 cobre os códigos de erro comuns. Ajuste as mensagens ao tom do seu site ou aplicativo web.
  • Esse modelo exige um servidor HTTP em execução. fio.js não pode ser carregado diretamente pelo sistema de arquivos local devido às restrições de segurança do navegador.
  • Revise o guia de práticas recomendadas de segurança e o guia de práticas recomendadas de privacidade antes da implantação em produção.

Tutoriais da comunidade

Use estes guias da comunidade para implementar fio.js com React, Vue, Angular, Next.js ou JavaScript sem framework e consultar exemplos para projetos React Native e Flutter.

Pacote NPM oficial

Pacote oficial para ferramentas de build JavaScript e projetos baseados em frameworks.

Ver no NPM
Fórum da comunidade

Consulte respostas, compartilhe experiências e converse com outros desenvolvedores do FACEIO.

Abrir o fórum
Autenticação sem senha com foco em privacidade

Guia sobre login sem senha, verificação de idade e detecção de liveness em uma única solução.

Ver tutorial
Sistema de presença facial (Vanilla JS)

Crie um fluxo de presença com FACEIO e JavaScript sem framework.

Ver tutorial
Chatbot de IA com autenticação facial (Next.js)

Crie com Next.js um chatbot de planejamento de viagens com autenticação facial.

Ver tutorial
Reconhecimento facial com React e Tailwind

Adicione reconhecimento facial a um aplicativo React com Tailwind CSS.

Ver tutorial
Reconhecimento facial no Vue.js

Tutorial para implementar autenticação facial do FACEIO em um aplicativo Vue.js.

Ver tutorial
Autenticar usuários no React (freeCodeCamp)

Guia do freeCodeCamp para adicionar autenticação por reconhecimento facial a um aplicativo React.

Ver tutorial
Padrões modernos de autenticação web

Consulte padrões modernos de autenticação para aplicativos web com reconhecimento facial.

Ver tutorial
Guia completo do FACEIO

Um guia detalhado sobre implementação do FACEIO e práticas recomendadas.

Ver tutorial
Login com reconhecimento facial (Vanilla JS)

Crie um fluxo de login com reconhecimento facial usando JavaScript sem framework.

Ver tutorial
Controle de presença com FACEIO

Crie um sistema de controle de presença com reconhecimento facial do FACEIO.

Ver tutorial
Tem um tutorial para compartilhar?

Compartilhe um tutorial de implementação do FACEIO com a comunidade de desenvolvedores.

Fale conosco

Integre o FACEIO em 5 minutos

Crie um aplicativo FACEIO, copie o Public ID, carregue o fio.js e conecte enroll() e authenticate() aos controles de cadastro e login do seu site ou aplicativo web.

Sem cartão de crédito
Integração em 5 minutos
Independente de framework