Ir al contenido

SDK para iOS

El SDK de iOS recoge las señales del dispositivo y de su entorno en cada operación sensible y las envía al motor antifraude de Ironchip. Úsalo si tu aplicación móvil es nativa de iOS.

Plataforma Versiones soportadas
iOS 13.0.0+
  1. En Xcode, ve a la raíz de tu aplicación (por ejemplo, ExampleApp.xcodeproj), selecciona el elemento ExampleApp en PROJECT y abre la tercera pestaña, Package Dependencies.

  2. Haz clic en el botón +.

  3. En la ventana emergente, pega la URL del repositorio en el campo de búsqueda y haz clic en Add Package: https://github.com/Ironchip-Security/LBFraud-SDK-iOS.git

  4. En Dependency Rule, elige una versión exacta, un rango de versiones o una rama. Elige la versión exacta 1.2.10 (la última publicada) o la regla Up to Next Major Version desde 1.2.10, que facilita las actualizaciones del paquete.

    Ventana de Xcode para añadir el paquete LBFraud con la regla de dependencia

Para usar Ironchip LBFraud como Swift Package, 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

En el target de la aplicación, abre la pestaña Info y añade estas claves. En cada una, escribe la descripción como cadena de texto:

  1. Privacy - Location Always and When In Use Usage Description
  2. Privacy - Location When In Use Usage Description
  3. Privacy - Location Always Usage Description
  4. LSApplicationQueriesSchemes: este permiso sirve para saber si el dispositivo tiene jailbreak.

Pestaña Info de Xcode con las claves de permiso de ubicación añadidas

Antes de usar el SDK, la aplicación debe solicitar el permiso de ubicación:

import CoreLocation
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()

Llama al método de inicialización de la biblioteca en el hilo principal.

