Huellas digitales de dispositivos - Integración con iOS

Esta página describe cómo agregar el SDK de Threatmetrix a su proyecto de iOS.

Para descargar los SDK de Huellas digitales de dispositivos, inicie sesión en vPortal y vaya al Centro de ayuda.

Una vez que haya añadido los archivos de ThreatMetrix a su proyecto, su aplicación generará automáticamente una huella digital del dispositivo durante la inicialización.

Integración

Las siguientes secciones describen cómo agregar los módulos de ThreatMetrix a su proyecto de iOS. La sección Descripción general describe el proceso y define los archivos que deberá incluir. La sección Guía proporciona instrucciones de paso a paso para agregar los módulos a su proyecto y asegurarse de que su aplicación tiene la configuración necesaria.

Descripción

La integración de Huellas digitales de dispositivos en su aplicación requiere crear nuevos módulos para los siguientes archivos que son proporcionados por Threatmetrix:

  • TMXProfilingConnections.dmg: Maneja la transferencia de datos hacia y desde el backend de Threatmetrix.
  • TMXProfiling.dmg: Gestiona la generación de perfiles de dispositivos.

Guía

Siga los siguientes pasos para agregar los módulos de ThreatMetrix a su proyecto:

  1. Guarde los módulos de ThreatMetrix en su máquina local: TMXProfiling.dmg y TMXProfilingConnections.dmg.

  2. Copie los siguientes archivos en el directorio de su aplicación como se muestra en la siguiente imagen: TMXProfiling.xcframework y TMXProfilingConnections.xcframework. TMXBehavioralBiometrics no es necesario para esta integración. Directorios

  3. Abra su aplicación en Xcode.

  4. Seleccione el panel “Project Navigator” en Xcode.

  5. Arrastre y suelte los archivos del marco del paso 2 en su aplicación.

  6. Seleccione “Copy item if needed” (Copiar elemento si es necesario).

  7. Asegúrese de que el objetivo correcto esté seleccionado en la sección “Add to targets” (Agregar a los objetivos), como se muestra a continuación: Objetivos

  8. Seleccione el objetivo de la aplicación.

  9. Seleccione la pestaña General.

  10. En la sección “Frameworks, Libraries and Embedded Content” (Marcos, bibliotecas y contenido integrado), asegúrese de que se añadan los siguientes archivos: TMXProfiling.xcframework y TMXProfilingConnections.xcframework.

  11. Asegúrese de que todos los archivos se incluyan con la configuración “Embed and Sign” (integrar y firmar), como se describe a continuación:

    • Seleccione la pestaña “Build Phases” (Fases de compilación).
    • Abra las secciones “Link Binary with Libraries” (Vincular binario con bibliotecas) y “Embed Frameworks” (Integrar marcos) y compruebe que los archivos de ThreatMetrix aparezcan en la lista, como se muestra en la siguiente imagen. TMXBehavioralBiometrics no es necesario para esta integración.

    Build (Compilación)

  12. Copie el siguiente código y péguelo en su proyecto:

    //
    // LemonBankProfileController.swift
    // VestaCorporation
    //
    // Creado por Admin el 05/03/2018.
    // Derechos de autor © 2018 VestaCorporation. Todos los derechos reservados.
    //
        
    importar Foundation
    importar UIKit
    importar TMXProfiling
    importar TMXProfilingConnections
        
    class TrustDefender: NSObject {
        static let shared = TrustDefender()
            
        private var profile: TMXProfiling = TMXProfiling.sharedInstance()!
            
        private var sessionID: String = ""
        private var orgID: String = ""
        private var webSessionID: String = ""
        private var deviceName : String = ""
        private var deviceModel : String = ""
            
        private(set) var isProfileInitialized: Bool = false
            
        func configure(forDeviceName name: String, deviceModel: String, orgID: String, webSessionID: String) -> TrustDefender {
            self.deviceName = name
            self.deviceModel = deviceModel
            self.orgID = orgID
            self.webSessionID = webSessionID
                
            let profilingConnections = TMXProfilingConnections.init()
            profilingConnections.connectionRetryCount = 2
                
            //La configuración únicamente falla debido a un error de programación, por lo tanto, al usar una aserción aquí nos aseguramos de que no haya un error en nuestro objeto de configuración
            profile.configure(configData: [
                TMXOrgID: orgID,
                TMXFingerprintServer: "h.online-metrix.net",
                // (OPCIONAL) Si se utilizan grupos para compartir de Keychain Access, especifique de esta manera
                TMXKeychainAccessGroup: "TEAMID.com.threatmetrix",
                TMXProfilingConnectionsInstance: profilingConnections
            ])
                
            return self
        }
            
        func configureForDefaultDeviceInformation(orgID: String, webSessionID: String) -> TrustDefender {
            if isProfileInitialized {
                return self
            }
                
            return configure(forDeviceName: UIDevice.current.name, deviceModel: UIDevice.current.model, orgID: orgID, webSessionID: webSessionID)
        }
            
        func doProfile() {
            if isProfileInitialized {
                return
            }
                
            print("Using TrustDefender framework \(profile.version())")
                
            // Lanzar solicitud de perfil.
            profile.profileDevice(profileOptions: [TMXCustomAttributes: [deviceName, deviceModel], TMXSessionID: webSessionID]) { (result) in
                guard let response = result as? [String: Any],
                    let sessionID = response[TMXSessionID] as? String,
                    let profileStatus = response[TMXProfileStatus] as? NSNumber,
                    let status = TMXStatusCode(rawValue: profileStatus.intValue) else {
                    print("THMTrustDefender profile wrong response")
                    return
                }
                    
                var statusString = ""
                self.sessionID = sessionID
                switch status {
                    case .ok:
                        statusString = "ok"
                        self.isProfileInitialized = true
                    case .networkTimeoutError: statusString = "Timed out"
                    case .connectionError: statusString = "Connection Error"
                    case .hostNotFoundError: statusString = "Host Not Found Error"
                    case .internalError: statusString = "Internal Error"
                    case .interruptedError: statusString = "Interrupted Error"
                    default: statusString = "Other reason"
                }
                    
                print("Profile completed with: \(statusString) and session ID: \(self.sessionID)")
            }
        }
    }