Uso
Visita pub.dev para obtener más información sobre nuestro plugin de Flutter:
Una vez que haya configurado su proyecto correctamente, haya requerido los permisos necesarios, entonces solo tendrá que importar el paquete con:
import 'package:ironchip_lbfraud_plugin/ironchip_lbfraud.dart';
Para enviar una transacción, primero debe inicializar el SDK proporcionando una clave API válida.
// Reemplace APIKEY con la clave API generada.
// De forma predeterminada, nuestro plugin apunta al entorno de producción.
// En caso de que desee apuntar a un entorno diferente:
// LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
await _lbfraudPlugin.initFraudSDK(apiKey);
Una vez que se ha inicializado el servicio, ahora puede realizar transacciones:
try {
// TransactionID (obligatorio, único): solicitud de identificador de transacción para resultados de fraude
// UserID (obligatorio): identificador de usuario
// extraData (opcional): información extra para análisis
// Puedes omitir la espera en caso de que el resultado de la acción no sea necesario.
var result =
await _lbfraudPlugin.sendTransaction(transactionID, userID, {});
_showResult = result!;
_resultError = false;
} catch (e) {
_showResult = e.toString();
_resultError = true;
}
Aunque sendTransaction es asíncrono, no es necesario realizar un ‘await’ a menos que desee verificar el resultado real de la acción. Además, si deseas utilizar un proxy específico al realizar una transacción, puedes configurarlo usando:
try {
var result =
await _lbfraudPlugin.setProxy(host, port);
} catch (e) {
}
Example
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:ironchip_lbfraud/ironchip_lbfraud.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _lbfraudPlugin = IronchipLbfraud();
String apiKey = "APIKEY"; // Reemplaza APIKEY con la clave API generada deseada.
bool _isLbfraudInitialized = false;
String userID = "john.doe@gmail.com"; // Identificador de usuario
String _showResult = "";
bool _resultError = false;
@override
void initState() {
super.initState();
}
// Los métodos de LBFraud son asíncronos, así que inicializamos en un método asíncrono.
Future<void> initLBFraudState() async {
try {
await _lbfraudPlugin.initFraudSDK(apiKey);
_isLbfraudInitialized = true;
} catch (e) {
_isLbfraudInitialized = false;
}
setState(() {
_isLbfraudInitialized = _isLbfraudInitialized;
});
}
// Función para generar un ID de transacción aleatorio
String generateRandomTransactionID(int length) {
const _chars =
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
Random _rnd = Random();
return String.fromCharCodes(Iterable.generate(
length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
}
// Función para realizar hashing usando SHA-256
Future<String> sha256Hash(String text) async {
var bytes = utf8.encode(text);
var digest = await compute(_hash, bytes);
return base64UrlEncode(digest);
}
// si quieres se puede usar la libreria crypto para hashear el id de usuario sino implementa un metodo
// pubspec.yml
//(dependencies:
// flutter:
// sdk: flutter
// crypto: ^3.0.1 # Asegurate de tener la ultima version
// )
static List<int> _hash(List<int> bytes) {
// Se utiliza SHA-256 para hashear los bytes
var digest = sha256.convert(bytes);
return digest.bytes; // Devuelve el resultado del hash como una lista de bytes
}
// Función para recortar, convertir a minúsculas y hashear el userID
Future<String> anonymizeUserID(String userID) async {
String trimmedLowercaseUserID = userID.trim().toLowerCase();
return await sha256Hash(trimmedLowercaseUserID);
}
// Función simulada para realizar el inicio de sesión
Future<bool> performLogin(String username, String password) async {
// Simular un retraso para la autenticación
await Future.delayed(Duration(seconds: 2));
// Simular un inicio de sesión exitoso (reemplaza esto con tu lógica real de autenticación)
return username == 'testuser' && password == 'testpassword'; // Cambia según sea necesario
}
Future<void> sendTransaction() async {
try {
// Simular la entrada del usuario para el inicio de sesión
const username = 'testuser'; // Reemplaza con el nombre de usuario real
const password = 'testpassword'; // Reemplaza con la contraseña real
bool loginSuccessful = await performLogin(username, password);
if (loginSuccessful) {
// Si el inicio de sesión es exitoso, anonimiza el userID antes de enviar la transacción
String anonymizedUserID = await anonymizeUserID(userID);
// ID de transacción (requerido, único): identificador de transacción solicitado para resultados de fraude
var result = await _lbfraudPlugin.sendTransaction(
generateRandomTransactionID(10),
anonymizedUserID,
{},
);
_showResult = result!;
_resultError = false;
} else {
_showResult = 'Fallo en el inicio de sesión.';
_resultError = true;
}
} catch (e) {
_showResult = e.toString();
_resultError = true;
}
setState(() {
_resultError = _resultError;
_showResult = _showResult;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Ejemplo de aplicación Ironchip LBFraud'),
backgroundColor: Color(0xFF005255),
),
body: Container(
margin: EdgeInsets.all(40.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
onChanged: (value) {
apiKey = value;
},
decoration: const InputDecoration(labelText: "Clave API"),
),
SizedBox(height: 20),
Text(
_isLbfraudInitialized
? "LBFraud inicializado"
: "LBFraud no está inicializado",
style: TextStyle(
color: _isLbfraudInitialized
? Color(0xFF495c11f)
: Color(0xFFF44336),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: initLBFraudState,
style: ElevatedButton.styleFrom(
primary: Color(0xFF495c11f), // Establecer el color del botón a #4eed56
),
child: Text('Inicializar LBFraud'),
),
TextField(
onChanged: (value) {
userID = value;
},
decoration: const InputDecoration(labelText: "ID de Usuario"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _isLbfraudInitialized ? sendTransaction : null,
style: ElevatedButton.styleFrom(
primary: Color(0xFF495c11f), // Establecer el color del botón a #4eed56
),
child: Text('Enviar Transacción'),
),
SizedBox(height: 20),
Text(
_showResult,
style: TextStyle(
color: _resultError ? Color(0xFFF44336) : Colors.black,
),
),
],
),
),
),
),
);
}
}
Updated: October 17, 2024