Notification Action — botões interativos e campos de entrada que aparecem diretamente em uma notificação push e permitem que o usuário execute uma ação sem abrir o aplicativo. É um elemento-chave da experiência do usuário, encurtando o caminho até a tela de destino. De acordo com Android Developers, 2025, o Notification Action aumenta o engajamento do usuário em até 40% ao reduzir o atrito na interação.
Principais pontos
Notification Action é um elemento interativo de interface adicionado a uma notificação push para executar uma ação específica. O usuário pode responder a uma mensagem, confirmar uma tarefa ou abrir uma tela específica sem entrar no aplicativo. As ações aparecem como botões abaixo do texto da notificação ou em uma visualização expandida ao deslizar.
O principal objetivo do Notification Action é reduzir o número de etapas para o usuário atingir seu objetivo. Em vez de abrir o aplicativo e navegar até a tela desejada, o usuário pressiona um único botão. Pesquisas mostram que aplicativos com notificações interativas demonstram 25–40% mais engajamento em comparação com notificações simples.
No Android, as Notification Actions são exibidas como botões de ícone na visualização compacta e botões de texto no modo expansível. No iOS, as ações aparecem ao pressionar longamente a notificação ou deslizar para a esquerda. Cada plataforma tem suas próprias recomendações quanto ao número de ações — o Android recomenda no máximo 3, o iOS no máximo 4.
| Plataforma | Máx. ações | Método de exibição | Tipos de ações |
|---|---|---|---|
| Android | 3 | Ícones + Texto | Botões, Entrada de texto |
| iOS | 4 | Pressão longa / Deslizar | Botões, Entrada de texto |
No Android, as Notification Actions são criadas através do NotificationCompat.Builder usando o método addAction(). Cada ação contém um ícone, texto e PendingIntent que é acionado ao tocar. A partir do Android 7.0 (API 24), a entrada direta de texto via RemoteInput é suportada.
Para criar um botão em uma notificação, é necessário definir um PendingIntent que será lançado ao tocar. O PendingIntent pode abrir uma Activity, iniciar um Service ou BroadcastReceiver. O ícone da ação deve ser monocromático e estar em conformidade com o 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("Solicitação de confirmação")
.setContentText("Confirme a conclusão da tarefa")
.addAction(R.drawable.ic_accept, "Confirmar", acceptPendingIntent)
.build()
Para cenários que exigem entrada de texto (por exemplo, responder a uma mensagem), o Android fornece RemoteInput. O usuário digita o texto diretamente na notificação e o aplicativo o recebe sem abrir uma Activity. O RemoteInput é suportado no Android 7.0+ e requer tratamento explícito em um BroadcastReceiver ou Service.
val remoteInput = RemoteInput.Builder("reply_input")
.setLabel("Insira a resposta")
.build()
val replyAction = NotificationCompat.Action.Builder(
R.drawable.ic_reply, "Responder", replyPendingIntent
)
.addRemoteInput(remoteInput)
.build()
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.addAction(replyAction)
.build()
Quando uma ação é tocada, o sistema lança o PendingIntent especificado. Para recuperar o texto inserido via RemoteInput, chame RemoteInput.getResultsFromIntent(intent). Recomenda-se tratar as ações em IntentService ou WorkManager para não bloquear a thread da UI.
No iOS, as Notification Actions são implementadas através do framework UserNotifications. O desenvolvedor cria categorias de ações (UNNotificationCategory) e as registra na inicialização do aplicativo. Cada ação é definida por um objeto UNNotificationAction com um identificador único.
Para adicionar ações a notificações push no iOS, é necessário criar uma categoria que agrupe as ações relacionadas. A categoria é especificada no payload da notificação através do campo category. Ao receber uma notificação, o sistema exibe as ações disponíveis da categoria especificada.
import UserNotifications
class NotificationSetup {
func registerNotificationCategories() {
let approveAction = UNNotificationAction(
identifier: "APPROVE_ACTION",
title: "Aprovar",
options: [.foreground]
)
let declineAction = UNNotificationAction(
identifier: "DECLINE_ACTION",
title: "Recusar",
options: [.destructive]
)
let category = UNNotificationCategory(
identifier: "REQUEST_CATEGORY",
actions: [approveAction, declineAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
}
}
Quando o usuário toca em uma ação, o sistema chama o método userNotificationCenter:didReceiveNotificationResponse no delegate do UNUserNotificationCenter. O response.actionIdentifier contém o identificador da ação executada. Para entrada de texto, é usado o UNTextInputNotificationAction, que fornece o texto inserido pelo usuário.
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 é classificado por tipo de interação e cenário de uso. A escolha correta do tipo de ação afeta diretamente a experiência do usuário e a conversão para a ação alvo.
O tipo mais comum — um botão que abre o aplicativo em uma tela específica. No Android, usa-se PendingIntent.getActivity(), no iOS — a opção .foreground do UNNotificationAction. Usado para ações que exigem uma interface completa, como visualizar detalhes do pedido.
Ações executadas sem abrir o aplicativo. No Android, usa-se PendingIntent.getBroadcast() ou PendingIntent.getService(). No iOS — a opção .authenticationRequired ou sem .foreground. Exemplos: marcar tarefa como concluída, curtir uma postagem, adicionar aos favoritos.
Permite que o usuário insira texto diretamente na notificação. No Android, implementado via RemoteInput, no iOS — via UNTextInputNotificationAction. Usado para responder mensagens, comentários, inserir códigos de confirmação de uso único.
Ações que alteram dados de forma irreversível — exclusão, rejeição, bloqueio. No Android, são destacadas visualmente (cor vermelha em alguns sistemas), no iOS exigem a opção .destructive. Recomenda-se solicitar confirmação para ações destrutivas, por exemplo através de um diálogo adicional ou um segundo toque.
Uma classe separada de ações — inserção de texto diretamente da notificação. No Android, isso é implementado via RemoteInput em combinação com PendingIntent. No iOS, é usado UNTextInputNotificationAction, que herda de UNNotificationAction. Tais ações são usadas para respostas rápidas em mensageiros, inserção de códigos promocionais, preenchimento de formulários de feedback ou avaliação de qualidade de serviço. O texto inserido é passado para o aplicativo junto com o identificador da ação. Para o tratamento correto da entrada de texto em ambas as plataformas, é necessário implementar a análise dos dados inseridos e validação antes de executar a ação alvo.
O tratamento correto de Notification Action é crítico para análises e experiência do usuário. Cada toque deve ser registrado e a ação deve ser executada de forma confiável mesmo se o aplicativo estiver fechado.
Rastreie cada toque em Notification Action através do seu sistema de análise. Firebase Analytics, Mixpanel ou Yandex.Metrica permitem registrar o identificador da ação, hora do toque e contexto da notificação. Esses dados ajudam a otimizar sua estratégia de notificações e aumentar o engajamento. Testes A/B com diferentes conjuntos de ações ajudam a identificar os cenários de interação mais eficazes com o usuário.
Se o aplicativo estiver fechado, o sistema ainda entrega o Intent ou UNNotificationResponse ao tocar em uma ação. No Android, use um BroadcastReceiver para tratamento garantido. No iOS, o sistema inicia o aplicativo em segundo plano e passa a resposta ao delegate. Para ações críticas (confirmação de pagamento, autorização), adicione um mecanismo de nova tentativa e notifique o usuário sobre a conclusão bem-sucedida.
A partir do Android 7.0, o desenvolvedor pode influenciar a aparência do Notification Action através de ícones e cores. Os ícones devem ser monocromáticos (canal alfa), tamanho 24x24 dp. No iOS, a personalização de botões é limitada — usam-se cores e fontes do sistema. Material Design recomenda agrupar ações por prioridade: a ação mais importante primeiro, as destrutivas por último.
Perguntas frequentes
O Android recomenda no máximo 3 ações, o iOS — até 4. Exceder o limite faz com que algumas ações não sejam exibidas ou fiquem ocultas em um submenu.
O ícone é passado em NotificationCompat.Action.Builder como um recurso drawable. O ícone deve ser monocromático (canal alfa), tamanho 24x24 dp e estar em conformidade com as diretrizes do Material Design.
Sim, se a notificação for exibida na tela bloqueada e o sinalizador visibility estiver definido como VISIBILITY_PUBLIC. No iOS, a opção .authenticationRequired é necessária para ações que exigem autorização.
No Android, o sistema recria o processo e entrega o Intent. No iOS, o sistema inicia o aplicativo em segundo plano. A entrega garantida pode ser alcançada usando BroadcastReceiver no Android e UNNotificationServiceExtension no iOS.
No Android, as ações são visíveis diretamente abaixo da notificação como ícones. No iOS, as ações estão ocultas atrás de uma pressão longa ou deslize. O design de UX das notificações deve considerar essas diferenças de plataforma.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também