# Методы React Native SDK
 :::info 
 [Использование всех методов можно найти в примере по реализации интеграции с Mindbox SDK](https://github.com/mindbox-cloud/react-native-sdk/blob/develop/example/exampleApp/src/screens/HomeScreen.tsx)
:::

## Инициализация

### Mindbox.initialize

Создание конфигурации и инициализация SDK

```typescript
MindboxSdk.initialize({
        domain: 'домен API mindbox',
        endpointId:
          Platform.OS === 'ios'
            ? '<ios ендпоинт>'
            : '<android ендпоинт>',
        subscribeCustomerIfCreated: true,
        shouldCreateCustomer: true,
        previousInstallId: '',
        previousUuid: '',
      })
```

 :::info{title="Domain API Mindbox"} 

 Домен, по которому будет обращение в API Mindbox.

 Возможные значения:  
 api.mindbox.ru - выбирается, если адрес проекта project.mindbox.ru  
 api.mindbox.cloud - выбирается, если адрес проекта project.mindbox.cloud

 ❗️ Не передавайте в этом поле адрес административного раздела
:::


## Получение данных от SDK

### getDeviceUUID

Метод получения UUID устройства после присвоения. Может вызываться в любое время, но вернет строку в колбек только после инициализации.

```typescript
MindboxSdk.getDeviceUUID(uuid => {
    console.log(uuid);
  });
```

### getToken

Метод получения token(APNS/FMS) после присвоения. Может вызываться в любое время, но вернет строку в колбек только после инициализации.

```typescript
MindboxSdk.getToken(token => {
    console.log(token);
  });
```

## Обработка кликов по уведомлениям

### onPushClickReceived

Метод для подписки на событие кликов по уведомлениям. Переданный колбек вызывается в момент, когда пользователь нажимает на уведомление и запускается приложение  
В качестве аргумента передается та ссылка, которая была в нажатом пуше.  
Если нажатие было по кнопке - возвращается ссылка из кнопки, если по телу - то ссылка с тела

```typescript
MindboxSdk.onPushClickReceived((pushUrl: String | null, pushPayload: String | null) => { 
  console.log(pushUrl);
  console.log(pushPayload);
});
```

## Передача событий (вызов операций)

Передача событий в Mindbox происходит через выполнение операций, заведенных в административном разделе. Операции можно выполнять в 2 режимах:

* асинхронно - API Mindbox отвечает 200 сразу, как получил данные. Обработка данных происходит в фоновом режиме
* синхронно - API Mindbox начинает обрабатывать запрос в момент получения и отвечает актуальным статусом обработки

[Подробное описание передачи событий через iOS SDK](https://developers.mindbox.ru/docs/rn-sdk-events)

### executeAsyncOperation

Метод выполнения операции в асинхронном режиме.

```typescript

MindboxSdk.executeAsyncOperation({
  operationSystemName: '<системное имя операции>',
  operationBody: { <JS объект с данными> },
});
```

### executeSyncOperation

Метод для выполнения операции в синхронном режиме. Данные возвращаются в переданные колбеки

```typescript
MindboxSdk.executeSyncOperation({
  operationSystemName: '<системное имя операции>',
  operationBody: { <JS объект с данными> },
  onSuccess: (data) => { ... },
  onError: (error) => { ... },
});

```

## getSdkVersion

Метод для получения текущей версии SDK.

```typescript
import MindboxSdk from "mindbox-sdk";

MindboxSdk.getSdkVersion((version) => { ... })
```

## setLogLevel

Для управления тем, что будет писать в консоль Mindbox SDK, есть специальный метод установки уровня логирования: **setLogLevel**.

Логи пишутся только в debug сборке. В продакшн режиме Mindbox SDK ничего не пишет в консоль.i

```typescript
import MindboxSdk, { LogLevel} from "mindbox-sdk";

MindboxSdk.setLogLevel(LogLevel.DEBUG)
```

Варианты значения LogLevel:

* LogLevel.VERBOSE
* LogLevel.DEBUG
* LogLevel.INFO
* LogLevel.WARN
* LogLevel.ERROR
* LogLevel.NONE

## refreshNotificationPermissionStatus (since 2.14.5)

Метод для передачи информации о смене статуса разрешения на уведомления. Нужно вызвать после получения разрешения на уведомления от пользователя, для немедленного обновления статуса в Mindbox SDK.

```typescript
import MindboxSdk from "mindbox-sdk";

MindboxSdk.refreshNotificationPermissionStatus();
```
