> 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/inicializacion/integracion-idv-mobile.md).

# Integração IDV Mobile

## 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'
// COMPONENTES DE CAPTURA
pod 'FPHISDKSelphIDComponent', '~> $VERSION'
pod 'FPHISDKSelphiComponent', '~> $VERSION'
pod 'FPHISDKNFCComponent', '~> $VERSION'
pod 'FPHISDKCaptureComponent', '~> $VERSION'
pod 'FPHISDKVideoRecordingComponent', '~> $VERSION'
```

### Swift Package Manager (SPM)

```sh
// CORE
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
git@github.com:facephi-clienters/SDK-TrackingPackage-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
git@github.com:facephi-clienters/SDK-CapturePackage-SPM.git
```

## Dependências opcionais

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.

### CocoaPods

```sh
pod 'FPHISDKStatusComponent', '~> $VERSION'
pod 'FPHISDKTokenizeComponent', '~> $VERSION'
```

### Swift Package Manager (SPM)

```sh
git@github.com:facephi-clienters/SDK-StatusPackage-SPM.git
git@github.com:facephi-clienters/SDK-TokenizePackage-SPM.git
```

## 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
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**.
