> 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/terminos-y-condiciones-de-uso.md).

# Términos y condiciones

## Introducción

La aceptación de términos y condiciones de uso se realiza mediante el ***TermsConditions Component***.

Este componente se encarga de gestionar la captura de la respuesta del usuario ante unos términos y condiciones de uso. Sus principales procesos son:

* Lanzamiento de un visor de texto HTML.
* Captura de la respuesta del usuario.

En el apartado de [Lanzamiento simplificado](/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) se detallan los pasos necesarios para la integración básica del SDK. En esta sección se añade la información específica para el lanzamiento de este componente.

***

## Dependencias

Para evitar conflictos y problemas de compatibilidad, en caso de querer instalar el componente en un proyecto que contenga una versión antigua de las librerías de Facephi, estas deberán eliminarse por completo antes de instalar los componentes de **SDK Mobile**.

### 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 de términos y condiciones de uso, añade la siguiente dependencia en el `Podfile` del proyecto:

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

### Swift Package Manager (SPM)

* Las dependencias obligatorias que deberán haberse instalado previamente son:

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

* Para instalar el componente de términos y condiciones de uso, inclúyelo en los módulos del proyecto:

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

***

## Controladores disponibles

| **Controlador**           | **Descripción**                                            |
| ------------------------- | ---------------------------------------------------------- |
| TermsConditionsController | Controlador principal de captura de aceptación de términos |

***

## Lanzamiento simplificado

Una vez iniciado el SDK y creada una nueva operación, el componente puede lanzarse utilizando su controlador principal.

```swift
let controller = TermsConditionsController(
    data: termsConditionsConfigurationData,
    output: { sdkResult in
        // Do whatever with the result
        ...
    }
)
SDKController.shared.launch(controller: controller)
```

***

## Configuración básica

Para lanzar el componente, se debe crear un objeto `TermsConditionsConfigurationData`, que define la configuración del controlador.

La configuración básica necesaria es la siguiente:

```swift
TermsConditionsConfigurationData(
    termsConditions: "...html..."
)
```

Los parámetros disponibles son:

* `termsConditions`: texto HTML de condiciones y términos de uso que se mostrará al usuario.
* `extractionTimeout`: tiempo máximo permitido para completar el proceso.
* `orientation`: orientación de la pantalla del SDK.

***

## Recepción del resultado

El lanzamiento devolverá la información en formato `SdkResult`. Se puede diferenciar entre un lanzamiento correcto y uno incorrecto.

### Recepción de errores

En la parte del error, se dispondrá de la clase común `ErrorType`.

Listado de errores:

* `TER_APPLICATION_CONTEXT_ERROR`: El contexto de aplicación necesario es nulo.
* `TER_CANCEL_BY_USER`: El usuario ha cancelado el proceso.
* `TER_CANCEL_LAUNCH`: Se ha hecho una cancelación general del SDK.
* `TER_COMPONENT_LICENSE_ERROR`: La licencia del componente no es correcta.
* `TER_EMPTY_LICENSE`: El String de licencia está vacío.
* `TER_FLOW_ERROR`: Error en el proceso de flow.
* `TER_INITIALIZATION_ERROR`: Error de inicialización.
* `TER_MANAGER_NOT_INITIALIZED`: Los managers son nulos.
* `TER_NO_DATA_ERROR`: Los datos de entrada son nulos.
* `TER_OPERATION_NOT_CREATED`: No hay ninguna operación en curso.
* `TER_PERMISSION_DENIED`: El usuario ha rechazado los permisos.
* `TER_TIMEOUT`: Timeout en el proceso.
* `TER_UNKNOWN_ERROR`: Error desconocido.

### Recepción del resultado correcto - data

En la parte de `SdkResult.Success - data`, dispondremos de la clase `TermsConditionsResult`.

`TermsConditionsResult` no expone campos adicionales. Si el usuario acepta los términos, el componente devuelve un resultado correcto; si los rechaza, devuelve un error `OTHER("USER_REJECTED_TERMS_AND_CONDITIONS")`.

***

## Información avanzada

### Configuración avanzada del componente

Para lanzar el componente, se debe crear un objeto `TermsConditionsConfigurationData`.

A continuación se detallan los campos de esta clase:

* `termsConditions`: texto de condiciones y términos de uso que se mostrará al usuario.
* `extractionTimeout`: establece el tiempo máximo que se puede realizar la captura.
* `orientation`: orientación de la interfaz del SDK.

***

## Personalización del componente

Aparte de los cambios que se pueden realizar a nivel de SDK, este componente permite la personalización de su interfaz mediante el sistema de temas del wrapper iOS.

### Tema

La personalización visual se define mediante `ThemeTermsConditionsProtocol`.

Los temas disponibles en el wrapper son:

* `ThemeTermsConditions`: tema por defecto del componente.
* `ThemeTermsConditionsFlow`: tema aplicado cuando se resuelve la personalización externa.

Los recursos de color y dimensiones del componente se resuelven a partir de las claves del sistema de personalización del SDK:

* `sdkPrimaryColor`
* `sdkSecondaryColor`
* `sdkBackgroundPrimaryColor`
* `sdkErrorColor`
* `sdkSuccessColor`
* `sdkNeutralColor`
* `sdkAccentColor`
* `sdkTitleTextColor`
* `sdkBodyTextColor`
* `sdkTopIconsColor`
* `sdkButtonTextColor`

La dimensión configurable disponible es:

* `radiusCorner`

***
