Pular para o conteúdo principal

Jornadas do Usuário

As Jornadas do Usuário são sessões de captura em múltiplas etapas orquestradas pelo SDK em conjunto com o fluxo configurado. Por exemplo, o fluxo idchecktrustdocssign executa selfie + documento + assinatura em uma única sessão.

Casos de uso

As jornadas disponíveis dependem do fluxo configurado para a sua integração. Consulte Casos de Uso para o mapeamento completo de caso de uso → fluxo → capacidade.

Como funciona

O plugin delega para os SDKs nativos subjacentes:

  1. O plugin abre a câmera (Android ou iOS) com a sobreposição SmartFrame.
  2. O SDK nativo orquestra a sequência de capturas necessárias para o fluxo (selfie, documento, assinatura).
  3. O SDK encaminha internamente os resultados para a Unico — o cliente nunca recebe ou gerencia dados de imagem diretamente.
  4. Retorna um objeto SuccessResult com um processId via platform channel.

A orquestração é tratada inteiramente pelo SDK — você não precisa implementar a sequência de etapas no seu código Dart.

Modo de câmera (captura inteligente)

O SDK tem enquadramento inteligente e captura automática habilitados por padrão. Configure o modo de câmera no seu builder da seguinte forma:

UnicoCheckCameraOpener _opener = new UnicoCheck(this)
.setAutoCapture(autoCapture: true)
.setSmartFrame(smartFrame: true)
.build();
dica

Os valores false/true para os métodos acima não alteram a experiência de captura; eles são usados apenas para a lógica interna do SDK.

Iniciando uma Jornada do Usuário
Passo 1 — Implementar UnicoListener

UnicoListener trata os callbacks do ciclo de vida do SDK. Implemente os quatro métodos obrigatórios:

MétodoQuando é chamado
onErrorUnico(error)Ocorreu um erro durante a operação do SDK
onUserClosedCameraManually()O usuário fechou a câmera manualmente
onSystemClosedCameraTimeoutSession()O limite de 40 segundos da sessão foi atingido
onSystemChangedTypeCameraTimeoutFaceInference()Nenhum rosto detectado por 13 segundos — muda para captura manual
class _MyHomePageState extends State<MyHomePage> implements UnicoListener {
late UnicoCheckBuilder _unicoCheck;

@override
void onErrorUnico(UnicoError error) {}

@override
void onUserClosedCameraManually() {}

@override
void onSystemClosedCameraTimeoutSession() {}

@override
void onSystemChangedTypeCameraTimeoutFaceInference() {}
}
Métodos de listener obrigatórios

Todos os quatro métodos de listener acima devem ser criados no seu projeto (mesmo sem nenhuma lógica). Caso contrário, o projeto não compilará com sucesso.

Passo 2 — Implemente os listeners da jornada no UnicoSelfie

Adicione os callbacks da jornada à sua classe de estado:

MétodoDescrição
onSuccess(SuccessResult result)Captura realizada com sucesso — retorna SuccessResult com processId (a Unico processa a imagem internamente)
onErrorSelfie(UnicoError error)Captura falhou — retorna um UnicoError com código e descrição
Sem dados de imagem

Ao contrário do fluxo Liveness, o callback da Jornada do Usuário não retorna base64 ou encrypted. A Unico trata o processamento da imagem internamente e retorna apenas um processId.

@override
void onSuccess(SuccessResult result) {
debugPrint('processId: ${result.processId}');
}

@override
void onErrorSelfie(UnicoError error) { }
Passo 3 — Chame openCameraSelfie

O método openCameraSelfie abre a câmera. Para Jornadas do Usuário, passe o webAppToken fornecido pela Unico em vez de um arquivo JSON de credenciais:

_opener.openCameraSelfie(
listener: this,
webAppToken: token,
);
Coleta de dados de monitoramento

O método openCameraSelfie fornece uma sobrecarga que aceita metadados via UnicoCheckPrepareInfo para auxiliar na identificação da sessão do usuário e do fluxo:

  • externalUserId (String, obrigatório) — Identificador do usuário no seu sistema. Automaticamente submetido a hash SHA-256 antes da transmissão.
  • useCase (String, opcional) — Identificador do contexto ou fluxo em execução. Transmitido em texto plano.
_opener.openCameraSelfie(
listener: this,
webAppToken: token,
prepareInfo: UnicoCheckPrepareInfo(
externalUserId: 'external_user_id',
useCase: 'use_case', // opcional
),
);

Para o tratamento completo do resultado, consulte Recebendo o resultado.