Verificar transacciones
Llame a verify() en momentos sensibles de seguridad. El SDK recopila señales del dispositivo, realiza la atestación y devuelve la decisión de riesgo del backend.
Uso básico
PaymentScreen.tsx
import { useGuardian } from '@surtai/guardian-rn';
function PaymentScreen() {
const { verify } = useGuardian();
const handlePayment = async () => {
try {
const result = await verify('withdrawal', 'User Payment');
if (result.allowed) {
// Proceder con el pago
} else {
// Transacción denegada - verifique result.riskLevel
}
} catch (error) {
// Manejar error del SDK (red, no inicializado, etc.)
}
};
return <Button onPress={handlePayment} title="Pay" />;
}
Contexto del cliente
Establezca el contexto del cliente después de la autenticación de su aplicación. Esto vincula las señales del dispositivo a una identidad de usuario.
const { setCustomer, clearCustomer } = useGuardian();
// Después del inicio de sesión
setCustomer('user_abc123', 'John Doe', 'john@example.com');
// Al cerrar sesión
clearCustomer();
Tipos de transacción
| Tipo | Caso de uso |
|---|---|
'login' | Inicio de sesión del usuario |
'signUp' | Creación de cuenta nueva |
'deposit' | Agregar fondos |
'withdrawal' | Retirar fondos |
Anulación de ubicación por llamada
Anule el valor predeterminado de collectLocation para una sola llamada:
// Omitir ubicación para esta llamada
const result = await verify('login', 'User Login', { collectLocation: false });
// Solicitar ubicación para esta llamada
const result = await verify('withdrawal', 'User Payment', { collectLocation: true });
// Usar el valor predeterminado de inicialización
const result = await verify('login', 'User Login');
La anulación es de un solo uso - solo afecta esa llamada a verify().
Cómo se decide la recopilación de ubicación
| GPS en panel | Su código | Resultado |
|---|---|---|
| habilitado | true (init o anulación) | GPS recopilado |
| habilitado | false (init o anulación) | Sin GPS - usted optó por no participar |
| deshabilitado | true (init o anulación) | Sin GPS - el panel lo tiene desactivado |
| deshabilitado | false (init o anulación) | Sin GPS |
info
Su configuración collectLocation solo puede desactivar GPS. No puede forzar GPS si el panel lo tiene deshabilitado.
Resultado de la verificación
interface VerificationResult {
allowed: boolean; // Decisión del backend - true = continuar
riskLevel: RiskLevel; // 'low' | 'medium' | 'high' | 'blocked' | 'unknown'
sessionId: string; // ID de transacción para referencia de soporte
errors?: string[]; // Mensajes de error del backend, si los hay
timestamp: number; // Marca de tiempo de la respuesta (ms)
metadata?: Record<string, any>; // Metadatos adicionales del backend
}
Para detalles sobre niveles de riesgo, consulte Niveles de riesgo.
Ejemplo completo
App.tsx
import React, { useState } from 'react';
import { View, Button, Text, Alert } from 'react-native';
import {
GuardianProvider,
useGuardian,
type VerificationResult,
} from '@surtai/guardian-rn';
function HomeScreen() {
const { verify, setCustomer, clearCustomer, isInitialized } = useGuardian();
const [result, setResult] = useState<VerificationResult | null>(null);
const handleLogin = async () => {
setCustomer('user_123', 'Jane Doe', 'jane@example.com');
try {
const res = await verify('login', 'User Login');
setResult(res);
Alert.alert(res.allowed ? 'Approved' : 'Denied', `Risk: ${res.riskLevel}`);
} catch (e: any) {
Alert.alert('Error', e.message);
}
};
return (
<View style={{ padding: 20 }}>
<Text>SDK Ready: {isInitialized ? 'Yes' : 'No'}</Text>
<Button title="Login & Verify" onPress={handleLogin} />
<Button title="Logout" onPress={() => { clearCustomer(); setResult(null); }} />
{result && <Text>Allowed: {result.allowed ? 'Yes' : 'No'}</Text>}
</View>
);
}
export default function App() {
return (
<GuardianProvider apiKey="YOUR_API_KEY" environment="production" collectLocation={true}>
<HomeScreen />
</GuardianProvider>
);
}