Descripción General
Esta guía te muestra cómo integrar el flujo de verificación KYC de Gu1 en tus aplicaciones móviles (Android, iOS, React Native, Flutter) y aplicaciones web (React, Vue, vanilla JS). La verificación se ejecuta en un WebView/iframe que apunta a una URL segura generada por tu backend.Esta guía asume que ya has configurado la integración de tu backend con la API de Gu1. Si no es así, comienza con la Descripción General de la API KYC.
Descripción General de la Arquitectura
Puntos Clave:- Tu backend genera la URL de verificación (nunca expongas claves de API en el cliente)
- Tu frontend abre la URL en WebView/iframe
- Gu1 envía webhooks a tu backend cuando la verificación se completa
- Tu frontend hace polling a tu backend para detectar la finalización
Mejores Prácticas de Seguridad
✅ HACER
Generar URLs bajo demanda desde tu backend
Generar URLs bajo demanda desde tu backend
Implementar TTL corto para URLs
Implementar TTL corto para URLs
Genera URLs de verificación que expiren rápidamente (15-30 minutos). Si el usuario no inicia dentro de ese tiempo, genera una nueva.
Usar patrón Process-and-Purge
Usar patrón Process-and-Purge
Al recibir webhooks de Gu1:
- Extraer solo los datos necesarios
- Actualizar el estado del usuario en tu BD
- No almacenar datos sensibles de verificación a largo plazo
Validar firmas de webhook
Validar firmas de webhook
Siempre verifica que los webhooks provienen de Gu1 usando firmas HMAC.Aprende sobre seguridad de webhooks →
❌ NO HACER
Nunca codificar en duro claves de API o IDs de workflow
Nunca codificar en duro claves de API o IDs de workflow
- Las claves de API expuestas en bundles de app pueden ser extraídas
- Cualquiera puede crear validaciones en tu nombre
- Imposible rotar claves comprometidas sin actualizar la app
No reutilizar URLs de verificación
No reutilizar URLs de verificación
No confiar en validación del lado del cliente
No confiar en validación del lado del cliente
Integración Móvil
Android (Kotlin)
- Standard Android
- Jetpack Compose
iOS (Swift)
- UIKit
- SwiftUI
Kotlin Multiplatform (KMP)
Perfecto para compartir lógica entre Android e iOS:- Common Code
- Android Implementation
- iOS Implementation
React Native
- Agrega permisos de cámara a
AndroidManifest.xmleInfo.plist - Instalar:
npm install react-native-webview
Flutter
- Android: Agrega permiso de cámara a
AndroidManifest.xml - iOS: Agrega descripción de uso de cámara a
Info.plist
Integración Web
React
Vue 3
Plain HTML/JavaScript (Vanilla)
Detección de Finalización del Flujo
Patrón Recomendado: Polling al Backend
Tu frontend hace polling a tu backend, que recibe webhooks de Gu1: Ejemplo de endpoint del backend:- JavaScript
- Kotlin
- Swift
Alternativa: WebSockets (Avanzado)
Para mejor UX, usa WebSockets para enviar actualizaciones en lugar de polling:Manejo de Webhooks
Tu backend recibe webhooks de Gu1 cuando la verificación se completa.Guía de Integración de Webhooks
Ver guía completa de integración de webhooks con ejemplos de código, seguridad y estructuras de payload
Eventos Clave de Webhook
Manejador mínimo de webhook:
Ejemplo de Flujo Completo
Veamos un ejemplo completo de extremo a extremo:1. Backend: Generar URL
2. Frontend: Abrir Verificación
3. Backend: Recibir Webhook
4. Frontend: Detectar Finalización
Pruebas
Entorno Sandbox
Usa el modo sandbox para pruebas:- No se requieren documentos reales
- Puedes simular diferentes resultados
- Los webhooks se disparan normalmente
Probando Diferentes Resultados
Para probar escenarios de rechazo/expiración, usa diferentes datos de prueba en modo sandbox.Solución de Problemas
WebView muestra página en blanco
WebView muestra página en blanco
Posibles causas:
- URL expirada (generar una nueva)
- JavaScript deshabilitado en WebView
- Problemas de conectividad de red
- Habilitar JavaScript:
settings.javaScriptEnabled = true - Verificar que la URL es válida y no ha expirado
- Probar URL en navegador normal primero
Cámara no funciona en WebView
Cámara no funciona en WebView
Posibles causas:iOS:Web:
- Faltan permisos de cámara
- La reproducción de medios requiere gesto del usuario
Polling nunca detecta finalización
Polling nunca detecta finalización
Posibles causas:
- Webhook no recibido por el backend
- Verificación de firma de webhook fallando
- Base de datos no se está actualizando
- Verificar logs de webhook en el dashboard de Gu1
- Verificar implementación de firma de webhook
- Agregar logging al manejador de webhook
- Probar endpoint de webhook manualmente
Usuario atascado en verificación
Usuario atascado en verificación
Posibles causas:
- Iluminación deficiente para fotos de documentos
- Tipo de documento no soportado
- Problemas técnicos
- Proporcionar instrucciones claras antes de comenzar
- Mostrar ejemplos de fotos buenas vs malas
- Implementar timeout (15-20 minutos)
- Permitir al usuario salir y reintentar
Resumen de Mejores Prácticas
Seguridad Primero
- Nunca exponer claves de API en el cliente
- Siempre generar URLs desde el backend
- Verificar firmas de webhook
- Usar HTTPS en todas partes
Experiencia de Usuario
- Mostrar estados de carga
- Proporcionar instrucciones claras
- Manejar errores con gracia
- Permitir reintentos en caso de fallo
Confiabilidad
- Implementar polling con intervalos razonables
- Manejar fallos de red
- Establecer timeouts apropiados
- Probar todas las plataformas exhaustivamente
Cumplimiento
- No almacenar datos sensibles de verificación
- Usar patrón Process-and-Purge
- Respetar políticas de retención de datos
- Documentar tu integración
Próximos Pasos
Descripción General de la API KYC
Aprende sobre la API KYC y la integración del backend
Integración de Webhooks
Configura webhooks para recibir resultados de verificación
Guía de Flujo Completo
Ver el flujo completo de verificación KYC
Guía de Seguridad
Implementa seguridad de webhooks y verificación HMAC