IOS

Registro de cambios 

[1.2.10] - 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.9] - 2023-05-18 - 2023-10-11 

Agregado 

  • Se agregó la versión sdk al modelo de transacción.

Cambiado 

Eliminado 

[1.2.8] - 2023-05-12 - 2023-05-12 

Agregado 

Cambiado 

Eliminado 

  • Se modificó el modelo de transacción para eliminar información sobre las tarjetas SIM y eSIM del dispositivo.
[1.2.7] - 2023-03-23 - 2023-05-05 

Agregado 

  • Se ha hecho que Commons se vincule a LBFraud y no se embeba.

Cambiado 

Eliminado 

[1.2.6] - 2023-03-15 - 2023-03-23 

Agregado 

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

Cambiado 

Eliminado 

[1.2.5] - 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.4] - 2022-12-20 - 2023-02-02 

Agregado 

Cambiado 

  • Solucionado el problema al validar la aplicación en Apple Store.
  • Logs del servicio de ubicación para las versiones de iOS 13.

Eliminado 

[1.2.3] - 2022-12-09 - 2022-12-20 

Agregado 

Cambiado 

  • Se solucionó el problema con la identificación de la huella digital.
  • Manejar llamadas HTTP externas.

Eliminado 

[1.2.2] - 2022-11-30 - 2022-12-09 

Agregado 

Cambiado 

  • Cambiar alguna propiedad del dispositivo en el modelo de transacción.

Eliminado 

[1.2.1] - 2022-11-22 - 2022-11-30 

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.
  • Servicio GPS, lanza error cuando el permiso no esta aceptado o la localizacion esta desabilitada

Eliminado 

[1.2.0] - 2022-10-31 - 2022-11-22 

Agregado 

  • Debug Logs

Cambiado 

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

Eliminado 

  • Errores de red, ahora lanza los genéricos no personalizados

[1.1.8] - 2022-10-25 - 2022-10-31 

Agregado 

Cambiado 

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

Eliminado 

[1.1.7] - 2022-10-25 - 2022-10-25 

Agregado 

  • Compatibilidad para versiones 13+.

Cambiado 

  • Cambiar URL de Nexus a GitHub.

Eliminado 

[1.1.6] - 2022-09-14 - 2022-10-25 

Agregado 

Cambiado 

Eliminado 

  • Prints innecesarios.

[1.1.5] - 2022-09-14 - 2022-09-14 

Agregado 

  • En la libreria de commons, gestion de errores personalizados, y LBFraud los relanza.

Cambiado 

  • Cambiar el nombre de los servicios de la libreria commons.

Eliminado 

[1.1.4] - 2022-09-12 - 2022-09-14 

Agregado 

  • Agregado el archivo CHANGELOG al proyecto.

Cambiado 

  • Se han cambiado los nombres de los parámetros del modelo y su estructura.

Eliminado 

[1.1.2] - 2022-09-03 - 2022-09-12 

Agregado 

Cambiado 

  • Cambiar el nombre del repositorio de nexus de .xcframework.zip.

Eliminado 

[1.1.1] - 2022-08-27 - 2022-09-03 

Agregado 

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

Cambiado 

  • Ahora el paquete Swift está obteniendo el .xcframework de uno remoto, no local.

Eliminado 

[1.1.0] - 2022-08-24 - 2022-08-27 

Agregado 

- Archivo de LICENCIA agregado al proyecto.

Cambiado 

Eliminado 

[1.0.9] - 2022-08-23 

Agregado 

- Primera versión estable de SwiftPackage con un XCFramework llamado LBFraudSDKiOS.xcframework.
- Añadido archivo gitignore.

Cambiado 

Eliminado 

Configuración 

Versiones soportadas 

Plataforma Versiones soportadas
iOS 13.0.0+

Agregue el SDK de autenticación basada en la ubicación de Ironchip 

Usando Xcode: Para importar esta dependencia de paquete rápido, en xcode, vaya a la raíz de su aplicación, por ejemplo, ExampleApp.xcodeproj, en la parte superior de PROYECTO, seleccione el elemento ExampleApp y vaya a la tercera pestaña, Dependencias del paquete, seleccione el botón +.

Se abrirá una ventana emergente y en la búsqueda o ingrese la url, copie la url del repositorio y presione el botón Agregar paquete.

En este caso: https://github.com/Ironchip-Security/LBFraud-SDK-iOS.git

Aparece una nueva ventana, en regla de dependencia, puede seleccionar una versión exacta, un rango de versiones, una rama… en este caso para probarlo puede elegir la versión exacta 1.2.9 y finalmente agregar el paquete para usarlo, o un rango como 1.0.9 < 1.2.10, recomendamos para facilitar las actualizaciones de paquetes que utilice un rango de versiones

Para poder usar Ironchip LBFraud como SwiftPackage, deberá agregar una capacidad al objetivo de su aplicación, así que vaya a inicio de sesión y capacidades y agregue acceder a la información de Wi-Fi.

Luego, en la pestaña Destino de la aplicación en info, debe agregar los valores clave del permiso de ubicación.

  1. Privacidad - Ubicación siempre y cuando esté en uso Descripción de uso e inserte la descripción como cadena
  2. Privacidad - Ubicación cuando está en uso Descripción de uso e inserte la descripción como cadena
  3. Privacidad - Ubicación Siempre Descripción de uso e inserté la descripción como cadena
  4. LSApplicationQueriesSchemes, inserte la descripción (este permiso es para poder saber si el dispositivo tiene jailbreak)

En primer lugar, debe solicitar el permiso de ubicación en su aplicación:

import CoreLocation

let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()


Uso

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"
]

//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: "random_identifier_generated", userId: "john.doe@gmail.com", 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)
//}
}
)

Ejemplo

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()
}