> 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/videollamada.md).

# Videochamada - Videocall

## Introdução

A Videochamada é gerenciada com o ***Componente VideoCall***.

Este componente é responsável por gerenciar a comunicação entre um usuário e um agente (videoassistência). Seus principais processos são:

* Gestão interna de câmeras, microfone e permissões.
* Conexão com os serviços.

Na seção de [Lançamento simplificado](/docs.facephi-pt-br/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) são detalhados os passos necessários para a integração básica do SDK. Nesta seção é adicionada a informação para o lançamento deste componente.

## Dependências <a href="#id-21-dependencias-requeridas-para-la-integracion" id="id-21-dependencias-requeridas-para-la-integracion"></a>

Para evitar conflitos e problemas de compatibilidade, caso queira instalar o componente em um projeto que contenha uma Versão antiga das bibliotecas da Facephi (*Widgets*), eles deverão ser removidos completamente antes da instalação dos componentes da ***SDKMobile***.

### **CocoaPods**

* As dependências obrigatórias que devem ter sido instaladas previamente (adicionando-as no arquivo Podfile do projeto) são:

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

* Para instalar o componente de Videochamada, deve-se incluir a seguinte entrada no Podfile da aplicação:

```
pod 'FPHISDKVideoCallComponent', '~> $VERSION'
```

### **SPM**

* As dependências obrigatórias que deverão ter sido instaladas previamente são:

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

```

* Para instalar o componente de Videochamada, deve-se incluir nos módulos do projeto:

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

## Controladores disponíveis <a href="#id-4-controladores-disponibles" id="id-4-controladores-disponibles"></a>

| **Controlador**     | **Descrição**                         |
| ------------------- | ------------------------------------- |
| VideoCallController | Controlador principal de Videochamada |

## Lançamento simplificado <a href="#id-4-lanzamiento-simplificado" id="id-4-lanzamiento-simplificado"></a>

Uma vez iniciado o SDK e criada uma nova operação, será possível lançar o componente. Será possível fazer uso de qualquer um de seus controladores para executar sua funcionalidade.

Lançamento:

```swift
let controller = VideoCallController(
    data: videoCallConfigurationData,
    extensionIdentifier: "com.organization.app.videocallExtension",
    output: { sdkResult in
        // Do whatever with the result
        ...
    },
    viewController: viewController)
