> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/sdks/sdk-mobile/ios-sdk/modulos/conexion-con-plataforma.md).

# Conexión con plataforma

El envío de eventos a la plataforma se realiza con el ***Tracking Component*****.**

Éste se encarga de realizar el trackeo y la monitorización de la información obtenida durante la ejecución de las operaciones. Se podrá realizar el seguimiento en tiempo real de estos datos en la **Plataforma**, mientras se está ejecutando el proceso en el dispositivo del cliente.

Al contrario que ocurre con el resto, este componente no funciona individualmente, trabaja de forma transversal al resto de componentes instalados en la *SDKMobile*.

## Dependencias

### Cocoapods

Las librerías de Facephi se distribuyen de forma remota mediante gestores de dependencias. En iOS, se utiliza **CocoaPods**. Las dependencias **obligatorias** que deberán haberse instalado previamente (añadiéndolas en el fichero Podfile del proyecto) son:

```swift
  pod 'FPHISDKMainComponent', '~> $VERSION'
```

Para instalar el componente **Tracking**, añade la dependencia correspondiente en el `Podfile` del proyecto, junto con las dependencias obligatorias del SDK.

```swift
  pod 'FPHISDKTrackingComponent', '~> $VERSION'
```

### Swift Package Manager (SPM)

Si utilizas **SPM**, asegúrate de que las dependencias obligatorias del SDK estén previamente instaladas.

```sh
//HTTPS
https://github.com/facephi-clienters/SDK-SdkPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
```

Para instalar el componente **Selphi**, inclúyelo en los módulos del proyecto.

```swift
//HTTPS
https://github.com/facephi-clienters/SDK-TrackingPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-TrackingPackage-SPM.git
```

## Permisos

En la aplicación cliente donde se vayan a integrar los componentes es necesario incorporar el siguiente elemento en el fichero **Info.plist** cuando el tracking vaya a enviar localización:

```
Es necesario permitir el acceso a la localización (NSLocationUsageDescription - Privacy - Location Usage Description)
```

{% hint style="info" %}
El permiso de localización solo es necesario si **no** configuras **`enableLocation: false`** en el inicializador de **`TrackingController`**. Por defecto **`enableLocation`** es **`true`** y el componente puede solicitar y enviar localización en los eventos hacia la plataforma.
{% endhint %}

## Integración

Para referenciar la dependencia desde nuestro código Swift:

```swift
import trackingComponent
```

## Inyección en el SDK <a href="#id-4-lanzamiento-simplificado" id="id-4-lanzamiento-simplificado"></a>

```swift
SDKController.shared.initSdk(licensingUrl: SdkConfigurationManager.LICENSING_URL, apiKey: SdkConfigurationManager.APIKEY_LICENSING, output: { sdkResult in
    if sdkResult.finishStatus == .STATUS_OK {
        self.log("Licencia automática seteada correctamente")
    } else {
        self.log("Ha ocurrido un error al intentar obtener la licencia: \(sdkResult.errorType)")
    }
}, trackingController: trackingController)
```

## Inicialización del TrackingController

Crea la instancia de **`TrackingController`** antes de llamar a **`SDKController.shared.initSdk`**, pasándola en el parámetro `trackingController`.

```swift
let trackingController = TrackingController(
    trackingError: { trackingError in
        print("TRACKING ERROR: \(trackingError)")
    },
    enableLocation: false,
    debug: debugFlag)
```

### **enableLocation**

Controla si el componente **Tracking** solicita y envía **localización** en los eventos hacia la plataforma. Por defecto a `true`.

## Recepción de errores

Los errores del controlador de tracking no son terminales. Al contrario que con el resto del SDK, se informan a través del callback inyectado en su inicialización (`trackingError` en el inicializador anterior).

El parámetro *trackingError* es un String que puede obtener los siguientes valores:

* **APPLICATION\_CONTEXT\_ERROR:** Error en la inicialización del contexto
* **ASSET\_LINK**: Error al enviar el enlace del recurso
* **ASSET\_UPLOAD**: Error durante la carga del recurso
* **COMPONENT\_LICENSE\_ERROR**: Licencia del componente ausente o no válida
* **CUSTOMER\_ID**: Error al obtener o validar el ID del cliente
* **DEVICE\_EVENT\_ERROR**: Fallo durante un evento relacionado con el dispositivo
* **EMPTY\_LICENSE**: Datos de licencia vacíos o inexistentes
* **FLOW**: Error durante el flujo de ejecución
* **INITIALIZATION\_ERROR**: Fallo general en la inicialización
* **INIT\_IDS\_ERROR**: Error al generar o asignar IDs durante la inicialización
* **INIT\_OPERATION**: Operación fallida en la fase de inicialización
* **LICENSE\_ERROR**: Licencia inválida o corrupta
* **MANAGER\_NOT\_INITIALIZED**: Se intentó usar el gestor sin inicializarlo
* **NETWORK\_CONNECTION**: Problema con la conexión de red
* **NETWORK\_ERROR**: Falla genérica de red
* **NO\_OPERATION\_CREATED\_ERROR**: No se creó ninguna operación cuando se esperaba
* **OCR\_DATA**: Error al procesar los datos de OCR
* **OPERATION\_NOT\_CREATED**: No se generó la operación esperada
* **OPERATION\_ID**: ID de operación inválido o ausente
* **SESSION\_ID**: Error con la identificación de sesión
* **SIGNATURE\_RESULT**: Fallo en el proceso o resultado de firma
* **STEP\_CHANGE**: Transición de paso inesperada o inválida
* **STEP\_RESULT\_CANCELLED**: El paso fue cancelado de forma inesperada
* **STEP\_RESULT\_ERROR**: El paso finalizó con un error
* **STEP\_RESULT\_EXPIRED**: El resultado del paso expiró antes de completarse
* **STEP\_RESULT\_SUCCEEDED**: El paso tuvo éxito pero generó un problema inesperado
* **TOKEN\_ERROR**: Token ausente, expirado o inválido
* **ADVANCED\_TRACKING\_UPLOAD**: Fallo al subir los datos de seguimiento avanzado
* **TENANT\_ID\_EMPTY\_ERROR**: El ID del tenant estaba vacío o ausente
* **ADVANCED\_TRACKING\_SERIALIZATION\_ERROR**: Error al serializar los datos de seguimiento avanzado
* **ADVANCED\_TRACKING\_VALIDATION\_ERROR**: Fallo en la validación de los datos de seguimiento
* **TOKENIZER\_ERROR**: Error durante el proceso de tokenización
