Notification Permission é a permissão necessária para um aplicativo enviar notificações push e notificações locais ao usuário. A partir do Android 13 e iOS 12, os aplicativos são obrigados a solicitar essa permissão em tempo de execução através de um diálogo do sistema. De acordo com Android Developers, 2024, sem o consentimento explícito do usuário, o aplicativo não pode exibir notificações em dispositivos com Android 13 e superior.
Pontos principais
Notification Permission é uma permissão do sistema que regula a capacidade de um aplicativo enviar notificações ao usuário. Antes do Android 13, todos os aplicativos podiam exibir notificações sem solicitação — bastava declarar a permissão no manifesto. No entanto, com o aumento de spam e notificações intrusivas, o Google introduziu uma solicitação obrigatória em tempo de execução, semelhante ao iOS.
No iOS, a permissão de notificação é obrigatória desde o iOS 8, e a partir do iOS 12 surgiram as notificações provisórias — notificações silenciosas que são entregues sem som e exibidas na Central de Notificações sem uma solicitação explícita. As notificações provisórias permitem que o desenvolvedor mostre ao usuário o valor das notificações antes de solicitar a permissão completa.
De acordo com Localytics (2024), 61% dos usuários iOS e 55% dos usuários Android concordam em receber notificações push após uma solicitação. A conversão de aprovação depende diretamente do contexto da solicitação: aplicativos que pedem permissão após a primeira interação valiosa obtêm 40% mais aprovações do que aqueles que solicitam na primeira inicialização.
A evolução das permissões de notificação mostra como as plataformas restringiram gradualmente o acesso dos aplicativos a este canal de comunicação. Compreender essa evolução ajuda o desenvolvedor a lidar corretamente com diferentes versões do sistema operacional.
Antes do Android 13 (2022), qualquer aplicativo podia exibir notificações sem o consentimento do usuário. O Android 8.0 (2017) introduziu os canais de notificação, o Android 12 (2021) adicionou o bloqueio automático de notificações intrusivas e, finalmente, o Android 13 tornou obrigatória a solicitação de POST_NOTIFICATIONS em tempo de execução. Para aplicativos com targetSdkVersion inferior a 33, o sistema concede a permissão automaticamente, mas o Google Play exige a atualização do targetSdkVersion para 33+ desde agosto de 2023.
O iOS 8 (2014) introduziu a solicitação obrigatória de permissão através do UIUserNotificationSettings. O iOS 10 (2016) apresentou o UNUserNotificationCenter com suporte para notificações ricas. O iOS 12 (2018) adicionou notificações provisórias e notificações agrupadas. O iOS 15 (2021) introduziu o Modo Foco, que pode bloquear notificações independentemente da permissão do aplicativo. O App Tracking Transparency (iOS 14.5) não está relacionado a notificações, mas também influenciou a cultura geral de solicitações de permissão.
Atualmente, ambas as plataformas exigem uma solicitação de Notification Permission em tempo de execução. O desenvolvedor não pode mais confiar na ativação automática das notificações. O usuário tem controle total sobre quais aplicativos podem notificá-lo. Os canais de notificação no Android e as categorias de notificação no iOS permitem que o usuário ajuste finamente os tipos de alertas que recebe.
Notification Permission no Android é habilitada através da permissão POST_NOTIFICATIONS declarada no manifesto, seguida por uma solicitação em tempo de execução para Android 13+.
Para Android 13+, é necessário declarar a permissão POST_NOTIFICATIONS no AndroidManifest.xml. Para compatibilidade retroativa com Android 12 e inferior, a permissão é concedida automaticamente pelo sistema — nenhuma ação adicional é necessária.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
A solicitação da permissão POST_NOTIFICATIONS é realizada através da Activity Result API. É importante verificar a versão do SDK: no Android 12 e inferior, nenhuma solicitação é necessária — a permissão é considerada concedida automaticamente.
private val notificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
createNotificationChannel()
showPushNotification()
} else {
logPermissionDenied()
}
}
fun requestNotificationAccess() {
if (Build.version.SDK_INT <= Build.VERSION_CODES.S_V2) {
// Android 12 e inferior — permissão concedida automaticamente
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
No Android 8.0+, o aplicativo deve criar um canal de notificação através de NotificationChannel antes de enviar a primeira notificação. O canal tem um nível de importância de IMPORTANCE_NONE a IMPORTANCE_HIGH, que determina se a notificação será exibida com som e como banner. Se o usuário desativou as notificações para o aplicativo, novos canais não terão efeito até serem reativados nas configurações. Recomenda-se criar canais separados para diferentes tipos de alertas: mensagens, anúncios, eventos do sistema.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Mensagens",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Notificações de novas mensagens"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission no iOS é solicitada através do UNUserNotificationCenter. A Apple recomenda uma abordagem de duas etapas: primeiro solicitar notificações provisórias e, depois de demonstrar valor, solicitar a permissão completa.
Notificações provisórias são notificações silenciosas que aparecem na Central de Notificações sem som ou banner. Elas não exigem consentimento explícito do usuário e permitem que o aplicativo demonstre o valor das notificações antes de uma solicitação completa. Após receber várias notificações provisórias, o usuário pode ativar as notificações completas através do menu dentro da própria notificação.
import UserNotifications
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if let error = error {
print("Notification error: \(error.localizedDescription)")
return
}
if granted {
registerForRemoteNotifications()
} else {
handleDeniedPermission()
}
}
}
func requestProvisionalOnly() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.provisional, .alert, .badge, .sound]) { granted, error in
// Provisório — o usuário não vê o diálogo
// Notificações chegam sem som na Central de Notificações
registerForRemoteNotifications()
}
}
O status atual do Notification Permission no iOS pode ser obtido através de UNUserNotificationCenter.current().getNotificationSettings. O status .authorized, .denied, .provisional ou .notDetermined permite que o aplicativo escolha o comportamento correto. Após a primeira negação, o diálogo do sistema não é exibido novamente — é necessário redirecionar o usuário para Ajustes através do UIApplication.openSettingsURLString. A Apple também recomenda lidar com o status .ephemeral (iOS 17+), que fornece notificações temporárias para cenários específicos.
As melhores práticas para solicitar Notification Permission visam aumentar a conversão de aprovação e reduzir a perda de usuários. Uma solicitação incorreta pode não apenas privar o aplicativo da capacidade de enviar notificações, mas também levar à desinstalação do aplicativo.
O antipadrão mais comum é solicitar Notification Permission na primeira inicialização do aplicativo. O usuário ainda não entende o valor do aplicativo e tem alta probabilidade de negar. O momento ideal é depois que o usuário realizou a primeira ação valiosa: fez um pedido, enviou uma mensagem, inscreveu-se em atualizações. Um solicitação pós-valor aumenta a conversão de aprovação para 65-75%.
Antes do diálogo do sistema, mostre sua própria tela com exemplos de notificações que o usuário receberá. Exiba uma maquete de uma notificação futura com texto e ícone. Se o usuário perceber que as notificações serão úteis e não intrusivas, ele terá maior probabilidade de consentir. Uma prévia de notificação na tela de pré-permissão é uma técnica eficaz que aumenta a conversão em 35-50%.
Solicitar proativamente Notificações Provisórias no iOS permite entregar notificações sem o consentimento explícito do usuário. Se o usuário perceber valor nessas notificações, ele pode ativar as notificações completas através do menu de contexto da notificação. A Apple recomenda esta abordagem para aplicativos de notícias, aplicativos de clima e outros serviços onde as notificações são informativas e não transacionais. De acordo com a Apple WWDC 2024, esta abordagem aumenta a conversão de aprovação completa em 20-30%.
Perguntas frequentes
Após a negação, o diálogo do sistema não é exibido novamente. A única maneira de ativar as notificações é redirecionar o usuário para as configurações do sistema através de Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) no Android ou UIApplication.openSettingsURLString no iOS. Mostre uma tela com instruções e um botão para prosseguir.
No Android 12 e inferior, o Notification Permission não é necessário — todos os aplicativos podem enviar notificações sem solicitação. No entanto, o usuário pode desativar as notificações a qualquer momento através das configurações do sistema. A partir do Android 13, a solicitação em tempo de execução é obrigatória para targetSdkVersion 33+.
NotificationChannel é uma categoria de notificação introduzida no Android 8.0. Cada canal tem um nome, descrição, nível de importância e grupo. O usuário pode desativar canais individuais sem desativar todas as notificações do aplicativo. Por exemplo, o canal “Novas mensagens” e o canal “Mailings promocionais” podem ser configurados de forma diferente.
No Android 13+, sem POST_NOTIFICATIONS, qualquer chamada para NotificationManager.notify será ignorada pelo sistema. No iOS, sem a permissão do UNUserNotificationCenter, as notificações não são entregues. Exceção: Provisional no iOS (sem som, apenas na Central de Notificações) e Android 12- (permissão não necessária).
No Android, use NotificationManagerCompat.areNotificationsEnabled(). No iOS, chame UNUserNotificationCenter.current().getNotificationSettings e verifique a propriedade authorizationStatus. Para Android, verifique adicionalmente a importância do canal: NotificationChannel.getImportance() não deve ser IMPORTANCE_NONE.
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.