Por que não WebView?
O widget KYC usagetUserMedia para acessar a câmera em tempo real (selfie + liveness). Esse recurso é bloqueado ou instável dentro de WebViews no iOS. A solução recomendada pelo mercado (Stripe, Onfido, Plaid) é o fluxo redirect: o app abre o widget em um browser externo e recebe o resultado via deep link.
Fluxo Completo
1. Criar sessão com redirect_uri
No backend do cliente, inclua o campo redirect_uri ao criar a sessão:
redirect_uri está presente:
widget_url já contém o token. Passe-o para o app — o app nunca precisa conhecer a API Key nem o session_token.
2. Abrir o widget no app
React Native (Expo)
React Native (bare / CLI)
Flutter
3. Configurar deep link no app
Expo (app.json)
Android (AndroidManifest.xml — bare workflow)
iOS (Info.plist)
4. Deep link recebido
O resultado final (
approved / rejected / manual_review) chega via:
- Webhook configurado na sessão (recomendado) — ver Webhook
- Polling em
GET /v1/verify/{verification_id}com sua API Key
O
session_token nunca aparece no deep link. O deep link só contém o verification_id (UUID público), sem scores, OCR nem dados internos.Segurança
Vantagens do fluxo redirect
- Câmera nativa do browser — funciona em iOS e Android sem workarounds de WebView
- Widget atualiza sem o cliente publicar nova versão do app
- A mesma URL funciona para web e mobile
- Padrão já conhecido por desenvolvedores (mesmo fluxo do Sign in with Google, Stripe Checkout, Plaid Link)

