> 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/framework-plugins/capacitor/componentes/componente-principal.md).

# Componente principal

A instalação do **Core** **Plugin** é obrigatória, independentemente dos produtos que precisem ser utilizados e do caso de uso que tenha sido definido. Contém funcionalidades básicas para o funcionamento do SDK, além de outras funcionalidades transversais e necessárias para os plugins auxiliares.

## Dependências <a href="#id-2-dependencia" id="id-2-dependencia"></a>

### Capacitor:

```bash
npm i @facephi/sdk-core-capacitor@<Versão>
npm run build
npx cap sync
```

### Android - Gradle:

```kotlin
api "com.facephi.androidsdk:sdk:$version"
api "com.facephi.androidsdk:core:$version"
implementation "com.facephi.androidsdk:tracking_component:$version"
```

### iOS - CocoaPods:

```swift
s.dependency 'FPHISDKMainComponent', '~> $version'
s.dependency 'FPHISDKTrackingComponent', '~> $version'
s.dependency 'FPHISDKLicensingComponent', '~> $version'
s.dependency 'FPHISDKTokenizeComponent', '~> $version'
s.dependency 'FPHISDKStatusComponent', '~> $version'
```

## Métodos disponíveis

Este componente contém vários métodos que executam diferentes funcionalidades:

<table data-header-hidden><thead><tr><th width="233.64453125"></th><th></th></tr></thead><tbody><tr><td><strong>Método</strong></td><td><strong>Descrição</strong></td></tr><tr><td>initSession</td><td>Controlador principal do componente, que se encarrega de validar as licenças, entre outras coisas.</td></tr><tr><td>initOperation</td><td>Método que se encarrega de gerar uma nova operação. O id da mesma é recuperado no objeto de resultado, parâmetro data.</td></tr><tr><td>getExtraData</td><td>O método getExtraData permite gerar os identificadores necessários para uma operação que deva continuar no <em>Serviço de Validações da Facephi</em> (Backend).</td></tr><tr><td>closeSession</td><td>Antes de que a aplicação seja destruída, a sessão do SDK deverá ser encerrada para assim avisar a plataforma de sua finalização.</td></tr></tbody></table>

### initSession <a href="#id-2-inicializacion-de-la-sesion" id="id-2-inicializacion-de-la-sesion"></a>

Antes de poder utilizar qualquer componente, a sessão do SDK deverá ser inicializada. Essa inicialização deve ser feita o mais cedo possível, preferencialmente no início da aplicação. Ao mesmo tempo, depois de concluídas todas as operações com o SDK Mobile, a sessão também deverá ser encerrada.

O componente atual pode ser inicializado de duas formas, dependendo de como você deseja injetar a licença.

O novo método de licenciamento permite gerenciar as licenças de forma transparente para o integrador. A licença pode ser injetada de duas maneiras:

* a. Obtendo a licença por meio de um serviço mediante uma URL e API-KEY
* b. Injetando a licença diretamente como String

Em ambos os casos, o resultado será retornado por meio de uma Promise, que contém um objeto da classe **CoreResult**.

```javascript
initSession(configuration: InitSessionConfiguration): Promise<CoreResult>;
```

## Configuração básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para lançar o componente atual, deverá ser criado um objeto ***InitSessionConfiguration*** que será a configuração do controlador do componente.

A configuração básica necessária para isso é a seguinte:

```typescript
export interface InitSessionConfiguration {
    license?: string;
    licenseUrl?: string;
    licenseApiKey?: string;
    enableTracking?: boolean;
    internalOptions?: Record<String, String>;
    enableDebugMode?: boolean;
    locale?: string;
}
```

### Configuração avançada do componente

A seguir, são detalhados todos os campos que fazem parte desta classe.

{% content-ref url="/pages/03cb56bdf3e20441fdb5f45be73ac546bf090d72" %}
[Configuração de Init Session](/docs.facephi-pt-br/sdks/sdk-mobile/framework-plugins/extras/core/init-session-configuracion.md)
{% endcontent-ref %}

***

### initOperation <a href="#id-3-inicializacion-de-la-operacion" id="id-3-inicializacion-de-la-operacion"></a>

Ao iniciar um processo ou fluxo, **sempre** a chamada ao método launchInitOperation deverá ser realizada

```javascript
initOperation(configuration: InitOperationConfiguration): Promise<CoreResult>;
```

## Configuração básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para lançar o componente atual, deverá ser criado um objeto ***InitOperationConfiguration*** que será a configuração do controlador do componente.

