# Инициализация SDK
:::warning{title=" Убедитесь, что эти шаги выполнены успешно:"}

 * <Link to="https://developers.mindbox.ru/docs/flutter-new-integration-setup#/">Настройка точек интеграции</Link>
 * <Link to="https://developers.mindbox.ru/docs/add-sdk-flutter#/">Добавление SDK в приложение</Link>
:::

:::tip{title="Результат шага «Инициализация SDK»:"} 

 * Приложение запустилось без ошибок на обеих платформах (iOS и Android);
 * В консоли разработчика в Xcode выведен **deviceUUID** SDK Mindbox;
 * _Дополнительно_, только если вы делаете интеграцию **с созданием и подпиской анонимного пользователя** в системе Mindbox — [создастся клиент Mindbox](https://developers.mindbox.ru/docs/sdk-subscribe-customer).
:::

:::info
 [Пример инициализации SDK](https://github.com/mindbox-cloud/flutter-sdk/blob/develop/example/flutter_example/lib/main.dart#L17)
:::

***

## 1. Выбор варианта конфигурации SDK

Выберите вариант конфигурации SDK на основе требований от маркетинга.

:::warning
  Необходимо получить «\<эндпоинт проекта>» от вашего менеджера проекта Mindbox, либо посмотреть его в [настройках точки интеграции](https://developers.mindbox.ru/docs/add-ios-integration). Обратите внимание, что ендпоинт проекта чувствителен к регистру, то есть имеет значение, используются ли заглавные или строчные буквы.
:::

import Calloutdomainapimindbox from '/src/_Calloutdomainapimindbox.mdx';

<Calloutdomainapimindbox />

***

**1. Хочу передавать в Mindbox анонимных пользователей и отправлять им push-уведомления**

```dart
final config = Configuration(
        domain: '<Domain API Mindbox>',
        endpointIos: '<endpoint для iOs>',
        endpointAndroid: '<endpoint для Android>',
        shouldCreateCustomer: true,
        subscribeCustomerIfCreated: true
);
```

**2. Хочу передавать в mindbox анонимных пользователей без возможности отправлять им push-уведомления**

```dart
final config = Configuration(
        domain: '<Domain API Mindbox>',
        endpointIos: '<endpoint для iOs>',
        endpointAndroid: '<endpoint для Android>',
        shouldCreateCustomer: true,
        subscribeCustomerIfCreated: false
);
```

**3. Не хочу передавать в mindbox анонимных пользователей**

```dart
final config = Configuration(
        domain: '<Domain API Mindbox>',
        endpointIos: '<endpoint для iOs>',
        endpointAndroid: '<endpoint для Android>',

        shouldCreateCustomer: false
);
```

***

### Дополнительное поле shouldIncludeVersionCode (Since 2.15.4)

Отвечает за то, включать ли номер сборки Android-приложения (`versionCode`) в версию приложения, которую SDK передает в Mindbox.
По умолчанию: `true`.

Работает **только на Android** — на iOS параметр игнорируется: iOS SDK не передает номер сборки.

* `true` — версия приложения передается в формате `versionName(versionCode)`, например `4.5.0(1024)`;
* `false` — передается только `versionName`, например `4.5.0`.

Укажите `false`, чтобы в версии приложения, которая передается в Mindbox, не отображался `versionCode`. Это полезно, если `versionCode` увеличивается при каждой сборке — тогда одна и та же версия приложения создает несколько значений версии в фильтрах административного раздела Mindbox.

```dart
final config = Configuration(
        domain: '<Domain API Mindbox>',
        endpointIos: '<endpoint для iOs>',
        endpointAndroid: '<endpoint для Android>',
        shouldCreateCustomer: true,
        subscribeCustomerIfCreated: true,
        shouldIncludeVersionCode: false
);
```

***

## 2. Инициализация SDK

### 2.1. Настройка Flutter-части проекта

Инициализировать SDK нужно синхронно в файле **`lib/main.dart`** в функции **`main`**.

Используйте вариант конфигурации, **выбранный на этапе 1**.

```dart title="main.dart"
import 'package:flutter/material.dart';
import 'package:mindbox/mindbox.dart';

void main() {
  // ВСТАВЬТЕ СЮДА ВЫБРАННУЮ НА ЭТАПЕ 1 КОНФИГУРАЦИЮ SDK

  Mindbox.instance.init(configuration: config);
  runApp(const MyApp());
}
```

:::danger
  Чтобы проверить корректность инициализации, добавьте вывод deviceUUID в консоль в любом удобном месте.
:::

<Accordion type="single" collapsible >
  <AccordionItem value="item-1">
    <AccordionTrigger className="flex flex-1 items-center justify-start gap-2 p-2 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 text-left"><CircleAlertIcon color="#39AA5D" /> Как можно проверить?</AccordionTrigger>
    <AccordionContent>
      Советуем вывести deviceUUID  **сразу за вызовом** **`Mindbox.init`**.
      Далее запустите приложение через Android Studio на реальном устройстве или эмуляторе

      <br />

      ```dart
      import 'package:flutter/material.dart';
      import 'package:mindbox/mindbox.dart';

      void main() {
        ...
        runApp(const MyApp());

        Mindbox.instance.getDeviceUUID((uuid) => print(uuid));
      }
      ```
    </AccordionContent>
  </AccordionItem>
</Accordion>


:::tip
  На этом этапе вы уже можете **запустить приложение на Android**
:::

***

### &#x20;2.2. Настройка iOS-части проекта

Для интеграции Mindbox SDK во Flutter-проект необходимо подключить нативный Mindbox iOS SDK и выполнить соответствующие настройки проекта.

import IosAppGroupBlock from '/src/_IosAppGroupBlock.mdx';

<IosAppGroupBlock />

***

**Запустите приложение на iOS и проверьте результаты выполнения этапа.**

:::tip{title="Проверьте результат шага «Инициализация SDK»:"} 

 * Приложение запустилось без ошибок на обеих платформах (iOS и Android);
 * В консоли разработчика в Xсode выведен **deviceUUID** SDK Mindbox;
 * Дополнительно, только если вы делаете интеграцию **с созданием и подпиской анонимного пользователя** в системе Mindbox — [создастся клиент Mindbox](https://developers.mindbox.ru/docs/sdk-subscribe-customer).
:::

***

## Изменение endpoint

Если приложение используется в нескольких странах и фактическое местоположение пользователя определяется только после запуска, может потребоваться динамическая смена endpoint для корректной передачи данных о стране.
Для обновления настроек повторно вызовите **`Mindbox.instance.init`** и передайте в конфигурации актуальные значения **`endpointAndroid`** и **`endpointIos`**.

<br />
