> 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/react-native/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>

### React Native:

```bash
npm i @facephi/sdk-core-react-native@<versión>
```

### 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, responsável por validar as licenças, entre outras coisas.</td></tr><tr><td>initOperation</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>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 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>

### 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, 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
export function initSession(config: InitSessionConfiguration): Promise<CoreResult> {
  return SdkCore.initSession(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;
    internalOptions?: Record<String, String>;
    enableDebugMode?: boolean;
    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 %}

***

### initOperation <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
export function initOperation(config: InitOperationConfiguration): Promise<CoreResult> {
  return SdkCore.initOperation(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;
    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 %}

***

### closeSession <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
export function closeSession(): Promise<CoreResult> {
  return SdkCore.closeSession();
}
```

***

### getExtraData <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
export function getExtraData(): Promise<CoreResult> {
  return SdkCore.getExtraData();
}
```

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

O processo de IDV inicia 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
export function initFlow(config: FlowConfiguration): Promise<CoreResult> {
  return SdkCore.initFlow(config);
}
```

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 addListener, com a chave 'core.flow' */
let flowListener = flowEmitter.addListener(
  "core.flow",
  (res: any) => console.log("FLOW_LISTENER", res)
);

const getFlowConfiguration = () => 
{
    const sdkConfiguration: FlowConfiguration = {
      flow: "f40c098c-a878-4976-aef1-xxxxxxx",
      customerId: CUSTOMER_ID,
    };
    return sdkConfiguration;
};
    
await initFlow(getFlowConfiguration())
.then(async (result: CoreResult) => 
{
  console.log("initFlow result", result);
  if (result.errorType == SdkErrorType.NoError) 
  {
    await setSelphiFlow().then((result: SelphiResult) => 
    {
      console.log("setSelphiFlow", result);
    });
    await setSelphidFlow().then((result: SelphidResult) => 
    {
      console.log("setSelphidFlow", result);
    });

    await startFlow()
    .then((result: CoreResult) => 
    {
      console.log("startFlow result", result);
    })
    .finally(()=> 
    {
      console.log("End startFlow...");
    });
  }
})
.finally(()=> {
  console.log("End launchFlow...");
});
```

## 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á as informações no formato CoreResult. Podendo-se diferenciar 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" %}
[Resultado do Core](/docs.facephi-pt-br/sdks/sdk-mobile/framework-plugins/extras/core/core-resultado.md)
{% endcontent-ref %}