A configuração básica necessária para isso é a seguinte:

```typescript
export interface InitOperationConfiguration {
    type: SdkOperationType;
    steps?: string[];
    customerId: string;
}
```

### Configuração avançada do componente

A seguir, são detalhados todos os campos que fazem parte desta classe.

{% content-ref url="/pages/102fd5577a5f062acf9f2589d10f09751e946e78" %}
[Configuração de Init Operation](/docs.facephi-pt-br/sdks/sdk-mobile/framework-plugins/extras/core/init-operation-configuracion.md)
{% endcontent-ref %}

***

### closeSession <a href="#id-6-cierre-de-sesion" id="id-6-cierre-de-sesion"></a>

Antes de que a aplicação seja destruída, a sessão do SDK deverá ser encerrada para avisar a plataforma sobre sua finalização. Para isso, executa-se o seguinte trecho de código:

```javascript
closeSession(): Promise<CoreResult>;
```

***

### launchGetExtraData <a href="#id-7-metodo-extradata" id="id-7-metodo-extradata"></a>

O método getExtraData permite gerar os identificadores necessários para uma operação que deva continuar no *Serviço de Validações da Facephi* (Backend). Essa situação costuma ocorrer em casos nos quais, uma vez obtidas as informações necessárias no aplicativo do cliente, essas informações devam ser enviadas a um determinado serviço para sua posterior validação ou análise. Caso os resultados desses processos precisem ser rastreados na Plataforma, ela deverá ser capaz de unificar a primeira parte do processo realizada no cliente com a última realizada no serviço, já que, no final, ambas fazem parte da mesma operação.

```javascript
getExtraData(): Promise<CoreResult>;
```

## Lançamento de IDV <a href="#lanzamiento-de-idv" id="lanzamiento-de-idv"></a>

O processo de IDV lança um Fluxo configurado na plataforma a partir do seu ID (flowID). Para isso, será necessário invocar dois métodos: **initFlow + startFlow**.

### launchInitFlow

Neste método será definida a configuração necessária. O ID do Fluxo configurado na plataforma (flowID) e o ID do cliente (customerID). Veja o código:

```dart
initFlow = async (): Promise<CoreResult> => 
{
  const widgetConfig: InitFlowConfiguration = {
    flow: "f40c098c-a878-4976-aef1-xxxxxxx",
    customerId: CUSTOMER_ID
  };
  return SdkCore.initFlow(widgetConfig);
};
```

```typescript
startFlow = async (): Promise<CoreResult> => 
{
  console.log('Launching startFlow...');
  return SdkCore.startFlow();
};
```

Para configurar o controlador de fluxos, será criada uma lista dos controladores dos componentes que vão participar do processo, o que permite inicializá-los corretamente. A ordem em que forem definidos não é importante; será o próprio fluxo que indicará a ordem em que serão executados. Por exemplo:

* **setSelphiFlow**: Captura Facial
* **setSelphidFlow**: Captura de documentos

Código para o lançamento:

```javascript
/* Los resultados se escuchan implementando un addListener, con el key 'core.flow' */
listener: any = SdkCore.addListener('core.flow', (response: any) => 
{
  console.log("core.flow:", response);
});

await this.coreService.initFlow().then(async (result: CoreResult) => 
{
  if (result.finishStatus == SdkFinishStatus.Ok)
  {
    await this.selphiFaceService.setSelphiFlow()
      .then((res: SelphiFaceResult) => console.log("setSelphiFlow res", res))
      .catch((err) => console.log("setSelphiFlow err", err));
      
    await this.selphidService.setSelphidFlow()
      .then((res: SelphIDResult) => console.log("setSelphidFlow res", res))
      .catch((err) => console.log("setSelphidFlow err", err));


    await this.coreService.startFlow()
      .then((res: CoreResult) => console.log("startFlow res", res))
      .catch((err) => console.log("startFlow err", err));
  }
}, 
(err: any) => console.log(err));
```

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

O lançamento de ***TODOS*** os métodos retornará a informação em formato CoreResult. Podendo diferenciar-se entre um lançamento correto e um incorreto:

```dart
export interface CoreResult {
    finishStatus: number;
    finishStatusDescription?: string;
    errorType: string;
    errorMessage?: string;
    data?: string;
}
```

{% content-ref url="/pages/c342a4710e152e7e7ff9a672ab3a979b9ecb8f22" %}
[Core Resultado](/docs.facephi-pt-br/sdks/sdk-mobile/framework-plugins/extras/core/core-resultado.md)
{% endcontent-ref %}
