Verificar Transações
Chame verify() em momentos sensíveis à segurança. O SDK coleta sinais do dispositivo, realiza atestação e retorna a decisão de risco do 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) {
// Prosseguir com o pagamento
} else {
// Transação negada - verifique result.riskLevel
}
} catch (error) {
// Tratar erro do SDK (rede, não inicializado, etc.)
}
};
return <Button onPress={handlePayment} title="Pay" />;
}
Contexto do Cliente
Defina o contexto do cliente após a autenticação do seu aplicativo. Isso vincula os sinais do dispositivo a uma identidade de usuário.
const { setCustomer, clearCustomer } = useGuardian();
// Após o login
setCustomer('user_abc123', 'John Doe', 'john@example.com');
// No logout
clearCustomer();
Tipos de Transação
| Tipo | Caso de uso |
|---|---|
'login' | Login do usuário |
'signUp' | Criação de nova conta |
'deposit' | Adição de fundos |
'withdrawal' | Saque de fundos |
Substituição de Localização por Chamada
Substitua o padrão collectLocation para uma única chamada:
// Ignorar localização para esta chamada
const result = await verify('login', 'User Login', { collectLocation: false });
// Solicitar localização para esta chamada
const result = await verify('withdrawal', 'User Payment', { collectLocation: true });
// Usar padrão de inicialização
const result = await verify('login', 'User Login');
A substituição é única - afeta apenas aquela chamada verify().
Como a Coleta de Localização É Decidida
| GPS no Painel | Seu Código | Resultado |
|---|---|---|
| habilitado | true (init ou substituição) | GPS coletado |
| habilitado | false (init ou substituição) | Sem GPS - você optou por sair |
| desabilitado | true (init ou substituição) | Sem GPS - painel desativado |
| desabilitado | false (init ou substituição) | Sem GPS |
informação
Sua configuração collectLocation só pode optar por sair do GPS. Não pode forçar o GPS se o painel o tiver desabilitado.
Resultado da Verificação
interface VerificationResult {
allowed: boolean; // Decisão do backend - true = prosseguir
riskLevel: RiskLevel; // 'low' | 'medium' | 'high' | 'blocked' | 'unknown'
sessionId: string; // ID da transação para referência de suporte
errors?: string[]; // Mensagens de erro do backend, se houver
timestamp: number; // Timestamp da resposta (ms)
metadata?: Record<string, any>; // Metadados adicionais do backend
}
Para detalhes sobre níveis de risco, consulte Níveis de Risco.
Exemplo 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>
);
}