> 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/android-sdk/inicializacion/lanzamiento-simplificado.md).

# Lançamento simplificado

## Inicializar o SDK <a href="#id-22-inicializar-el-sdk" id="id-22-inicializar-el-sdk"></a>

O SDK funciona por meio de um **controlador principal (`SDKController`)**. A Facephi fornecerá o `apiKey` da licença necessário para a inicialização.

```kotlin
val sdkConfig = SdkConfigurationData(
    sdkApplication = SdkApplication(application),
    licensing = LicensingOnline(EnvironmentLicensingData(
            apiKey = "...")
      )),
)

val result = SDKController.initSdk(sdkConfig)

when (result) {
  is SdkResult.Success -> Log.d("APP: INIT SDK: OK")
  is SdkResult.Error -> Log.d(
          "APP: INIT SDK: KO - ${result.error.name}"
        )
}

if (BuildConfig.DEBUG) {
    SDKController.enableDebugMode()
}
```

## Iniciar operação <a href="#id-23-iniciar-operacion" id="id-23-iniciar-operacion"></a>

Antes de lançar qualquer componente, é obrigatório **iniciar uma operação**.

Este método tem os seguintes parâmetros de entrada:

1. **operationType**: Indica se será feito um processo de ONBOARDING ou de AUTHENTICATION.
2. **customerId**: Identificador do usuário (controlado no nível da aplicação).
3. **steps**: Lista de etapas da operação se tiverem sido definidas previamente.
4. **enableTracking**: Indica se a operação deve enviar eventos de Tracking. Por padrão é `true`.

```kotlin
val result = SDKController.newOperation(
        operationType = OperationType.ONBOARDING,
        customerId = "customer_id",
        steps = listOf(Step.SELPHI_COMPONENT, Step.SELPHID_COMPONENT),
        enableTracking = true)
when (result) {
    is SdkResult.Success -> {
        Timber.d("APP: NEW OPERATION OK")
        Timber.d("Session ID: ${result.data.sessionId}")
        Timber.d("Operation ID: ${result.data.operationId}")
    }
    is SdkResult.Error -> {
        Timber.d("APP: NEW OPERATION ERROR: ${result.error.name}")
    }
}
```

Quando a operação é criada corretamente, `result.data` contém um `OperationResult` com `sessionId`, `operationId`, `type` e `customerId`. Esses valores identificam a sessão e a operação ativa, e podem ser usados para rastreabilidade ou para vincular chamadas posteriores à plataforma.

{% hint style="info" %}
Se a criação de uma nova operação devolver um erro do tipo **INTERNAL\_ERROR** isso se deve principalmente a um problema de **segurança**. Para investigar a causa, é possível recuperar o Token associado ao erro, o qual fornece informações adicionais para sua análise.

```
if (result.error is SdkError.INTERNAL_ERROR){
    val token = (result.error as SdkError.INTERNAL_ERROR).error
}
```

{% endhint %}

## Lançamento de componentes <a href="#id-24-lanzamiento-de-los-componentes" id="id-24-lanzamiento-de-los-componentes"></a>

Cada componente tem seu próprio controlador e é iniciado a partir de `SDKController`.

```kotlin
val result = SDKController.launch(ExampleController(ConfigurationData()))
when (result) {
    is SdkResult.Success -> {
        //Result OK
        result.data
    }
    is SdkResult.Error -> {
        //Result KO
        result.error.name
    }
}
```

O resultado de `launch` mantém a estrutura comum `SdkResult`: em `Success`, `data` contém a saída própria do componente iniciado; em `Erro`, `error` contém o erro específico do componente ou do SDK.

***

## Segurança <a href="#id-24-lanzamiento-de-los-componentes" id="id-24-lanzamiento-de-los-componentes"></a>

O SDK de Android incorpora um sistema de segurança destinado a detectar e bloquear ambientes potencialmente pouco confiáveis ou que possam indicar tentativas de ataque.<br>

Este mecanismo está habilitado por padrão, permite identificar situações que poderiam comprometer a segurança e evita a execução do SDK em contextos que não são considerados seguros:

```
SDKController.securityMode(enable: Boolean) 
```

***
