> 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/docs.facephi-pt-br/sdks/sdk-mobile/ios-sdk/modulos/conexion-con-plataforma.md).

# Conexão com a plataforma

O envio de eventos para a plataforma é realizado com o ***Tracking Component*****.**

Este é responsável por realizar o rastreamento e o monitoramento das informações obtidas durante a execução das operações. Será possível acompanhar esses dados em tempo real na **Plataforma**, enquanto o processo está sendo executado no dispositivo do cliente.

Ao contrário do que acontece com o restante, este componente não funciona individualmente, ele atua de forma transversal aos demais componentes instalados na *SDKMobile*.

## Dependências

### CocoaPods

As bibliotecas da Facephi são distribuídas remotamente por meio de gerenciadores de dependências. No iOS, utiliza-se **CocoaPods**. As dependências **obrigatórias** que deverão ter sido instaladas previamente (adicionando-as no arquivo Podfile do projeto) são:

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

Para instalar o componente **Tracking**, adicione a dependência correspondente no `Podfile` do projeto, junto com as dependências obrigatórias do SDK.

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

### Swift Package Manager (SPM)

Se você usa **SPM**, certifique-se de que as dependências obrigatórias do SDK estejam instaladas previamente.

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

Para instalar o componente **Selphi**, inclua-o nos módulos do projeto.

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

## Permissões

Na aplicação cliente onde os componentes forem integrados, é necessário incorporar o seguinte elemento no arquivo **Info.plist** quando o tracking for enviar localização:

```
É necessário permitir o acesso à localização (NSLocationUsageDescription - Privacy - Location Usage Description)
```

{% hint style="info" %}
A permissão de localização só é necessária se **não** configura **`enableLocation: false`** no inicializador de **`TrackingController`**. Por padrão **`enableLocation`** es **`true`** e o componente pode solicitar e enviar localização nos eventos para a plataforma.
{% endhint %}

## Integração

Para referenciar a dependência a partir do nosso código Swift:

```swift
import trackingComponent
```

## Injeção no 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("Licença automática definida corretamente")
    } else {
        self.log("Ocorreu um erro ao tentar obter a licença: \(sdkResult.errorType)")
    }
}, trackingController: trackingController)
```

## Inicialização do TrackingController

Crie a instância de **`TrackingController`** antes de chamar **`SDKController.shared.initSdk`**, passando-a no parâmetro `trackingController`.

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

### **enableLocation**

Controla se o componente **Tracking** solicita e envia **localização** nos eventos para a plataforma. Por padrão a `true`.

## Recebimento de erros

Os erros do controlador de tracking não são terminais. Ao contrário do restante do SDK, eles são informados por meio do callback injetado na sua inicialização (`trackingError` no inicializador anterior).

O parâmetro *trackingError* é uma String que pode assumir os seguintes valores:

* **APPLICATION\_CONTEXT\_ERROR:** Erro na inicialização do contexto
* **ASSET\_LINK**: Erro ao enviar o link do recurso
* **ASSET\_UPLOAD**: Erro durante o carregamento do recurso
* **COMPONENT\_LICENSE\_ERROR**: Licença do componente ausente ou inválida
* **CUSTOMER\_ID**: Erro ao obter ou validar o ID do cliente
* **DEVICE\_EVENT\_ERROR**: Falha durante um evento relacionado ao dispositivo
* **EMPTY\_LICENSE**: Dados de licença vazios ou inexistentes
* **FLOW**: Erro durante o fluxo de execução
* **INITIALIZATION\_ERROR**: Falha geral na inicialização
* **INIT\_IDS\_ERROR**: Erro ao gerar ou atribuir IDs durante a inicialização
* **INIT\_OPERATION**: Operação falhou na fase de inicialização
* **LICENSE\_ERROR**: Licença inválida ou corrompida
* **MANAGER\_NOT\_INITIALIZED**: Tentou-se usar o gerenciador sem inicializá-lo
* **NETWORK\_CONNECTION**: Problema com a conexão de rede
* **NETWORK\_ERROR**: Falha genérica de rede
* **NO\_OPERATION\_CREATED\_ERROR**: Nenhuma operação foi criada quando se esperava
* **OCR\_DATA**: Erro ao processar os dados de OCR
* **OPERATION\_NOT\_CREATED**: A operação esperada não foi gerada
* **OPERATION\_ID**: ID da operação inválido ou ausente
* **SESSION\_ID**: Erro na identificação da sessão
* **SIGNATURE\_RESULT**: Falha no processo ou no resultado de assinatura
* **STEP\_CHANGE**: Transição de etapa inesperada ou inválida
* **STEP\_RESULT\_CANCELLED**: A etapa foi cancelada de forma inesperada
* **STEP\_RESULT\_ERROR**: A etapa terminou com um erro
* **STEP\_RESULT\_EXPIRED**: O resultado da etapa expirou antes de ser concluído
* **STEP\_RESULT\_SUCCEEDED**: A etapa foi bem-sucedida, mas gerou um problema inesperado
* **TOKEN\_ERROR**: Token ausente, expirado ou inválido
* **ADVANCED\_TRACKING\_UPLOAD**: Falha ao enviar os dados de rastreamento avançado
* **TENANT\_ID\_EMPTY\_ERROR**: O ID do tenant estava vazio ou ausente
* **ADVANCED\_TRACKING\_SERIALIZATION\_ERROR**: Erro ao serializar os dados de rastreamento avançado
* **ADVANCED\_TRACKING\_VALIDATION\_ERROR**: Falha na validação dos dados de rastreamento
* **TOKENIZER\_ERROR**: Erro durante o processo de tokenização
