Notification Action — інтерактивні кнопки та поля введення, які відображаються безпосередньо в push-сповіщенні та дозволяють користувачеві виконати дію без відкриття додатка. Це ключовий елемент користувацького досвіду, що скорочує шлях до цільового екрана. За даними Android Developers, 2025, Notification Action підвищує залученість користувачів до 40% за рахунок зниження тертя під час взаємодії.
Головне
Notification Action — це інтерактивний елемент інтерфейсу, що додається в push-сповіщення для виконання певної дії. Користувач може відповісти на повідомлення, підтвердити завдання або відкрити конкретний екран, не заходячи в додаток. Дії відображаються у вигляді кнопок під текстом сповіщення або в розширеному вигляді при свайпі.
Основна мета Notification Action — скоротити кількість кроків для досягнення мети користувачем. Замість відкриття додатка та навігації до потрібного екрана користувач натискає одну кнопку. Дослідження показують, що додатки з інтерактивними сповіщеннями демонструють на 25–40% вищий рівень залученості порівняно з простими сповіщеннями.
На Android Notification Action відображаються у вигляді іконок-кнопок у компактному вигляді та текстових кнопок у expandable-режимі. На iOS дії з'являються при довгому натисканні на сповіщення або при свайпі вліво. Кожна платформа має свої рекомендації щодо кількості дій — Android рекомендує не більше 3, iOS — не більше 4.
| Платформа | Макс. дій | Спосіб відображення | Типи дій |
|---|---|---|---|
| Android | 3 | Іконки + текст | Кнопки, введення тексту |
| iOS | 4 | Довге натискання / свайп | Кнопки, введення тексту |
На Android Notification Action створюються через NotificationCompat.Builder з використанням методу addAction(). Кожна дія містить іконку, текст та PendingIntent, який спрацьовує при натисканні. Починаючи з Android 7.0 (API 24), підтримується пряме введення тексту через RemoteInput.
Для створення кнопки в сповіщенні необхідно визначити PendingIntent, який буде запущено при натисканні. PendingIntent може відкривати Activity, запускати Service або BroadcastReceiver. Іконка дії повинна бути монохромною та відповідати Material Design.
val acceptIntent = Intent(context, AcceptActionReceiver::class.java)
acceptIntent.putExtra("notification_id", notificationId)
val acceptPendingIntent = PendingIntent.getBroadcast(
context, requestCode,
acceptIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Запит на підтвердження")
.setContentText("Підтвердьте виконання завдання")
.addAction(R.drawable.ic_accept, "Підтвердити", acceptPendingIntent)
.build()
Для сценаріїв, де потрібне введення тексту (наприклад, відповідь на повідомлення), Android надає RemoteInput. Користувач вводить текст прямо в сповіщенні, і додаток отримує його без відкриття Activity. RemoteInput підтримується на Android 7.0+ та вимагає явної обробки в BroadcastReceiver або Service.
val remoteInput = RemoteInput.Builder("reply_input")
.setLabel("Введіть відповідь")
.build()
val replyAction = NotificationCompat.Action.Builder(
R.drawable.ic_reply, "Відповісти", replyPendingIntent
)
.addRemoteInput(remoteInput)
.build()
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.addAction(replyAction)
.build()
При натисканні на дію система запускає вказаний PendingIntent. Для отримання введеного тексту з RemoteInput викличте RemoteInput.getResultsFromIntent(intent). Рекомендується обробляти дії в IntentService або WorkManager, щоб не блокувати UI-потік.
На iOS Notification Action реалізуються через UserNotifications framework. Розробник створює категорії дій (UNNotificationCategory) та реєструє їх при запуску додатка. Кожна дія визначається об'єктом UNNotificationAction з унікальним ідентифікатором.
Для додавання дій у push-сповіщення iOS необхідно створити категорію, яка групує пов'язані дії. Категорія вказується в корисному навантаженні сповіщення через поле category. При отриманні сповіщення система відображає доступні дії із зазначеної категорії.
import UserNotifications
class NotificationSetup {
func registerNotificationCategories() {
let approveAction = UNNotificationAction(
identifier: "APPROVE_ACTION",
title: "Підтвердити",
options: [.foreground]
)
let declineAction = UNNotificationAction(
identifier: "DECLINE_ACTION",
title: "Відхилити",
options: [.destructive]
)
let category = UNNotificationCategory(
identifier: "REQUEST_CATEGORY",
actions: [approveAction, declineAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
}
}
Коли користувач натискає на дію, система викликає метод userNotificationCenter:didReceiveNotificationResponse в делегаті UNUserNotificationCenter. У response.actionIdentifier міститься ідентифікатор виконаної дії. Для текстового введення використовується UNTextInputNotificationAction, який надає введений користувачем текст.
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(
center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
switch response.actionIdentifier {
case "APPROVE_ACTION":
Log.d("Action: approved")
case "DECLINE_ACTION":
Log.d("Action: declined")
case UNNotificationDefaultActionIdentifier:
Log.d("Action: opened app")
default:
break
}
completionHandler()
}
}
Notification Action класифікуються за типом взаємодії та сценарієм використання. Правильний вибір типу дії безпосередньо впливає на користувацький досвід та конверсію в цільову дію.
Найпоширеніший тип — кнопка, що відкриває додаток на певному екрані. На Android для цього використовується PendingIntent.getActivity(), на iOS — опція .foreground у UNNotificationAction. Застосовується для дій, що вимагають повного інтерфейсу, наприклад перегляд деталей замовлення.
Дії, які виконуються без відкриття додатка. На Android використовується PendingIntent.getBroadcast() або PendingIntent.getService(). На iOS — опція .authenticationRequired або без .foreground. Приклади: позначка завдання виконаним, лайк посту, додавання в обране.
Дозволяє користувачеві ввести текст прямо в сповіщенні. На Android реалізується через RemoteInput, на iOS — через UNTextInputNotificationAction. Використовується для відповідей на повідомлення, коментарів, введення одноразових кодів підтвердження.
Дії, які необоротно змінюють дані — видалення, відхилення, блокування. На Android виділяються візуально (червоний колір у деяких системах), на iOS вимагають опції .destructive. Рекомендується запитувати підтвердження для деструктивних дій, наприклад через додатковий діалог або друге натискання.
Окремий клас дій — введення тексту безпосередньо зі сповіщення. На Android це реалізується через RemoteInput у комбінації з PendingIntent. На iOS використовується UNTextInputNotificationAction, що успадковує UNNotificationAction. Такі дії застосовуються для швидких відповідей у месенджерах, введення промокодів, заповнення форм зворотного зв'язку або оцінки якості обслуговування. Введений текст передається в додаток разом з ідентифікатором дії. Для коректної обробки текстового введення на обох платформах необхідно реалізувати парсинг введених даних та валідацію перед виконанням цільової дії.
Коректна обробка Notification Action критична для аналітики та користувацького досвіду. Кожне натискання повинно бути залоговане, а дія — виконана надійно, навіть якщо додаток був закритий.
Відстежуйте кожне натискання на Notification Action через систему аналітики. Firebase Analytics, Mixpanel або Yandex.Metrica дозволяють фіксувати ідентифікатор дії, час натискання та контекст сповіщення. Ці дані допомагають оптимізувати стратегію сповіщень та підвищувати залученість. A/B-тестування з різними наборами дій допомагає визначити найбільш ефективні сценарії взаємодії з користувачем.
Якщо додаток закритий, система все одно передає Intent або UNNotificationResponse при натисканні на дію. На Android використовуйте BroadcastReceiver для гарантованої обробки. На iOS система запускає додаток у фоні та передає відповідь делегату. Для критично важливих дій (підтвердження платежу, авторизація) додайте механізм повторної спроби та повідомлення користувача про успішне виконання.
Починаючи з Android 7.0, розробник може впливати на відображення Notification Action через іконки та кольори. Іконки повинні бути монохромними (альфа-канал), розміром 24x24 dp. На iOS кастомізація кнопок обмежена — використовуються системні кольори та шрифти. Material Design рекомендує групувати дії за пріоритетом: найважливіша дія — першою, деструктивні — останніми.
Часті запитання
На Android рекомендується не більше 3 дій, на iOS — до 4. Перевищення ліміту призводить до того, що частина дій не відображається або ховається в підменю.
Іконка передається в NotificationCompat.Action.Builder як ресурс drawable. Іконка повинна бути монохромною (альфа-канал), розміром 24x24 dp та відповідати рекомендаціям Material Design.
Так, якщо сповіщення відображається на заблокованому екрані та встановлено прапорець visibility як VISIBILITY_PUBLIC. На iOS потрібна опція .authenticationRequired для дій, що вимагають авторизації.
На Android система відтворює процес і доставляє Intent. На iOS система запускає додаток у фоні. Гарантувати отримання можна за допомогою BroadcastReceiver на Android та UNNotificationServiceExtension на iOS.
На Android дії видно відразу під сповіщенням у вигляді іконок. На iOS дії приховані за довгим натисканням або свайпом. UX-дизайн сповіщень повинен враховувати ці платформенні відмінності.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також