Notification Action — интерактивни бутони и полета за въвеждане, които се показват директно в push известието и позволяват на потребителя да изпълни действие, без да отваря приложението. Това е ключов елемент от потребителското изживяване, който съкращава пътя до целевия екран. Според Android Developers, 2025, Notification Action повишава ангажирането на потребителите до 40% чрез намаляване на триенето при взаимодействие.
Основни понтове
Notification Action — е интерактивен интерфейсен елемент, който се добавя към push известие за изпълнение на конкретно действие. Потребителят може да отговори на съобщение, да потвърди задача или да отвори конкретен екран, без да влиза в приложението. Действията се показват като бутони под текста на известието или в разширен изглед при плъзнене.
Основната цел на Notification Action е да намали броя стъпки, които потребителят трябва да направи, за да постигне целта си. Вместо да отваря приложението и навигира до желания екран, потребителят кликва един бутон. Проучванията показват, че приложенията с интерактивни известия имат 25–40% по-високо ниво на ангажиране в сравнение с обикновените известия.
На Android, Notification Action се показва като икони-бутони в компактен изглед и като текстови бутони в разширен режим. На 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 рамката. Разработчикът създава категории действия (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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също