# Использование SDK

### getInstance()

Чтобы использовать **BotProtection**, достаточно создать экземпляр класса `BotProtection`:

```kotlin
val botProtection = BotProtection.getInstance()
```

### start()

Чтобы начать сбор данных для идентификации ботов и отправки их на сервер, вам нужно вызвать функцию `start()`.

Пример метода `start()`, при котором BotProtection SDK активируется и начинает собирать данные в момент запуска приложения:

```java
 class ApplicationExample: Application() {

    val botProtection by lazy {
        BotProtection.getInstance()
    }
    
    override fun onCreate() {
        super.onCreate()
        
        botProtection
            .sendUUID("uuid")
            .start()
    }
    
    // ...
}
```

Сначала необходимо создать экземпляр `BotProtection`:

```kotlin
val botProtection by lazy {
    BotProtection.getInstance()
}
```

Чтобы начать сбор данных, используйте:

```kotlin
botProtection
    .sendUUID("uuid")
    .start()
```

BotProtection собирает данные до тех пор, пока не произойдет метод `stop()`.

### sendUUID()

Метод `sendUUID` принимает значение типа String.

**UUID** - это уникальный идентификатор пользователя, который позволяет соотносить пользователей с анонимными проанализированными пользователями в системе.

**UUID** может генерироваться независимо или отправлять зашифрованный идентификатор, связанный с пользователем.

Примечание: Этот метод необходимо вызывать в момент входа пользователя в учетную запись и перед вызовом метода `stop()`, который полностью остановит SDK.

```kotlin
botProtection.sendUUID("uuid")
```

Если UUID известен во время выполнения `start()`, вы можете запустить библиотеку следующим образом, сначала сообщив UUID:

```kotlin
botProtection
    .sendUUID("uuid")
    .start()
```

### stop()

Метод `stop()` следует вызывать, если необходимо полностью остановить сбор данных, отключить BotProtection и немедленно отправить данные на сервер.

Примечание: Чтобы снова начать сбор данных и отправку их на анализ, необходимо вызвать `start()`.

```kotlin
 botProtection
   .setMode(Mode.NO_TOKEN) \\ or Mode.WITH_TOKEN
   .setListener(botProtectionListener)
   .stop()
```

| Команда     | Результат                                                                                                                                                                                                  |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| NO\_TOKEN   | <p>Включается режим NO\_TOKEN, который отправляет данные на BotProtection machine и останавливает библиотеку. </p><p>Этот режим полезен, когда вам нужно проанализировать трафик из вашего приложения.</p> |
| WITH\_TOKEN | <p>Полезно, когда токен JWT планируется передать бэкенду для активной защиты от ботов.</p><p>Например, такой подход используется используется в процессе создания нового пользователя на клиенте.</p>      |

### setListener()

Чтобы получить результаты анализа поведения BotProtection, вы можете использовать функцию обратного вызова `BotProtectionListener`. Этот метод работает так же, как обычный `start()`.

```kotlin
.setListener(object : BotProtectionListener {
    override fun onSuccess(botProtectionResult: BotProtectionResult) {
		    Log.i(TAG, "challengeId: ${botProtectionResult.challengeId}, "
		            + "token: ${botProtectionResult.token}")
    }

    override fun onError(result: BotProtectionError) {
        Log.e(TAG, botProtectionError.name)
    }
})
```

| Команда       | Описание                                                                                                                                                                              |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `challengeId` | Уникальный идентификатор для подтверждения пользователя, который можно отправить на сервер для получения результатов (не обязательно, поскольку вы можете получить результат по UUID) |
| `token`       | Принимается, если используется режим `WITH_TOKEN`. Используется для активного препятствия ботам                                                                                       |

В **BotProtectionResult** присутствует два метода `getChallengeId()` и`getToken()` необходимых для получения информации из проверки.

> `getToken()` возвращает значение только при режиме **`WITH_TOKEN`**

В **BotProtectionError** может содержать следующие значения:

| **Значение**                     | **Описание**                                                |
| -------------------------------- | ----------------------------------------------------------- |
| **CONNECTION\_ERROR**            | Ошибка подключения                                          |
| **INVALID\_DATA**                | Ошибка обработки данных                                     |
| **BP\_KEY\_NAME\_NOT\_FOUND**    | ApiKey не найден в метаданных                               |
| **BP\_KEY\_NAME\_NULL\_POINTER** | ApiKey равен NULL                                           |
| **BP\_KEY\_INCORRECT**           | ApiKey неправильно записан, скопируйте его снова из консоли |
| **UNKNOWN**                      | Неизвестная ошибка                                          |
