# Упрощенная интеграция Android

:::warning

Если у вас уже подключена стандартная интеграция Mindbox SDK, переподключение через упрощенный способ не требуется.

:::

Эта инструкция описывает упрощенную интеграцию Mindbox SDK в нативное Android-приложение. Она подходит для быстрой настройки push-уведомлений без ручной реализации логики их получения и обработки.

## Когда подходит упрощенная интеграция

Используйте упрощенную схему, если:

* приложение подключает Mindbox SDK впервые и существующей интеграции нет;
* нужно быстро запустить push для MVP или тестового сценария;
* не планируется совместное использование сторонних push-провайдеров;
* важно минимизировать работу с нативным кодом.

## Что поддерживается

* Получение пушей через FCM / Huawei Push Kit / RuStore Push (в зависимости от подключенного провайдера);
* Автоматическая регистрация токена устройства после инициализации;
* Показ уведомлений с каналом и иконкой приложения;
* Открытие приложения по клику на push — переход на главный экран (поведение по умолчанию);
* Доступ к **payload и URL из push при клике в него** — можно реализовать кастомный переход;
* Отправка операций из приложения: `sendAsyncOperation / sendSyncOperation`;
* Показ in-app уведомлений, настроенных в Mindbox.

### Что не поддерживается

* **Центр уведомлений (ЦУ)** и сложные сценарии коммуникации;
* Совместное использование со **сторонними push-SDK** без доработок;
* Встроенная собственная навигация по клику — для нее потребуется переход на стандартную интеграцию.

## Шаг 1. Добавьте и инициализируйте SDK

