Notification Action — interaktivní tlačítka a vstupní pole, která se zobrazují přímo v push oznámení a umožňují uživateli provést akci bez otevření aplikace. To je klíčový prvek uživatelského zážitku, který zkracuje cestu k cílové obrazovce. Podle Android Developers, 2025 zvyšuje Notification Action zapojení uživatelů až o 40% díky snížení tření při interakci.
Hlavní body
Notification Action — je interaktivní prvek rozhraní přidávaný do push oznámení k provedení konkrétní akce. Uživatel může odpovědět na zprávu, potvrdit úkol nebo otevřít konkrétní obrazovku bez vstupu do aplikace. Akce se zobrazují jako tlačítka pod textem oznámení nebo v rozšířeném zobrazení při potažení.
Hlavním cílem Notification Action je snížit počet kroků, které uživatel potřebuje k dosažení svého cíle. Místo otevření aplikace a navigace na požadovanou obrazovku uživatel klikne na jediné tlačítko. Výzkumy ukazují, že aplikace s interaktivními oznámeními mají o 25–40% vyšší úroveň zapojení ve srovnání s běžnými oznámeními.
Na Androidu se Notification Action zobrazují jako ikony-tlačítka v kompaktním zobrazení a jako textová tlačítka v rozšířeném režimu. Na iOS se akce objeví při dlouhém stisknutí oznámení nebo při potažení doleva. Každá platforma má svá vlastní doporučení ohledně počtu akcí — Android doporučuje maximálně 3, iOS maximálně 4.
| Platforma | Max. akcí | Způsob zobrazení | Typy akcí |
|---|---|---|---|
| Android | 3 | Ikony + text | Tlačítka, textový vstup |
| iOS | 4 | Dlouhé stisknutí / potažení | Tlačítka, textový vstup |
Na Androidu se Notification Action vytváří prostřednictvím NotificationCompat.Builder pomocí metody addAction(). Každá akce obsahuje ikonu, text a PendingIntent, který se spouští při kliknutí. Počínaje Androidem 7.0 (API 24) je podporován přímý textový vstup prostřednictvím RemoteInput.
Pro vytvoření tlačítka v oznámení je třeba definovat PendingIntent, který se spustí při kliknutí. PendingIntent může otevřít Activity, spustit Service nebo BroadcastReceiver. Ikona akce musí být monochromní a odpovídat 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("Žádost o potvrzení")
.setContentText("Potvrďte provedení úkolu")
.addAction(R.drawable.ic_accept, "Potvrdit", acceptPendingIntent)
.build()
Pro scénáře vyžadující textový vstup (například odpověď na zprávu) poskytuje Android RemoteInput. Uživatel zadává text přímo do oznámení a aplikace jej obdrží bez otevření Activity. RemoteInput je podporován na Androidu 7.0+ a vyžaduje explicitní zpracování v BroadcastReceiver nebo Service.
val remoteInput = RemoteInput.Builder("reply_input")
.setLabel("Zadejte odpověď")
.build()
val replyAction = NotificationCompat.Action.Builder(
R.drawable.ic_reply, "Odpovědět", replyPendingIntent
)
.addRemoteInput(remoteInput)
.build()
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.addAction(replyAction)
.build()
Při kliknutí na akci systém spustí zadaný PendingIntent. Pro získání zadaného textu z RemoteInput zavolejte RemoteInput.getResultsFromIntent(intent). Doporučuje se zpracovávat akce v IntentService nebo WorkManager, aby nebylo blokováno vlákno UI.
Na iOS je Notification Action implementován prostřednictvím frameworku UserNotifications. Vývojář vytváří kategorie akcí (UNNotificationCategory) a registruje je při spuštění aplikace. Každá akce je definována objektem UNNotificationAction s jedinečným identifikátorem.
Pro přidání akcí do push oznámení na iOS je třeba vytvořit kategorii, která sdružuje související akce. Kategorie je uvedena v nákladu oznámení prostřednictvím pole category. Po obdržení oznámení systém zobrazí dostupné akce z uvedené kategorie.
import UserNotifications
class NotificationSetup {
func registerNotificationCategories() {
let approveAction = UNNotificationAction(
identifier: "APPROVE_ACTION",
title: "Potvrdit",
options: [.foreground]
)
let declineAction = UNNotificationAction(
identifier: "DECLINE_ACTION",
title: "Odmítnout",
options: [.destructive]
)
let category = UNNotificationCategory(
identifier: "REQUEST_CATEGORY",
actions: [approveAction, declineAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
}
}
Když uživatel klikne na akci, systém zavolá metodu userNotificationCenter:didReceiveNotificationResponse v delegátovi UNUserNotificationCenter. response.actionIdentifier obsahuje identifikátor provedené akce. Pro textový vstup se používá UNTextInputNotificationAction, který poskytuje text zadaný uživatelem.
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 se klasifikuje podle typu interakce a scénáře použití. Správný výběr typu akce přímo ovlivňuje uživatelský zážitek a konverzi na cílovou akci.
Nejběžnější typ — tlačítko, které otevírá aplikaci na konkrétní obrazovce. Na Androidu se používá PendingIntent.getActivity(), na iOS — volba .foreground pro UNNotificationAction. Používá se pro akce vyžadující plné rozhraní, například zobrazení podrobností objednávky.
Akce, které se provádějí bez otevření aplikace. Na Androidu se používá PendingIntent.getBroadcast() nebo PendingIntent.getService(). Na iOS — volba .authenticationRequired nebo bez .foreground. Příklady: označení úkolu jako hotového, lajkování příspěvku, přidání k oblíbeným.
Umožňuje uživateli zadat text přímo do oznámení. Na Androidu je implementován prostřednictvím RemoteInput, na iOS prostřednictvím UNTextInputNotificationAction. Používá se pro odpovědi na zprávy, komentáře, zadávání jednorázových potvrzovacích kódů.
Akce, které nevratně mění data — smazání, odmítnutí, blokování. Na Androidu jsou vizuálně odlišeny (červená barva v některých systémech), na iOS vyžadují volbu .destructive. Doporučuje se žádat o potvrzení pro destruktivní akce, například prostřednictvím dalšího dialogu nebo druhého kliknutí.
Samostatná třída akcí — textový vstup přímo z oznámení. Na Androidu je implementována prostřednictvím RemoteInput v kombinaci s PendingIntent. Na iOS se používá UNTextInputNotificationAction, který dědí z UNNotificationAction. Takové akce se používají pro rychlé odpovědi v messengerech, zadávání propagačních kódů, vyplňování formulářů zpětné vazby nebo hodnocení kvality služeb. Zadaný text je předán aplikaci spolu s identifikátorem akce. Pro správné zpracování textového vstupu na obou platformách je třeba implementovat analýzu zadaných dat a validaci před provedením cílové akce.
Správné zpracování Notification Action je kritické pro analytiku a uživatelský zážitek. Každé kliknutí musí být zalogováno a akce musí být provedena spolehlivě, i když byla aplikace zavřena.
Sledujte každé kliknutí na Notification Action prostřednictvím analytického systému. Firebase Analytics, Mixpanel nebo Yandex.Metrica umožňují zaznamenávat identifikátor akce, čas kliknutí a kontext oznámení. Tato data pomáhají optimalizovat strategii oznámení a zvyšovat zapojení. A/B testování s různými sadami akcí pomáhá určit nejefektivnější scénáře interakce s uživatelem.
Pokud je aplikace zavřena, systém stále předává Intent nebo UNNotificationResponse při kliknutí na akci. Na Androidu použijte BroadcastReceiver pro garantované zpracování. Na iOS systém spustí aplikaci na pozadí a předá odpověď delegátovi. Pro kritické akce (potvrzení platby, autorizace) přidejte mechanismus opakování a oznámení uživateli o úspěšném provedení.
Počínaje Androidem 7.0 může vývojář ovlivnit zobrazení Notification Action prostřednictvím ikon a barev. Ikony musí být monochromní (alfa kanál), o velikosti 24x24 dp. Na iOS je přizpůsobení tlačítek omezené — používají se systémové barvy a písma. Material Design doporučuje seskupovat akce podle priority: nejdůležitější akce první, destruktivní poslední.
Často kladené otázky
Na Androidu se doporučuje maximálně 3 akce, na iOS až 4. Překročení limitu vede k tomu, že se některé akce nezobrazí nebo jsou skryty v podnabídce.
Ikona se předává do NotificationCompat.Action.Builder jako drawable zdroj. Ikona musí být monochromní (alfa kanál), o velikosti 24x24 dp a odpovídat doporučením Material Design.
Ano, pokud je oznámení zobrazeno na uzamčené obrazovce a příznak visibility je nastaven na VISIBILITY_PUBLIC. Na iOS je vyžadována volba .authenticationRequired pro akce vyžadující autorizaci.
Na Androidu systém znovu vytvoří proces a doručí Intent. Na iOS systém spustí aplikaci na pozadí. Doručení lze zajistit pomocí BroadcastReceiver na Androidu a UNNotificationServiceExtension na iOS.
Na Androidu jsou akce okamžitě viditelné pod oznámením jako ikony. Na iOS jsou akce skryty za dlouhým stisknutím nebo potažením. UX design oznámení by měl tyto platformní rozdíly zohledňovat.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také