import LBFraudSDKiOS
...
// Sustituye apikey por la API key generada en la consola.
let ironchipLBFraud = LBFraudSDK.init(apikey: "XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
// El SDK envía las transacciones al entorno de producción de Ironchip.
// Analiza una transacción con el motor antifraude de Ironchip
let extraData: [String: Any] = [
"concept": "Book august",
"amount": 60,
"operation": "booking"
]
// 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
// sendTransaction admite dos callbacks: el primero se ejecuta al terminar la transacción
// y el segundo si se produce un error durante el proceso.
ironchipLBFraud.sendTransaction(transactionId: "random_identifier_generated", userId: "john.doe@gmail.com", extraData: extraData, finish: {
// Código a ejecutar cuando la transacción ha terminado.
}, onError: { err in
// Código a ejecutar si se produce un error durante la transacción.
// Ejemplo:
//if(err is TransactionError) {
// let transactionError = err as! TransactionError
// print(transactionError.traceability_id)
// print(transactionError.message)
// print(transactionError.http_code)
// print(transactionError.code)
//} else {
// print("NetworkError: ", err)
//}
}
)

Ejemplo completo: tras un inicio de sesión correcto, se anonimiza el identificador del usuario con SHA-256 y se envía la transacción.

import LBFraudSDKiOS
import Foundation
import CommonCrypto
// Sustituye apikey por la API key generada en la consola.
let ironchipLBFraud = LBFraudSDK.init(apikey: "XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
// Inicia sesión y envía la transacción si es correcta
func login(username: String, password: String) {
Task {
let loginSuccessful = await performLogin(username: username, password: password)
if loginSuccessful {
// Si el inicio de sesión es correcto, llama a sendTransaction con los parámetros necesarios
let transactionID = generateRandomTransactionID(length: 10) // Genera un ID de transacción único
let anonymizedUserID = anonymizeUserID(username) // ID de usuario anonimizado
let extraData: [String: Any] = [
"amount": 30, // Usa una cantidad apropiada
"operation": "login" // Especifica la operación
]
await sendTransactionAfterLogin(transactionID: transactionID, anonymizedUserID: anonymizedUserID, extraData: extraData)
} else {
// Gestiona el fallo del inicio de sesión
}
}
}
// Inicio de sesión simulado y asíncrono
func performLogin(username: String, password: String) async -> Bool {
try? await Task.sleep(nanoseconds: 2 * 1_000_000_000)
return true
}
// Envía la transacción tras un inicio de sesión correcto
func sendTransactionAfterLogin(transactionID: String, anonymizedUserID: String, extraData: [String: Any]) async {
ironchipLBFraud.sendTransaction(transactionId: transactionID, userId: anonymizedUserID, extraData: extraData, finish: {
// Código a ejecutar cuando la transacción ha terminado.
}, onError: { err in
// Código a ejecutar si se produce un error durante la transacción.
})
}
// Genera un ID de transacción
func generateRandomTransactionID(length: Int) -> String {
let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
var randomID = ""
for _ in 0..<length {
if let randomCharacter = characters.randomElement() {
randomID.append(randomCharacter)
}
}
return randomID
}
// Recorta, convierte a minúsculas y calcula el hash del userId
func anonymizeUserID(_ userId: String) -> String {
let trimmedLowercaseUserID = userId.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
return sha256Hash(trimmedLowercaseUserID)
}
// Calcula el hash con SHA-256
func sha256Hash(_ input: String) -> String {
let inputData = Data(input.utf8)
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
inputData.withUnsafeBytes {
_ = CC_SHA256($0.baseAddress, CC_LONG(inputData.count), &hash)
}
return hash.map { String(format: "%02x", $0) }.joined()
}

Añadido

  • Detección de comunicación.
  • Tipo de red de la SIM (2G, 3G, 4G, 5G).

Añadido

  • Se añade la versión del SDK al modelo de transacción.

Eliminado

  • Se modifica el modelo de transacción para eliminar la información sobre las tarjetas SIM y eSIM del dispositivo.

Añadido

  • Commons se enlaza desde LBFraud en lugar de estar embebido.

Añadido

  • Se modifica el modelo de transacción para incluir información sobre las tarjetas SIM y eSIM del dispositivo.

Cambiado

  • Se modifica el modelo de transacción para incluir el estado de los permisos solicitados.
  • Se modifica el modelo de transacción para incluir si los proveedores de GPS y Wi-Fi están habilitados.

Cambiado

  • Corregido el problema al validar la aplicación en la App Store.
  • Logs del servicio de ubicación para iOS 13.

Cambiado

  • Corregido un problema con la identificación de la huella digital (fingerprint).
  • Gestión de llamadas HTTP externas.

Cambiado

  • Cambian algunas propiedades del dispositivo en el modelo de transacción.

Cambiado

  • Refactorización de nombres de clase.
  • Las etiquetas de los logs se cambian para que coincidan con la refactorización.
  • El constructor ya no admite un host de URL, solo permite seleccionar el entorno deseado.
  • El servicio de GPS lanza un error cuando el permiso no está concedido o la localización está deshabilitada.

Añadido

  • Registros de depuración (logs).

Cambiado

  • Cambios en el modelo de transacción.
  • Gestión de nuevos errores en la biblioteca Commons.

Eliminado

  • Errores de red personalizados: ahora se lanzan los genéricos.

Cambiado

  • La versión 1.1.7 se promociona a 1.1.8 por motivos organizativos.

Añadido

  • Compatibilidad con iOS 13 y posteriores.

Cambiado

  • La URL del paquete pasa a GitHub.

Eliminado

  • print innecesarios.

Añadido

  • La biblioteca Commons lanza errores personalizados y LBFraud los relanza.

Cambiado

  • Se renombran los servicios de la biblioteca Commons.

Añadido

  • Fichero CHANGELOG en el proyecto.

Cambiado

  • Cambian los nombres y la estructura de los parámetros del modelo.

Cambiado

  • Cambia el nombre del repositorio del .xcframework.zip.

Añadido

  • Ahora el proyecto tiene dos .xcframework: uno de la biblioteca Commons y otro de LBFraud.

Cambiado

  • Ahora el paquete Swift obtiene el .xcframework de un repositorio remoto, no de uno local.

Añadido

  • Fichero de licencia (LICENSE) en el proyecto.

Añadido

  • Primera versión estable del Swift Package con un XCFramework llamado LBFraudSDKiOS.xcframework.