# 4. Получение кликов на мобильные push-уведомления
:::warning{title=" Убедитесь, что эти шаги выполнены успешно:"}

 * [Настройка точек интеграции для Android приложения](https://developers.mindbox.ru/docs/add-android-integration)

 * [Получение Firebase ключей для Android-приложения](https://developers.mindbox.ru/docs/firebase-key-setup)  
   или
   [Получение Huawei ключей для Android-приложения](https://developers.mindbox.ru/docs/huawei-get-keys)

 * [Добавление SDK в приложение](https://developers.mindbox.ru/docs/add-android-sdk)

 * [Инициализация SDK](https://developers.mindbox.ru/docs/android-sdk-initialization)

 * [Отправка push-notifications через Firebase](https://developers.mindbox.ru/docs/firebase-send-push-notifications)  
   или
   [Отправка push-notifications через Huawei](https://developers.mindbox.ru/docs/huawei-send-push-notifications)
:::

:::tip{title="Результат шага «Получение кликов на мобильные push-уведомления»:"} 

 Мобильное push-уведомление отправляется и отображается на вашем телефоне, по клику на него статус в системе поменялся на «есть клик».

 Проверить, что клики приходят, можно с помощью [этой инструкции](https://developers.mindbox.ru/docs/mobile-push-check#%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D1%87%D1%82%D0%BE-%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8-%D0%BF%D1%80%D0%B8%D1%85%D0%BE%D0%B4%D1%8F%D1%82-%D0%B2-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83).
:::

 :::info 
 [Пример реализации метода отправки события клика и получения данных из пуша](https://github.com/mindbox-cloud/android-sdk/blob/develop/example/app/src/main/java/com/mindbox/example/Utils.kt#L27) и [Пример вызова метода](https://github.com/mindbox-cloud/android-sdk/blob/develop/example/app/src/main/java/com/mindbox/example/MainActivity.kt#L33)
 :::

## 1. Передача кликов по push-уведомлениям

<Tabs defaultValue="1" className="w-full">
  <ScrollArea className="w-full">
    <TabsList className="flex w-max gap-2">
      <TabsTrigger value="1">Отрисовка уведомлений через Mindbox</TabsTrigger>
      <TabsTrigger value="2">Самостоятельная отрисовка уведомлений</TabsTrigger>
    </TabsList>
    <ScrollBar orientation="horizontal" />
  </ScrollArea>
  
  <TabsContent value="1">
  В тех активити, которые вы указали в методе `onMessageReceived` на предыдущем шаге, надо разместить вызов метода `Mindbox.onPushClicked`.

    Вызывать этот метод надо в 2 коллбеках: `onNewIntent` и `onCreate`.

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

    class MainActivity : AppCompatActivity() {

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

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

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

        // ...
    }
    ```

    Метод `Mindbox.onPushClicked` дополнительно возвращает `true`, если интент распознан SDK и обработан корректно, и `false` в противном случае.

    Вы можете это использовать для реализации дополнительной логики, если нужно.
  </TabsContent>
  <TabsContent value="2">
  Начиная с версии sdk 2.13.3 при самостоятельной обработке пушей, вы так же можете воспользоваться методом public `fun onPushClicked(context: Context, intent: Intent)`. Для этого необходимо воспользоваться методами расширения `Intent.putMindboxPushExtras(pushUniqKey: String)` и `Intent.putMindboxPushButtonExtras(pushUniqKey: String, pushButtonKey: String?)`.

    При необходимости, `UniqKey` после клика в пуш можно получить следующими методами:\
    `Intent.getMindboxUniqKeyFromPushIntent()` - для получения `UniqKey` пуша\
    `Intent.getMindboxUniqPushButtonKeyFromPushIntent()` - для получения `UniqKey` кнопки

    Начиная с версии 2.14.5 доступны методы расширения для MindboxRemoteMessage, которые создают готовый PendingIntent для пушей:

    `MindboxRemoteMessage.getPushContentIntent` - для использования в `setContentIntent` конструктора пуша
    `MindboxRemoteMessage.getPushActionIntent` - для создания Action в пуше

    ### Пример добавления данных для пуша без кнопок

    ```kotlin
    // When creating a push notification without buttons
    val intent = Intent(context, MainActivity::class.java)
    ...
    // put another data to intent
    ...
    intent.putMindboxPushExtras(pushKey) // Add mindbox unique push key
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
    notificationBuilder.setContentIntent(pendingIntent)
    ```

    ### Пример добавления данных для пуша с кнопками

    ```kotlin
    pushActions.take(MAX_ACTIONS_COUNT).forEach { pushAction ->
        val intent = Intent(context, MainActivity::class.java)
        intent.putMindboxPushButtonExtras(pushUniqKey, pushAction.uniqueKey) // Add unique push key and button key
        val pendingIntent = PendingIntent.getActivity(
            context, 
            Random.nextInt(), // Generate unique request code for each button
            intent, 
            PendingIntent.FLAG_IMMUTABLE
        )
        
        notificationBuilder.addAction(
            0, // Icon for the action
            pushAction.text ?: "", // Button text
            pendingIntent
        )
    }
    ```

    ### Пример создания кастомного пуша

    ```kotlin
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        super.onMessageReceived(remoteMessage)

        val notificationId = Random.nextInt()
        MindboxFirebase.convertToMindboxRemoteMessage(remoteMessage)?.let { mindboxRemoteMessage ->
            val notification = NotificationCompat.Builder(applicationContext, "mindbox_c")
                .setContentTitle(mindboxRemoteMessage.title)
                .setContentText(mindboxRemoteMessage.description)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setStyle(NotificationCompat.DecoratedCustomViewStyle())
                .setContentIntent(
                    mindboxRemoteMessage.getPushContentIntent(
                        context = applicationContext,
                        activity = MainActivity::class.java,
                        notificationId = notificationId
                    )
                )
                .apply {
                    mindboxRemoteMessage.pushActions.forEach {
                        addAction(
                            NotificationCompat.Action.Builder(
                                R.mipmap.ic_launcher,
                                it.text,
                                mindboxRemoteMessage.getPushActionIntent(
                                    context = applicationContext,
                                    activity = MainActivity::class.java,
                                    notificationId = notificationId,
                                    pushAction = it,
                                    extras = null,
                                )
                            ).build()
                        )
                    }
                }.build()

            NotificationManagerCompat.from(applicationContext)
                .notify(notificationId, notification)
         }
      
    ```

    ### Пример получения данных из intent

    ```kotlin
    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        
        // Get the unique push key
        val pushUniqKey = intent?.getMindboxUniqKeyFromPushIntent()
        
        // Get the unique button key (can be null if clicked on notification body)
        val buttonUniqKey = intent?.getMindboxUniqPushButtonKeyFromPushIntent()
    }
    ```
  </TabsContent>
</Tabs>

## 2. Навигация в приложении

По клику открывается та активити, которую указали при отрисовке push-уведомлений. Если вам нужно дополнительно обработать какие-то данные из push-уведомления, то вы можете получить их, вызвав методы `getUrlFromPushIntent` и `getPayloadFromPushIntent`.

```kotlin
val pushUrl = Mindbox.getUrlFromPushIntent(intent)
val payload = Mindbox.getPayloadFromPushIntent(intent)
```

:::tip{title="Результат шага «Получение кликов на мобильные push-уведомления»:"} 

 Мобильное push-уведомление отправляется и отображается на вашем телефоне, по клику на него статус в системе поменялся на «есть клик».

 Проверить, что клики приходят, можно с помощью [этой инструкции](https://developers.mindbox.ru/docs/mobile-push-check#%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D1%87%D1%82%D0%BE-%D0%BA%D0%BB%D0%B8%D0%BA%D0%B8-%D0%BF%D1%80%D0%B8%D1%85%D0%BE%D0%B4%D1%8F%D1%82-%D0%B2-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83).
:::

<br />
