Ir al contenido

SDK para Flutter

El plugin de Flutter de Ironchip empaqueta los SDK de Android y de iOS para que puedas enviar transacciones al motor antifraude desde una aplicación Flutter con una sola base de código.

Plataforma Versiones soportadas
Android 5.0.0+
iOS 13.0.0+

El plugin se publica en pub.dev como ironchip_lbfraud. Añádelo al fichero pubspec.yaml de tu paquete:

pubspec.yaml
dependencies:
ironchip_lbfraud: ^2.0.13

Para usar la detección de fraude en Android se recomiendan algunos permisos. El plugin funciona sin ellos, pero la precisión disminuye. Añádelos a tu aplicación para aprovechar todo su potencial:

AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Recuerda que el usuario tiene que aceptar los permisos para que surtan efecto.

Para usar Ironchip LBFraud, añade una capacidad al target de tu aplicación: ve a Signing & Capabilities y añade Access WiFi Information.

Pestaña Signing & Capabilities de Xcode con la capacidad Access WiFi Information

Después, añade estas claves al fichero Info.plist. En cada una, escribe la descripción como cadena de texto:

Info.plist
Privacy - Location Always and When In Use Usage Description
Privacy - Location When In Use Usage Description
Privacy - Location Always Usage Description
LSApplicationQueriesSchemes

LSApplicationQueriesSchemes sirve para saber si el dispositivo tiene jailbreak.

Con el proyecto configurado y los permisos concedidos, importa el paquete:

import 'package:ironchip_lbfraud/ironchip_lbfraud.dart';

Para enviar una transacción, primero inicializa el SDK con una API key válida.

// Sustituye APIKEY por la API key generada.
// De forma predeterminada, el plugin apunta al entorno de producción. Para apuntar a otro:
// LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
await _lbfraudPlugin.initFraudSDK(apiKey);

Una vez inicializado el servicio, ya puedes enviar transacciones:

try {
// transactionID (obligatorio, único): identificador con el que después pedirás el informe
// userID (obligatorio): identificador del usuario
// extraData (opcional): información adicional para el análisis
// Puedes omitir el await si no necesitas el resultado de la acción.
var result = await _lbfraudPlugin.sendTransaction(transactionID, userID, {});
_showResult = result!;
_resultError = false;
} catch (e) {
_showResult = e.toString();
_resultError = true;
}

sendTransaction es asíncrono, pero no necesitas usar await a menos que quieras comprobar el resultado de la acción.

Si quieres usar un proxy concreto al enviar una transacción, configúralo con setProxy:

try {
var result = await _lbfraudPlugin.setProxy(host, port);
} catch (e) {
}

Aplicación de ejemplo completa: inicializa el plugin con la API key que escribe el usuario y envía una transacción con un identificador aleatorio.

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
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"; // Sustituye APIKEY por la API key generada.
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 se inicializan en un método asíncrono.
Future<void> initLBFraudState() async {
try {
// Sustituye APIKEY por la API key generada.
// De forma predeterminada, el SDK apunta al entorno de producción. Para apuntar a otro:
// LBFraudSDK fraud = new LbfraudFlutterPlugin.initFraudSDK("APIKEY", env: Environment.testing);
await _lbfraudPlugin.initFraudSDK(apiKey);
_isLbfraudInitialized = true;
} catch (e) {
_isLbfraudInitialized = false;
}
setState(() {
_isLbfraudInitialized = _isLbfraudInitialized;
});
}
String generateRandomTransactionID(int length) {
const _chars =
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
Random _rnd = Random();
return String.fromCharCodes(Iterable.generate(
length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
}
Future<void> sendTransaction() async {
try {
// transactionID (obligatorio, único): identificador con el que después pedirás el informe
// userID (obligatorio): identificador del usuario
// extraData (opcional): información adicional para el análisis
// Puedes omitir el await si no necesitas el resultado de la acción.
var result = await _lbfraudPlugin
.sendTransaction(generateRandomTransactionID(10), userID, {});
_showResult = result!;
_resultError = false;
} 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('Ironchip LBFraud example app'),
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: "API Key"),
),
SizedBox(height: 20),
Text(
_isLbfraudInitialized
? "LBFraud initialized"
: "LBFraud is not initialized",
style: TextStyle(
color: _isLbfraudInitialized
? Colors.green
: Color(0xFFF44336),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: initLBFraudState,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
),
child: Text('Initialize LBFraud'),
),
TextField(
onChanged: (value) {
userID = value;
},
decoration: const InputDecoration(labelText: "User ID"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _isLbfraudInitialized ? sendTransaction : null,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
),
child: Text('Send Transaction'),
),
SizedBox(height: 20),
Text(
_showResult,
style: TextStyle(
color: _resultError ? Color(0xFFF44336) : Colors.black,
),
),
],
),
),
),
));
}
}
  • SDK de Android: 1.2.13
  • SDK de iOS: 1.2.10

Cambiado

  • Actualización de la documentación del plugin.
  • SDK de Android: 1.2.13
  • SDK de iOS: 1.2.10

Cambiado

  • La versión 0.0.1 se promueve a 2.0.12 por motivos organizativos.
  • SDK de Android: 1.2.13
  • SDK de iOS: 1.2.10

Cambiado

  • Configuración del proyecto.