> 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/cordova/componentes/componente-principal.md).

# Componente principal

A instalação do **Core** **Plugin** é obrigatória, independentemente dos produtos que sejam necessários utilizar 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>

### Cordova:

```swift
cordova plugin add @facephi/sdk-core-cordova@<versão>
```

### 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>launchInitSession</td><td>Controlador principal do componente, responsável por validar as licenças, entre outras coisas.</td></tr><tr><td>launchInitOperation</td><td>Método encarregado de gerar uma nova operação. O ID dela é recuperado no objeto de resultado, parâmetro data.</td></tr><tr><td>launchGetExtraData</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>launchCloseSession</td><td>Antes que a aplicação seja destruída, a sessão do SDK deverá ser encerrada para avisar à plataforma sobre sua finalização.</td></tr></tbody></table>

### launchInitSession <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, uma vez concluídas todas as operações com o SDK Mobile, a sessão também deverá ser encerrada.

É possível inicializar o componente atual 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 por meio de 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*, a qual contém um objeto da classe **CoreResult**.

```javascript
exports.launchInitSession = function (cfg) {
    return new Promise((resolve, reject) => {
        var config = [];
        try {
            config = [{
                config: cfg
            }];
        } catch (e) {
            console.log(e);
        }

        exec(resolve, reject, 'SdkCore', 'launchInitSession', config);
    });
};
```

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

Para iniciar 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 é a seguinte:

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

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

A seguir, estã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 %}

***

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

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

```javascript
exports.launchInitOperation = function (cfg) {
    return new Promise((resolve, reject) => {
        var config = [];
        try {
            config = [{
                config: cfg
            }];
        } catch (e) {
            console.log(e);
        }

        exec(resolve, reject, 'SdkCore', 'launchInitOperation', config);
    });
};
```

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

Para iniciar 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 é a seguinte:

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

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

A seguir, estã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 %}

***

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

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

```javascript
exports.launchCloseSession = function (cfg) {
    return new Promise((resolve, reject) => {
        var config = [];
        try {
            config = [{
                config: cfg
            }];
        } catch (e) {
            console.log(e);
        }

        exec(resolve, reject, 'SdkCore', 'launchCloseSession', config);
    });
};
```

***

### 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 na aplicação do cliente, seja necessário enviar essas informações a um determinado serviço para validação ou análise posterior. 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
exports.launchGetExtraData = function () {
    return new Promise((resolve, reject) => {
        var config = [];
        try {
            config = [];
        } catch (e) {
            console.log(e);
        }

        exec(resolve, reject, 'SdkCore', 'launchGetExtraData', config);
    });
};
```

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

O processo de IDV permite iniciar um fluxo configurado na plataforma a partir de seu ID (flowID). Para isso, será necessário invocar dois métodos: **launchInitFlow + launchStartFlow**.

### 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
await facephi.plugins.sdkcore.launchInitFlow({
     "customerId": "cordova@facephi.com",
     "flow": "f40c098c-a878-4976-aef1-xxxxxxx"
})
```

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

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

Código para o lançamento:

```javascript
/* Os resultados são escutados implementando um listener */
setTimeout(function()
{
    if (typeof facephi.plugins.sdkcore !== "undefined")
    {
        facephi.plugins.sdkcore.startListeningTrackingEvents(
            (event) => {
                console.log('📡 startListeningTrackingEvents recebido:', event);
            },
            (err) => {
                console.error('❌ Erro:', err);
            }
        );
        facephi.plugins.sdkcore.startListeningFlowEvents(
            (event) => {
                console.log('📡 startListeningFlowEvents recebido:', event);
            },
            (err) => {
                console.error('❌ Erro:', err);
            }
        );
    }
}, 2000);

await facephi.plugins.sdkcore.launchInitFlow({
     "customerId": "cordova@facephi.com",
     "flow": "f40c098c-a878-4976-aef1-xxxxxxx"
 })
.then(
    async (result) =>
    {
        if (parseInt(result.finishStatus) == SdkMobileFinishStatus.Ok)
        {
            console.log("launchInitFlow resultado", result);
            await facephi.plugins.sdkselphid.setSelphidFlow()
            .then(
                (result) => { console.log("setSelphidFlow resultado", result); },
                (err) => console.log(err),
            );
            await facephi.plugins.sdkselphi.setSelphiFlow()
            .then(
                (result) => { console.log("setSelphiFlow resultado", result); },
                (err) => console.log(err),
            );
            await facephi.plugins.sdkselphi.setSignatureSelphiFlow()
            .then(
                (result) => { console.log("setSignatureSelphiFlow resultado", result); },
                (err) => console.log(err),
            );
            
            /* Ao final de adicionar os fluxos, é acionado o launchStartFlow (desde que os métodos anteriores não falhem) */
            await facephi.plugins.sdkcore.launchStartFlow()
            .then(
                (result) => { console.log("launchStartFlow resultado", result); },
                (err) => console.log(err),
            );
        }
    },
    (err) => 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 devolverão a informação em formato **CoreResult**. Podendo diferenciar entre um lançamento correto e um incorreto:

<pre class="language-typescript"><code class="lang-typescript"><strong>export interface CoreResult {
</strong>    finishStatus: number;
    finishStatusDescription?: string;
    errorType: string;
    errorMessage?: string;
    data?: string;
}
</code></pre>

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