1. В `android/build.gradle` добавьте репозиторий и зависимости SDK:

    ```groovy
    dependencies {
        ...
        implementation 'cloud.mindbox:mobile-sdk:{версия}'  
        //Если планируете интегрировать мобильные пуши Firebase, Huawei, RuStore
        //добавьте соответствующие зависимости:
        implementation 'cloud.mindbox:mindbox-firebase'  # since 2.10.0
        implementation 'cloud.mindbox:mindbox-huawei'  # since 2.10.0
        implementation 'cloud.mindbox:mindbox-rustore'  # since 2.12.0
       ...
    }
    ```

    :::info

    [Актуальные версии SDK](https://developers.mindbox.ru/docs/mindbox-sdk#%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-mindbox-sdk).

    :::

    Начиная с версии 2.15.5 модули `mindbox-firebase` и `mindbox-firebase-starter` добавляют в манифест приложения разрешение `AD_ID`. Если приложение публикуется в Google Play, проверьте декларации в Play Console — подробнее в разделе [Разрешение AD_ID](https://developers.mindbox.ru/docs/add-android-sdk#%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-ad_id).

2. Создайте или обновите класс `MainApplication` и проинициализируйте SDK:

    ```kotlin
    import android.app.Application
    import cloud.mindbox.mobile_sdk.*

    class MainApplication: Application() {
        override fun onCreate() {
            super.onCreate()

            Mindbox.init(application, configuration, listOf())

        }
    }
    ```

    :::tip

    SDK автоматически зарегистрируется для получения токенов и пушей. Инициализацию можно вынести в отдельный метод, если она должна выполняться при первом запуске приложения.

    :::

## Шаг 2. Подключите провайдеров

:::info

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

:::

<Tabs defaultValue="1" className="w-full">
  <ScrollArea className="w-full">
    <TabsList className="flex w-max gap-2">
      <TabsTrigger value="1">Firebase (FCM)</TabsTrigger>
      <TabsTrigger value="2">Huawei (HMS)</TabsTrigger>
      <TabsTrigger value="3">RuStore Push</TabsTrigger>
    </TabsList>
    <ScrollBar orientation="horizontal" />
  </ScrollArea>
  
  <TabsContent value="1">

:::info

Инструкция по получению ключей — [**Firebase setup**](https://developers.mindbox.ru/docs/firebase-key-setup#/)

:::

1. Зарегистрируйте приложение в **Firebase**.
2. Скачайте `google-services.json` и добавьте в `android/app/`.
3. Подключите Google Services:

    * В `android/build.gradle` в `dependencies` добавьте:

    ```groovy
    classpath("com.google.gms:google-services:4.4.0")
    ```

   * В `android/app/build.gradle` добавьте в конце файла:

      ```groovy
      apply plugin: 'com.google.gms.google-services'
      ```

4. Подключите starter-зависимость Mindbox в `android/app/build.gradle` в `dependencies`:
  
    ```groovy
    implementation 'cloud.mindbox:mindbox-firebase-starter'
    ```

  </TabsContent>
  <TabsContent value="2">

:::info

Инструкция по получению ключей — [**Huawei setup**](https://developers.mindbox.ru/docs/huawei-get-keys#/).

:::

1. Зарегистрируйте приложение в **Huawei AppGallery** / HMS;
2. Скачайте `agconnect-services.json` и добавьте в `android/app/`;
3. Подключите плагины и репозитории Huawei по [их инструкции](https://developer.huawei.com/consumer/en/doc/HMSCore-Guides/integrate-as-sdk-0000001050435953#section1385415381490);
4. Подключите starter-зависимость Mindbox в `android/app/build.gradle` в `dependencies`:

```groovy

implementation 'cloud.mindbox:mindbox-huawei-starter'

```

  </TabsContent>
  <TabsContent value="3">

:::info

Инструкция по получению ключей — [**RuStore setup**](https://developers.mindbox.ru/docs/rustore-get-keys#/).

:::

1. Зарегистрируйте приложение в **RuStore**;
2. Добавьте репозиторий в `settings.gradle` или в корневой `build.gradle` (в раздел репозиториев Gradle-проекта):

    ```groovy
    maven { url = uri("https://nexus-external.rustore.ru/repository/maven-rustore-exposed/") }
    ```

3. Добавьте метаданные в `AndroidManifest.xml` вашего приложения:

    ```xml
   <meta-data
    android:name="ru.rustore.sdk.pushclient.project_id"
    android:value="ВАШ_PROJECT_ID" />
    ```

4. Подключите starter-зависимость Mindbox в `android/app/build.gradle` в `dependencies`:

    ```groovy
    implementation 'cloud.mindbox:mindbox-rustore-starter'
    ```

  </TabsContent>
</Tabs>

---

## Шаг 3. Настройте уведомления

### Канал уведомлений

Переопределите значения в `android/app/src/main/res/values/strings.xml`:

```xml
<string name="mindbox_default_channel_id">client_channel_id</string>
<string name="mindbox_default_channel_name">Client Notifications</string>
<string name="mindbox_default_channel_description">Client Push notifications</string>
```

### Иконка уведомления

Добавьте файл `mindbox_notification_small_icon` в `android/app/src/main/res/drawable/`. Требования:

* Формат: PNG или XML (вектор);
* Монохромная, прозрачный фон;
* Используется в статус-баре.

## Шаг 4. Настройте обработку событий

По умолчанию при клике пуш открывает главную активность приложения. Если нужна собственная логика — добавьте обработчик. Подробнее: [Обработка клика по push на Android](https://developers.mindbox.ru/docs/android-get-click).

**Пример обработки:**

```kotlin
import cloud.mindbox.mobile_sdk.*

class MainActivity : AppCompatActivity() {

    private fun processMindboxIntent(intent: Intent?) {
        // Добавляем событие клика по push-уведомлению
        intent?.let { Mindbox.onPushClicked(this, it) }
        Mindbox.onNewIntent(intent)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        processMindboxIntent(intent)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        processMindboxIntent(intent)
        
        // ...
    }

    // ...
}
```

**Доступные методы SDK:**

| Цель | Метод | Комментарий |
| --- | --- | --- |
| Получить push-токен | `Mindbox.getDeviceUUID()` | Для отладки или аналитики |
| Обработать клик по push-уведомлению | `Mindbox.onPushClicked(intent)` | Для собственной навигации |
| Передать событие | `Mindbox.sendAsyncOperation()` / `Mindbox.sendSyncOperation()` | Отправка пользовательских действий |