SDKController.shared.launch(controller: controller)
```

`extensionIdentifier` deve coincidir com o **Bundle Identifier** da **Broadcast Upload Extension** de compartilhamento de tela que você adicionar no seu app (veja [Extensão de compartilhamento de tela](#extension-de-compartir-pantalla)).

## Extensão de compartilhamento de tela

Desde a Versão **2.8.1**, a **Broadcast Upload Extension** para compartilhar a tela durante a Videochamada é configurada na **app integradora** e é associada ao componente **Chamada de vídeo** por meio de **`extensionIdentifier`**.

### Etapas no app integrador

1. No Xcode, adicione um target **Broadcast Upload Extension** ao projeto do app (por ex. *File → New → Target → Broadcast Upload Extension*).
2. Defina um **Bundle Identifier** único para a extensão (por ex. `com.organization.app.videocallExtension`).
3. Use esse identificador como **`extensionIdentifier`** ao criar **`VideoCallController`** (veja o exemplo de lançamento anterior).
4. No target e na extensão, deve-se adicionar uma capability do tipo `App Group`. Ao fazer isso, deve-se inserir o mesmo nome tanto no target quanto na extensão.
5. No `Info.plist` da extensão, deve-se modificar `NSExtensionPrincipalClass` para que seu valor seja `videocallComponent.VideoExtensionHandler`.
6. Se for instalado via CocoaPods, deve-se adicionar o target da extensão ao Podfile e sua dependência com VideoCall. Se for instalado com SPM, deve-se adicionar a dependência de VideoCall ao target da extensão.
7. Ative **`activateScreenSharing`** em **`VideoCallConfigurationData`** quando quiser oferecer compartilhamento de tela na chamada.

Existe um [exemplo de programação com essa funcionalidade incorporada](https://github.com/facephi/sdk-mobile-ios-samples/tree/master/sdkmobile-demo-videocall-pods) e configurada.

{% hint style="info" %}
Nas versões **2.8.0** e anteriores, a extensão de broadcast podia ser associada ao Fluxo de **Gravação de vídeo**. A partir de **2.8.1** essa responsabilidade passa para **Chamada de vídeo**.
{% endhint %}

## Configuração básica

A configuração básica necessária não precisará de nenhum parâmetro.

```swift
static var videoCallConfiguration: VideoCallConfigurationData{
        var configVideoCall = VideoCallConfigurationData()
        return configVideoCall
}
```

## Recebimento do resultado <a href="#id-7-recepcion-del-resultado" id="id-7-recepcion-del-resultado"></a>

Os controllers devolverão as informações necessárias no formato SdkResult.

### Recebimento de erros <a href="#id-71-recepcion-de-errores" id="id-71-recepcion-de-errores"></a>

Na parte de erro, teremos a classe comum *ErrorType*.

* VCL\_CANCEL\_BY\_USER: O usuário cancelou o processo
* VCL\_CANCEL\_LAUNCH: Foi feito um cancelamento geral do SDK
* VCL\_COMPONENT\_LICENSE\_ERROR: A Licença do componente não está correta
* VCL\_EMPTY\_LICENSE: A String de Licença está vazia
* VCL\_FACE\_DETECTION\_TIMEOUT: Nenhum rosto foi detectado
* VCL\_INITIALIZATION\_ERROR: Erro de Inicialização
* VCL\_MANAGER\_NOT\_INITIALIZED: Os managers são nulos
* VCL\_NETWORK\_CONNECTION: Erro na conexão com a internet
* VCL\_NO\_DATA\_ERROR: Os dados de entrada são nulos
* VCL\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em andamento
* VCL\_PERMISSION\_DENIED: O usuário recusou as permissões
* VCL\_SOCKET\_ERROR: Erro na conexão dos serviços
* VCL\_TIMEOUT: Timeout no processo
* VCL\_VIDEO\_ERROR: Erro no processamento do vídeo
* VCL\_UNKNOWN\_ERROR: Erro desconhecido
* VCL\_VIDEO\_RECORDING\_ACTIVE: Não é possível iniciar porque o processo de gravação de vídeo está ativo

### Recebimento de execução correta - *data* <a href="#id-72-recepcion-de-ejecucion-correcta-data" id="id-72-recepcion-de-ejecucion-correcta-data"></a>

Na execução correta, apenas se informa que tudo ocorreu bem com o SdkResult.Success.

Quando o resultado for Success e o flag estiver ativo *sharingScreen* será possível ativar o compartilhamento de tela.

## Informações avançadas <a href="#id-7-informacion-avanzada" id="id-7-informacion-avanzada"></a>

Esta seção amplia as informações do componente.

### Configuração avançada do componente <a href="#id-51-class-nfcconfigurationdata" id="id-51-class-nfcconfigurationdata"></a>

Os campos incluídos na configuração, normalmente **não precisam ser informados** pois são preenchidos internamente por meio da licença usada.

**activateScreenSharing**

Ativar a opção de compartilhamento de tela na chamada.

**url**

Caminho para o socket de vídeo

**apiKey**

ApiKey necessária para a conexão com o socket de vídeo

**tenantId**

Identificador do tenant que faz referência ao cliente atual, necessário para a conexão com o serviço de vídeo.

**vibrationEnabled**

Se receber o valor true, a vibração é ativada em erros e, se a resposta do Widget for OK

## Personalização do componente

Além das alterações que podem ser feitas no nível do SDK (as quais são explicadas no documento de *Personalização do SDK*), este componente específico permite a modificação de sua interface.

### Textos

Os textos podem ser personalizados sobrescrevendo o valor das seguintes chaves em um **Localizable.strings**. As chaves que contêm o sufixo ***\_alt*** são os literais utilizados nas etiquetas de acessibilidade necessárias para a funcionalidade de ***VoiceOver***.

| **Name**                                            | **Valor**                                      |
| --------------------------------------------------- | ---------------------------------------------- |
| video\_call\_component\_exit\_alert\_question       | Tem certeza de que deseja encerrar a chamada?  |
| video\_call\_component\_exit\_alert\_finish         | Encerrar                                       |
| video\_call\_component\_exit\_alert\_accept         | Aceitar                                        |
| video\_call\_component\_exit\_alert\_cancel         | Cancelar                                       |
| video\_call\_component\_skip                        | PULAR                                          |
| video\_call\_component\_restart                     | TENTAR NOVAMENTE                               |
| video\_call\_component\_agent                       | Atendente                                      |
| video\_call\_component\_text\_waiting\_agent\_title | Conectando com um atendente...                 |
| video\_call\_component\_close\_button\_alt          | Fechar                                         |
| video\_call\_component\_back\_button\_alt           | Voltar                                         |
| video\_call\_component\_timeout\_title              | Tempo esgotado                                 |
| video\_call\_component\_timeout\_desc               | Não foi possível conectar-se com um atendente. |

Dessa forma, se desejar modificar, por exemplo, o texto “*Encerrar*” da chave `video_call_component_exit_alert_finish` para o idioma **es**, será necessário ir ao arquivo **Localizable.strings** da pasta **es.lproj** caso exista (se não, será necessário criá-lo) e, então, adicionar:

`"video_call_component_exit_alert_finish"="Encerrar";`

Se uma mensagem não for especificada no arquivo do idioma, ela será preenchida com a mensagem padrão.

### Cores <a href="#id-82-colores" id="id-82-colores"></a>

As cores são inicializadas de forma semelhante na variável colors com um dicionário, tendo como valor um UIColor que você desejar.

```
sdkPrimaryColor
sdkBackgroundPrimaryColor
sdkSecondaryColor
sdkBodyTextColor
sdkTitleTextColor
sdkSuccessColor
sdkErrorColor
sdkNeutralColor
sdkAccentColor
sdkTopIconsColor
sdkBackgroundDisabled
```

### Animações <a href="#id-84-animaciones" id="id-84-animaciones"></a>

As animações a usar são inicializadas de forma semelhante na variável animations com um dicionário, tendo como valor uma string com o nome da animação que esteja em xcassets que se deseje usar.

```
video_call_anim_waiting
```
