Usar en una aplicación

El método de inicialización de la libreria debe llamarse en el hilo principal.

import LBFraudSDKiOS
...

// Reemplace apikey con la clave API generada deseada.
let ironchipLBFraud = LBFraudSDKiOS.init(apikey: "XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
// Por defecto nuestro SDK apunta al entorno de producción.
// En caso de que desee apuntar a un entorno diferente:
// let ironchipLBFraud = LBFraudSDKiOS.init(apikey: "XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", environment: Environment.Testing)

//public enum Environment: String {
//    case Production
//    case Testing
//    case Development
//}

//Llame a Ironchip Location Based Antifraud para analizar la transacción
let data: [String: Any] = [
    "concept": "Book august",
    "amount": 60,
    "operation": "booking"
]
let transactionID = "random_identifier_generated"; // Identificador de la transacción para los resultados de fraude
let userId = "john.doe@gmail.com" // ID de usuario

//TransactionID (obligatorio, único): solicitud de identificador de transacción para resultados de fraude
//ID de usuario (obligatorio): identificador de usuario
//ExtraData (opcional): información extra para análisis

// SendTransaction se puede proporcionar con 2 devoluciones de llamada, una se ejecuta cuando finaliza la transacción
// y el otro se llama en caso de que haya ocurrido un error durante el proceso de transacción.

ironchipLBFraud.sendTransaction(transactionId: transactionID, userId: userId, extraData: extraData, finish: {
    // Agregue aquí cualquier código que desee que se ejecute una vez finalizada la transacción.
    }, onError: { err in

    // Añade aquí cualquier código que quieras ejecutar en caso de 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)
        //}
    }
)

Example

import LBFraudSDKiOS
import Foundation
import CommonCrypto

// Reemplaza apikey con la clave API generada deseada.
let ironchipLBFraud = LBFraudSDKiOS.init(apikey: "XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")

// Función para realizar el inicio de sesión y llamar a la transacción si es exitosa
func login(username: String, password: String) {
    Task {
        let loginSuccessful = await performLogin(username: username, password: password)
        
        if loginSuccessful {
            // Si el inicio de sesión es exitoso, 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
            ]

            // Llama a sendTransaction después de un inicio de sesión exitoso
            await sendTransactionAfterLogin(transactionID: transactionID, anonymizedUserID: anonymizedUserID, extraData: extraData)
        } else {
            // Manejar el fallo del inicio de sesión
        }
    }
}

// Función de inicio de sesión simulado asíncrono
func performLogin(username: String, password: String) async -> Bool {
    await Task.sleep(2 * 1_000_000_000)
    
    return true
}

// Función para enviar la transacción después del inicio de sesión exitoso
func sendTransactionAfterLogin(transactionID: String, anonymizedUserID: String, extraData: [String: Any]) async {
    // Envía la transacción
    ironchipLBFraud.sendTransaction(transactionId: transactionID, userId: anonymizedUserID, extraData: extraData, finish: {
        // Agrega aquí cualquier código que quieras ejecutar después de que la transacción haya terminado.
    }, onError: { err in
        // Agrega aquí cualquier código que quieras ejecutar en caso de un error durante la transacción.
    })
}

// Función para generar 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
}

// Función para recortar, convertir a minúsculas y hashear el userId
func anonymizeUserID(_ userId: String) -> String {
    let trimmedLowercaseUserID = userId.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
    return sha256Hash(trimmedLowercaseUserID)
}

// Función para realizar hashing usando 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()
}