Uma notificação local é uma mensagem que o aplicativo envia ao usuário sem a participação de um servidor remoto. Todos os dados são processados e exibidos diretamente no dispositivo do destinatário. Esse mecanismo é adequado para lembretes, temporizadores e alarmes quando o aplicativo está em segundo plano ou fechado. De acordo com a Documentação para desenvolvedores da Apple, o UNUserNotificationCenter fornece gerenciamento centralizado de notificações locais no iOS.
Pontos-chave
Uma notificação local é uma mensagem de gatilho gerada e exibida pelo sistema operacional no mesmo dispositivo onde o aplicativo está instalado. Ao contrário das notificações push, as locais não passam por um servidor externo — toda a lógica de agendamento é executada no cliente.
Essas notificações funcionam independentemente do estado do aplicativo: ativo, minimizado ou completamente fechado. O sistema operacional cuida da entrega no horário agendado, enquanto o desenvolvedor especifica apenas o conteúdo e o gatilho.
O sistema garante a entrega da notificação local mesmo sem conexão de rede. Esta é uma vantagem fundamental sobre as notificações push, que exigem conexão estável com a internet e um servidor em funcionamento.
Cada notificação local consiste em três partes: conteúdo (título, corpo, som), gatilho (condição de tempo ou geográfica) e identificador da solicitação. O identificador permite cancelar ou atualizar a notificação antes da entrega.
Um desenvolvedor pode agendar até 64 notificações locais por aplicativo no iOS e um número ilimitado no Android. Essa diferença se deve a restrições arquiteturais dos sistemas operacionais.
Ambas as plataformas fornecem suas próprias APIs para trabalhar com notificações locais. No iOS, o componente central é o UNUserNotificationCenter, no Android — o NotificationManager. Apesar das diferentes interfaces, a lógica é a mesma: o aplicativo cria uma solicitação, registra-a no sistema e o SO entrega a notificação no horário agendado.
O iOS usa UNCalendarNotificationTrigger para eventos de calendário, UNTimeIntervalNotificationTrigger para intervalos e UNLocationNotificationTrigger para geolocalização. O Android oferece AlarmManager, WorkManager e agendamento preciso via setExact.
Desde o Android 12 — SCHEDULE_EXACT_ALARM exige permissão especial do usuário. No iOS, a permissão é solicitada uma vez através do UNUserNotificationCenter.requestAuthorization, e o usuário escolhe o nível de acesso: banners, sons, emblemas.
As notificações locais são classificadas por tipo de gatilho, não por conteúdo. Cada tipo determina quando e em que condições a notificação será mostrada ao usuário.
No iOS e Android, os tipos de gatilhos são implementados de forma diferente, embora a classificação lógica seja a mesma. O iOS usa UNCalendarNotificationTrigger para datas, UNTimeIntervalNotificationTrigger para intervalos e UNLocationNotificationTrigger para geolocalização. O Android oferece AlarmManager com setExact e setRepeating, além do WorkManager para tarefas adiadas.
| Tipo de gatilho | Descrição | Exemplo |
|---|---|---|
| Intervalo de tempo | Notificação N segundos após a inicialização | Temporizador de contagem regressiva |
| Data de calendário | Notificação em data e hora específicas | Lembrete de reunião |
| Geolocalização | Notificação ao entrar/sair de uma região | Lembrete na loja |
| Imediato | Entrega instantânea ao chamar a API | Notificação de download |
O iOS também suporta UNNotificationAttachment — anexar uma imagem, áudio ou vídeo ao corpo da notificação. O Android suporta modelos personalizados com botões e imagens grandes através do NotificationCompat.Style.
A escolha do gatilho depende do cenário: lembretes de calendário funcionam melhor com gatilhos de calendário, lembretes geográficos com geolocalização. Gatilhos de intervalo são adequados para eventos recorrentes com período fixo.
No iOS, as notificações locais são entregues pelo sistema mesmo quando o aplicativo está fechado — o UNUserNotificationCenter gerencia a fila de forma independente. No Android, a entrega depende do mecanismo escolhido: o AlarmManager dispara mesmo com a tela desligada, enquanto o WorkManager leva em conta a economia de energia.
As notificações locais resolvem tarefas onde a infraestrutura externa é excessiva ou indisponível. Principais cenários: lembretes, temporizadores, dicas de integração e ações adiadas.
Pesquisas da Localytics mostram que aplicativos que usam lembretes locais retêm 35% mais usuários na primeira semana após a instalação. Isso torna as notificações locais uma ferramenta poderosa de integração.
É importante não abusar da frequência — o sistema agrupa notificações do mesmo aplicativo e o usuário pode desativar todas as notificações locais se elas se tornarem irritantes. A frequência ideal é de no máximo 2–3 notificações por dia para eventos não críticos.
Para agendar uma notificação local no Android, use o NotificationManager junto com o AlarmManager. No Android 8+, você deve primeiro criar um canal de notificações, caso contrário a notificação não será exibida.
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"Lembretes",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Canal para lembretes de tarefas"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
val intent = Intent(this, ReminderReceiver::class.java).apply {
putExtra("notification_id", notificationId)
putExtra("channel_id", channelId)
}
val pendingIntent = PendingIntent.getBroadcast(
this, notificationId.hashCode(),
intent, PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
triggerTimeMillis,
pendingIntent
)
No Android 12+, verifique a permissão SCHEDULE_EXACT_ALARM antes de chamar setExact. Se a permissão não for concedida — use setWindow, que garante a entrega dentro de uma janela de tempo.
Quando o AlarmManager dispara, o sistema envia um Intent de transmissão que é recebido pelo BroadcastReceiver. Dentro dele, você precisa criar e exibir a notificação através do NotificationManager. Certifique-se de que o PendingIntent use FLAG_UPDATE_CURRENT, caso contrário, notificações antigas continuarão usando um Intent desatualizado quando os dados mudarem.
No iOS, as notificações locais são criadas através do UNUserNotificationCenter usando UNMutableNotificationContent e um dos gatilhos. Antes de agendar, você deve solicitar permissão do usuário.
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "Lembrete de tarefa"
content.body = "Não se esqueça de concluir o relatório até as 18:00"
content.sound = .default
content.userInfo = ["task_id": "42"]
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: 3600,
repeats: false
)
let request = UNNotificationRequest(
identifier: "task_reminder_42",
content: content,
trigger: trigger
)
center.add(request)
O iOS suporta até 64 solicitações simultâneas de notificações locais. Se o limite for excedido, o sistema rejeita novas solicitações até que as ativas sejam entregues ou canceladas. Use getPendingNotificationRequests para verificar a fila atual.
Quando um usuário interage com uma notificação local no iOS, o método userNotificationCenter:didReceive response do delegado UNUserNotificationCenterDelegate é chamado. Este método fornece o identificador da solicitação, actionIdentifier (qual botão foi pressionado) e userInfo personalizado. Isso permite distinguir entre uma simples abertura de notificação e o pressionamento de um botão de ação específico.
Para que as notificações locais sejam úteis em vez de irritantes, siga várias regras principais. Primeiro: controle a frequência — no máximo 2–3 notificações por dia para eventos não críticos, caso contrário o usuário desativará todas as notificações do aplicativo.
Segundo: dê escolha ao usuário. Adicione na interface a capacidade de desativar certos tipos de notificações locais. No Android, use um NotificationChannel separado com baixa importância; no iOS, use uma categoria separada nas configurações do aplicativo.
Terceiro: relevância contextual — a notificação deve aparecer quando o usuário precisar dela. Gatilhos geográficos são ideais para lembretes perto de casa, gatilhos de calendário para reuniões, gatilhos de intervalo para atividades regulares como beber água ou alongar-se. Não misture tipos desnecessariamente.
Quarto: teste em dispositivos reais. O simulador do iOS não emula todos os cenários de entrega de notificações locais, especialmente em segundo plano. No Android, use adb shell dumpsys notification para verificar a fila de notificações agendadas e seus parâmetros. Quinto: sempre forneça ao usuário a capacidade de desativar notificações através da interface do aplicativo — este é um requisito obrigatório de UX e das diretrizes de revisão da App Store.
Perguntas frequentes
Uma notificação local é agendada e entregue pelo dispositivo sem envolvimento do servidor. Uma notificação push requer um serviço externo (FCM, APNS) e conexão com a internet. As locais funcionam offline, as push apenas com acesso à rede.
O iOS limita a 64 solicitações agendadas simultaneamente. O Android não tem um limite rígido, mas mais de 500 notificações podem reduzir o desempenho do sistema e afetar o tempo de entrega.
Sim, no iOS use removePendingNotificationRequests com o identificador da solicitação. No Android, chame NotificationManager.cancel ou cancele o PendingIntent através do AlarmManager. Um identificador único é obrigatório para o cancelamento.
No iOS, a permissão é obrigatória através do requestAuthorization. No Android 13+ (Tiramisu), a permissão POST_NOTIFICATIONS também é necessária. Versões mais antigas do Android não exigem permissão explícita para notificações locais.
No iOS, crie uma UNNotificationAction e adicione-a a UNNotificationCategory. No Android, use NotificationCompat.Builder.addAction com um PendingIntent direcionado ao BroadcastReceiver. Cada botão aciona uma ação separada no aplicativo.
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