> 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/produtos/idv-suite/flujos-and-integraciones/configuracion-tecnica-del-cliente/sdk-mobile/ios-sdk/inicializacion.md).

# Inicialização

## O que é IDV Mobile

**IDV (Verificação de Identidade)** é o fluxo que permite verificar e autenticar a identidade de uma pessoa por meio da captura e validação de **características biométricas**.

O fluxo é configurado previamente na **plataforma da Facephi** e é executado no aplicativo por meio do seu identificador (`flowId`).

## Dependências necessárias

A seguir, detalha-se a lista de dependências dos componentes disponíveis para integrar um Fluxo de IDV em iOS. Instale apenas os componentes de captura que tenham sido licenciados.

### CocoaPods

```sh
// CORE
pod 'FPHISDKMainComponent', '~> $VERSION'
pod 'FPHISDKTrackingComponent', '~> $VERSION'
pod 'FPHISDKStatusComponent', '~> $VERSION'
pod 'FPHISDKTokenizeComponent', '~> $VERSION'
// COMPONENTES DE CAPTURA
pod 'FPHISDKSelphIDComponent', '~> $VERSION'
pod 'FPHISDKSelphiComponent', '~> $VERSION'
pod 'FPHISDKNFCComponent', '~> $VERSION'
pod 'FPHISDKCaptureComponent', '~> $VERSION'
pod 'FPHISDKVideoRecordingComponent', '~> $VERSION'
```

Para facilitar o processo de integração, deixa-se evidência de uma tabela que faz referência à dependência de cada componente:

<table><thead><tr><th>Componente</th><th width="259.15625">Dependência</th><th>Controlador</th></tr></thead><tbody><tr><td>Selfie</td><td>FPHISDKSelphiComponent</td><td><code>SelphiController</code></td></tr><tr><td>Selfie (com funcionalidade IAD)</td><td>FPHISDKSelphiIADComponent</td><td><code>SelphiController</code></td></tr><tr><td>Documento</td><td>FPHISDKSelphIDComponent</td><td><code>SelphIDController</code></td></tr><tr><td>Videogravação</td><td>FPHISDKVideoRecordingComponent</td><td><code>VideoRecordingController</code> / <code>StopVideoRecordingController</code></td></tr><tr><td>NFC</td><td>FPHISDKNFCComponent</td><td><code>NFCController</code></td></tr></tbody></table>

### Swift Package Manager (SPM)

```sh
// CORE (OBRIGATÓRIOS)
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
git@github.com:facephi-clienters/SDK-TrackingPackage-SPM.git
git@github.com:facephi-clienters/SDK-StatusPackage-SPM.git
git@github.com:facephi-clienters/SDK-TokenizePackage-SPM.git
// COMPONENTES DE CAPTURA
git@github.com:facephi-clienters/SDK-SelphidMBSDRComponent-SPM.git
git@github.com:facephi-clienters/SDK-Selphi_component-SPM.git
git@github.com:facephi-clienters/SDK-NFC_component-SPM.git
git@github.com:facephi-clienters/SDK-VideoRecording-SPM.git
```

Para facilitar o processo de integração, deixa-se evidência de uma tabela que faz referência à dependência de cada componente:

<table><thead><tr><th width="178.30078125">Componente</th><th width="296.1875">Dependência</th><th>Controlador</th></tr></thead><tbody><tr><td>Selfie</td><td>git@github.com:facephi-clienters/SDK-Selphi_component-SPM.git</td><td><code>SelphiController</code></td></tr><tr><td>Selfie (com funcionalidade IAD)</td><td>git@github.com:facephi-clienters/SDK-Selphi_IAD<em>_</em>component-SPM.git</td><td><code>SelphiController</code></td></tr><tr><td>Documento</td><td>git@github.com:facephi-clienters/SDK-SelphidMBSDRComponent-SPM.git</td><td><code>SelphIDController</code></td></tr><tr><td>Videogravação</td><td>git@github.com:facephi-clienters/SDK-VideoRecording-SPM.git</td><td><code>VideoRecordingController</code> / <code>StopVideoRecordingController</code></td></tr><tr><td>NFC</td><td>git@github.com:facephi-clienters/SDK-NFC_component-SPM.git</td><td><code>NFCController</code></td></tr></tbody></table>

