Documentação Técnica

Onboarding

Nossa solução para validação de identidade possui três fluxos diferentes:

FluxoFinalidade
DocumentoCaptura o documento de seu usuário, garante a qualidade da imagem e extrai as informações desejadas.
Prova de VidaRealiza a captura biométrica com prova de vida.
CompletoRealiza a captura de documento, garante a qualidade da imagem, extrai as informações desejadas, faz a captura biométrica com prova de vida e também efetua a comparação de faces (Face Match).

Compatibilidade

Este produto pode ser facilmente integrado em diversas plataformas e frameworks através de iframes, uma vez que eles são amplamente suportados em ambientes web. Abaixo estão alguns exemplos de onde o iframe pode ser utilizado:

  • Aplicações Web: Compatível com frameworks modernos como React, Angular, Vue.js, Next.js, Svelte, entre outros.
  • Aplicações Móveis Híbridas: Em aplicativos construídos com React Native (via WebView), Ionic e Cordova, permitindo integração em ambientes móveis.

Como Usar

1º Passo: Autenticação

Para acessar nossa aplicação é necessário um OnboardingID. Para gerar um, basta seguir os passos descritos no sub-menu API de Abertura de Sessão

2º Passo: Inicialização

Com o OnboardingID em mãos, basta utilizar a seguinte URL em seu iframe ou webview:

https://iframe.bigdatacorp.com.br/onboardingID

Exemplo: https://iframe.bigdatacorp.com.br/0e2701ff-927a-4abc-84e9-026121dc7cfe


3º Passo: Finalização

Quando o usuário finalizar o fluxo, você será notificado via Post Message do componente web que está utilizando.

ParâmetroExplicação
STATUS_CODEStatus interno utilizado para reconhecer o que aconteceu com a aplicação.
MESSAGEMensagem com uma breve descrição sobre o acontecido.
ON_FINISHInforma se o componente web deve ser encerrado ou não.

STATUS_CODEMESSAGEON_FINISH
2Oktrue
-100Access Denied true
-201TimeOuttrue
-202Max retriestrue
-298Invalid Request true
-299Unexpectedtrue
-400Closed without completingtrue
-401Timeout the user session has expiredtrue
-499Unexpected API errortrue
-500Auth Errortrue
-1000Improper computer accesstrue

⚠️

Atenção

Ao ser notificado via Post Message, apenas leve em consideração as mensagens que possuam como SOURCE 'webview-handle-event'. Qualquer outra notificação deve ser desconsiderada.

Exemplo de como usar:

 if (event.data.ON_FINISH && event.data.SOURCE === "webview-handle-event")

Exemplo de Post Message

useEffect(() => {
    if (!open) return;

    function handleIncomingMessage(event: MessageEvent) {
        // During liveness, as we are an Iframe, there are events that we cannot capture, this part is responsible for passing on the information we need.
        const iframe = document.getElementById("bdc-iframe") as HTMLIFrameElement;
        if (iframe && iframe.contentWindow) {
            iframe.contentWindow.postMessage(event.data, "https://iframe.bigdatacorp.com.br/");
        }
        //This event is responsible for reading the return of our postMessage which will indicate whether the user completed the flow/left without completing/timeout/other cases
        if (event.origin === "https://iframe.bigdatacorp.com.br") {
            setData(event.data);

             if (event.data.ON_FINISH && event.data.SOURCE === "webview-handle-event") setOpen(false);
        }
    }

    window.addEventListener("message", handleIncomingMessage);

    return () => {
        window.removeEventListener("message", handleIncomingMessage);
    };
}, [open]);

Exemplo Completo em React

import React, { useEffect } from "react";
import { Button } from "./components/ui/button";
import { Input } from "./components/ui/input";

interface IData {
  STATUS_CODE: number;
  MESSAGE: string;
  ON_FINISH: boolean;
}

function App() {
  const [IFrameURL, setIFrameURL] = React.useState<string>("");
  const [open, setOpen] = React.useState<boolean>(false);
  const [data, setData] = React.useState<IData>({
    STATUS_CODE: 0,
    MESSAGE: "",
    ON_FINISH: false,
    SOURCE: "webview-handle-event"
  });

  useEffect(() => {
    if (!open) return;

    function handleIncomingMessage(event: MessageEvent) {
        // During liveness, as we are an Iframe, there are events that we cannot capture, this part is responsible for passing on the information we need.
        const iframe = document.getElementById("bdc-iframe") as HTMLIFrameElement;
        if (iframe && iframe.contentWindow) {
            iframe.contentWindow.postMessage(event.data, "https://iframe.bigdatacorp.com.br/");
        }
        //This event is responsible for reading the return of our postMessage which will indicate whether the user completed the flow/left without completing/timeout/other cases
        if (event.origin === "https://iframe.bigdatacorp.com.br") {
            setData(event.data);

             if (event.data.ON_FINISH && event.data.SOURCE === "webview-handle-event") setOpen(false);
        }
    }

    window.addEventListener("message", handleIncomingMessage);

    return () => {
        window.removeEventListener("message", handleIncomingMessage);
    };
}, [open]);


  useEffect(() => {
    // console.log(data);
  }, [data]);

  const handleIFrameURL = (e: any) => {
    // console.log(e.target.value)
    setIFrameURL(`https://iframe.bigdatacorp.com.br/${e.target.value}`)
  }

  if (!open) {
    return (
      <>
        <Input type="text" placeholder="Insira o onboardingID aqui" onChange={handleIFrameURL}/>
        <Button onClick={() => setOpen(true)}>Fazer onboarding</Button>
      </>
    );
  }

  return (
    <>
      <iframe
        src={IFrameURL}
        allow="camera"
        className="w-dvw h-dvh"
        id="bdc-iframe"
      />
    </>
  );
}

export default App;