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

### **Импорт библиотеки**

В файлы, из которых идет обращение к `BotProtection`, необходимо импортировать библиотеку

```swift
import BotProtection
```

### **configure(withApiKey apiKey: String)**

Перед использованием библиотеки необходимо настроить API Key

```swift
BotProtection.configure(withApiKey: "your-bp-api-key-here")
```

### **start()**

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

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

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        BotProtection.configure(withApiKey: "your-bp-api-key-here")
        BotProtection.sendUUID("user-uuid")
        BotProtection.start()
        return true
}
```

Сначала нужно сконфигурировать экземпляр `BotProtection`:

```swift
BotProtection.configure(withApiKey: "your-bp-api-key-here")
BotProtection.sendUUID("user-uuid")
```

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

```swift
BotProtection.start()
```

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

### **sendUUID(\_ uuid: String)**

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

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

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

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

```swift
BotProtection.sendUUID("user-uuid")
```

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

```swift
BotProtection.configure(withApiKey: "your-bp-api-key-here")
BotProtection.sendUUID("user-uuid")
BotProtection.start()
```

### **stop(needToken: Bool, \_ completion: @escaping (\_ challengeID: String?, \_ token: String?, \_ error: BPError?) -> Void)**

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

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

```swift
BotProtection.stop(needToken: true/false) { [weak self] (challengeId, token, error) in
    guard let self = self else { return }
    
    // process error here
    // process challengeId
    // process token (if needToken = true)
}
```

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

**Параметры completion**

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

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

| **Значение**  | **Описание**            |
| ------------- | ----------------------- |
| `invalidData` | Ошибка обработки данных |
| `unknown`     | Неизвестная ошибка      |