O SDK conta com várias bibliotecas que adicionam funcionalidade.

* Status -> Permite que o SDK mostre telas de tutorial e diagnóstico para cada componente, melhorando a experiência do usuário.
* Tokenize -> Alguns serviços exigem o envio dos ativos tokenizados. Esta biblioteca adiciona os valores tokenizados à resposta do componente.

## Inicializar o SDK

O SDK funciona por meio de um **controlador principal (`SDKController`)**, que deve ser inicializado corretamente antes de poder iniciar qualquer Fluxo.

Facephi fornecerá o `apiKey` da Licença necessária para a Inicialização.

Após uma Inicialização correta, o aplicativo terá acesso a **todos os Fluxos configurados para esse projeto**.

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

SDKController.shared.initSdk(
        licensingUrl: SdkConfigurationManager.LICENSING_URL,
        apiKey: SdkConfigurationManager.APIKEY_LICENSING_IDV,
        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,
        tokenizeController: tokenizeController,
        statusController: statusController,
        analyticsOutput: { time, component, type, info  in
            self.log("Analytics: \(Date()) \(component) - \(type) - \(info)")
        })
```

## Iniciar um fluxo de IDV <a href="#lanzamiento-de-idv" id="lanzamiento-de-idv"></a>

O fluxo de IDV é iniciado por meio de um `FlowController`, informando:

* O **ID do fluxo** configurado na plataforma (`flowId`).
* O **ID do cliente** (`customerId`).
* O **ID de autenticação** (`authenticationId`). Somente necessário se estivermos diante de um Fluxo de autenticação.
* A lista de **controladores** que podem participar no processo.

Exemplos de controladores usuais:

* `SelphiController` → Captura Facial.
* `SelphIDController` → Captura de documentos.
* `StartVideoRecordingController` / `StopVideoRecordingController` → Gravação do processo.

```swift
public func launchFlow(viewController: UIViewController, output: @escaping (SdkFlowResult) -> Void) {
        let selphidController = SelphIDController(data: nil, output: {
            print("SelphidController output: \($0.errorType)")
        }, viewController: viewController)
        
        let selphiController = SelphiController(data: nil, output: {
            print("SelphiController output: \($0.errorType)")
        }, viewController: viewController)
        
        let startVideoRecordingController = VideoRecordingController(viewController: viewController, output: {
            print("videoRecordingController output: \($0.errorType)")
        })
        
        let stopVideoRecordingController = StopVideoRecordingController(videoRecordingController: startVideoRecordingController, output: {
            print("stopVideoRecordingController output: \($0.errorType)")
        })
        
        let controllers: [IFlowableController] =
        [selphidController, selphiController, startVideoRecordingController, stopVideoRecordingController]
        
        let flowConfigurationData = FlowConfigurationData(
            id: 340260c3-0428-41d7-91c7-13c2a122cfc3,
            controllers: controllers,
            customerId: SdkConfigurationManager.customerId,
            authenticationId: authenticationId) // Parámetro opcional
        
        let flowController = SdkConfigurationManager.offlineFlow ? FlowOfflineController(flowConfigurationData: flowConfigurationData, output: output): FlowController(flowConfigurationData: flowConfigurationData, output: output)
        self.flowController = flowController
        SDKController.shared.launch(controller: flowController)
}
```

## Consultar fluxos disponíveis

Se precisar obter os fluxos disponíveis antes de iniciar um deles, use:

```kotlin
SDKController.shared.getFlowIds()
```

A função retorna uma lista com o **identificador do Fluxo** e seu **tipo de operação**.
