Registro de cambios
[1.2.13] - 2023-10-11 - hoy en día
Agregado
Detección de comunicación.
Tipo de red Sim (2G,3G,4G,5G)
Cambiado
Eliminado
[1.2.12] - 2023-09-12 - 2023-10-11
Agregado
Método de configuración del proxy.
Cambiado
Se utilizan conjuntos de cifrado.
Eliminado
[1.2.11] - 2023-07-05 - hoy en día
Agregado
Cambiado
Se corrigieron datos adicionales que no se enviaban.
Eliminado
[1.2.10] - 2023-06-23 - 2023-07-05
Esta versión es una actualización sin cambios funcionales. El número de versión se actualiza a 1.2.10 para mantener la secuencia de versiones.
Agregado
Cambiado
Eliminado
[1.2.9.2] - 2023-06-23 - 2023-06-23
Agregado
Cambiado
Biblioteca Commons actualizada para correcciones adicionales.
Eliminado
[1.2.9.1] - 2023-06-22 - 2023-06-23
Agregado
Cambiado
Biblioteca Commons actualizada para aplicar algunas correcciones de errores.
Eliminado
[1.2.9] - 2023-05-18 - 2023-06-22
Agregado
Se agregó la versión sdk al modelo de transacción.
Cambiado
Manejo previo de errores para permitir la creación del servicio de fraude incluso si el proveedor de gps no está disponible.
Eliminado
[1.2.8] - 2023-05-12 - 2023-05-12
Agregado
Se agregaron manejos de errores adicionales para evitar que la transacción falle cuando falla algún paso de compilación.
Cambiado
Eliminado
[1.2.7] - 2023-03-15 - 2023-05-12
Agregado
Se modificó el modelo de transacción para agregar información sobre la tarjeta SIM.
Cambiado
Eliminado
[1.2.6] - 2023-02-02 - 2023-03-15
Agregado
Cambiado
Se modificó el modelo de transacción para agregar los estados de los permisos solicitados.
Se modificó el modelo de transacción para agregar si los proveedores de gps y wifi están habilitados.
Eliminado
[1.2.5] - 2023-01-13 - 2023-02-02
Agregado
Cambiado
Se corrigió la configuración de proguard que hacía que la aplicación del cliente se volviera a empaquetar en nuestra carpeta interna de la biblioteca.
Eliminado
[1.2.4] - 2023-01-10 - 2023-01-13
Agregado
Cambiado
Los errores durante el callback de sendTransacción ahora se registrarán en lugar de redirigirse al callback de excepción.
Eliminado
[1.2.3] - 2022-12-09 - 2023-01-10
Agregado
Cambiado
Se solucionó el problema con la identificación de la huella digital.
Eliminado
[1.2.2] - 2022-11-30 - 2022-12-09
Agregado
Cambiado
Refactorización de nombres de clase.
Se cambiaron las etiquetas en los registros para que coincidan con la refactorización.
Fraud constructor ya no admite un host de URL, solo permite seleccionar el entorno deseado.
Eliminado
[1.2.0] - 2022-10-12 - 2022-11-22
Agregado
Se agregó la versión del kernel en las propiedades del dispositivo.
Registros de depuración
Cambiado
Se corrigieron errores con el envío de cadenas JSON en lugar de matrices
Mejora en la identificación del dispositivo, identificación de instalación y huella digital
GPS y Signal ya no pueden causar un bloqueo en el proceso
Eliminado
[1.1.3] - 2022-09-30 - 2022-10-12
Agregado
Cambiado
Publicar repositorio de nexus a github.
Eliminado
[1.1.2] - 2022-09-30 - 2022-10-12
Agregado
Compatibilidad para versiones 5+
Cambiado
Eliminado
[1.1.0] - 2022-09-22 - 2022-09-30
Agregado
Archivo de LICENCIA agregado al proyecto
Cambiado
Refactorización del nombre del módulo
Eliminado
[1.0.2] - 2022-09-10 - 2022-09-22
Agregado
Excepciones personalizadas
Cambiado
Se excluyeron las devoluciones de llamada y las excepciones de ofuscación para facilitar el uso del cliente.
Se cambiaron los nombres y la estructura de los parámetros del modelo.
Eliminado
[1.0.1] - 2022-09-10 - 2022-09-12
Agregado
CI/CD para compilar y publicar en las ramas dev, testing and release.
Cambiado
Devoluciones de llamada excluidas y excepciones de ofuscación para facilitar el uso del cliente.
Se cambiaron los nombres y la estructura de los parámetros del modelo.
Eliminado
[1.0.0] - 2022-09-10
Agregado
Ofuscación de código y gitignore extendido.
Cambiado
Secciones de código migradas del código a una biblioteca común.
Modificado el comportamiento del servicio de GPS
Eliminado
Configuración
Versiones soportadas
Plataforma | Versiones soportadas |
---|---|
Android | 5.0.0+ |
Agregue el SDK de fraude basado en la ubicación de Ironchip
Agregar nuestra biblioteca en otros proyectos
Primero, en el fichero setting.gradle, se deberá referenciar al repositorio remoto donde se encuentra la librería.
dependencyResolutionManagement {
...
repositories {
maven { url 'https://jitpack.io' }
...
}
}
A continuación, en el fichero gradle.build, se deberá añadir la dependencia del sdk. Then, inside the file, add the dependency to the sdk.
dependencies {
...
implementation "com.github.Ironchip-Security:LBFraud-SDK-Android:1.2.13"
...
}
Permisos
Añada los siguientes permisos a su manifest:
<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" />
Uso
Usar en una aplicación
Para aprovechar todo el potencial del sdk, es necesario conceder el permiso ACCESS_FINE_LOCATION.
import com.ironchip.ironchiplbfraudandroidsdk.LBFraudSDK;
...
// Reemplace APIKEY con la clave API generada deseada.
LBFraudSDK fraud = new LBFraudSDK(this, "APIKEY");
// Por defecto nuestro SDK apunta al entorno de producción.
// En caso de que desee apuntar a un entorno diferente:
// LBFraudSDK fraud = new LBFraudSDK(this, "APIKEY", LBFraudSDK.Environment.Testing);
//public enum Environment {
// Production,
// Testing,
// Development
//}
Map<String, Object> extraData = new HashMap<>();
extraData.put("concept", "Book august");
extraData.put("amount", new Integer(30));
extraData.put("operation", "booking");
// TransactionID (required,unique): transaction identifier request for fraud results
// UserID (required): User identifier
// ExtraData (optional): extra information for analysis
// The sendTransaction can be provided with 2 callbacks, one is executed when the transaction is finished
// and the other one is called in case an error did occure during the transaction process.
ironchipLBFraud.sendTransaction("random_identifier_generated", "john.doe@gmail.com", extraData, () -> {
// Add here any code you want to be executed after the transaction
// has finished.
}, exception -> {
// Add here any code you want to perform in case of an error
// during the transaction.
// exception.printStackTrace()
});
Ejemplo
import com.ironchip.ironchiplbfraudandroidsdk.LBFraudSDK;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
...
// Reemplace APIKEY con la clave API generada deseada.
LBFraudSDK fraud = new LBFraudSDK(this, "APIKEY");
// Método asincrónico para realizar el inicio de sesión del usuario
private void login(String username, String password) {
performLogin(username, password).thenAccept(loginSuccessful -> {
if (loginSuccessful) {
// Si el inicio de sesión es exitoso, llama a sendTransaction con los parámetros necesarios
String transactionID = generateRandomTransactionID(10); // Generate or fetch your transaction ID
String userID = "john.doe@gmail.com"; // Identificador de usuario
String anonymizedUserID = anonymizeUserID(userID); // ID de usuario anonimizado
Map<String, Object> extraData = new HashMap<>(); // Información adicional para análisis
extraData.put("amount", 30); // Usa Integer.valueOf(30) si fuera necesario
extraData.put("operation", "login");
sendTransactionAfterLogin(transactionID, anonymizedUserID, extraData);
} else {
// Manejar el fallo en el inicio de sesión
}
});
}
// Función de inicio de sesión asincrónica que devuelve un Future<Boolean>
private CompletableFuture<Boolean> performLogin(String username, String password) {
return CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000);
// Reemplaza con tu lógica de inicio de sesión real
// Por ejemplo, autentica al usuario y devuelve true si es exitoso
return true;
} catch (InterruptedException e) {
return false; // En caso de un error, devuelve false
}
});
}
// Función para enviar la transacción después de un inicio de sesión exitoso
private void sendTransactionAfterLogin(String transactionID, String anonymizedUserID, Map<String, Object> extraData) {
// Enviando la transacción
fraud.sendTransaction(transactionID, anonymizedUserID, extraData, () -> {
// Agrega aquí cualquier código que quieras ejecutar después de que la transacción haya finalizado.
}, exception -> {
// Agrega aquí cualquier código que quieras ejecutar en caso de un error durante la transacción.
});
}
// Función para recortar, convertir a minúsculas y hashear el userID
public static String anonymizeUserID(String userID) {
String trimmedLowercaseUserID = userID.trim().toLowerCase();
return hashString(trimmedLowercaseUserID);
}
// Función para realizar el hashing utilizando SHA-256
public static String hashString(String input) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : hashBytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("Error while calculating hash", e);
}
}
private String generateRandomTransactionID(int length) {
// Implementa tu método para generar un ID de transacción único.
const String chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890";
Random rnd = new Random();
return IntStream.range(0, length)
.mapToObj(i -> String.valueOf(chars.charAt(rnd.nextInt(chars.length()))))
.collect(Collectors.joining());
}