Notification Permission es el permiso necesario para que una aplicación envíe notificaciones push y notificaciones locales al usuario. A partir de Android 13 y iOS 12, las aplicaciones deben solicitar este permiso en tiempo de ejecución a través de un diálogo del sistema. Según Android Developers, 2024, sin el consentimiento explícito del usuario, la aplicación no puede mostrar notificaciones en dispositivos con Android 13 y superior.
Puntos clave
Notification Permission es un permiso del sistema que regula la capacidad de una aplicación para enviar notificaciones al usuario. Antes de Android 13, todas las aplicaciones podían mostrar notificaciones sin solicitarlo — bastaba con declarar el permiso en el manifiesto. Sin embargo, con el aumento del spam y las notificaciones molestas, Google introdujo una solicitud obligatoria en tiempo de ejecución, similar a iOS.
En iOS, el permiso de notificación ha sido obligatorio desde iOS 8, y a partir de iOS 12 aparecieron las notificaciones provisionales — notificaciones silenciosas que se entregan sin sonido y se muestran en el Centro de Notificaciones sin una solicitud explícita. Las notificaciones provisionales permiten al desarrollador mostrar al usuario el valor de las notificaciones antes de solicitar el permiso completo.
Según Localytics (2024), el 61% de los usuarios de iOS y el 55% de los usuarios de Android aceptan recibir notificaciones push después de una solicitud. La conversión de aprobación depende directamente del contexto de la solicitud: las aplicaciones que piden permiso después de la primera interacción valiosa obtienen un 40% más de aprobaciones que las que lo solicitan en el primer inicio.
La evolución de los permisos de notificación muestra cómo las plataformas han restringido gradualmente el acceso de las aplicaciones a este canal de comunicación. Comprender esta evolución ayuda al desarrollador a manejar correctamente las diferentes versiones del sistema operativo.
Antes de Android 13 (2022), cualquier aplicación podía mostrar notificaciones sin el consentimiento del usuario. Android 8.0 (2017) introdujo los canales de notificación, Android 12 (2021) agregó el bloqueo automático de notificaciones molestas, y finalmente Android 13 hizo obligatorio solicitar POST_NOTIFICATIONS en tiempo de ejecución. Para las aplicaciones con targetSdkVersion inferior a 33, el sistema otorga el permiso automáticamente, pero Google Play exige actualizar targetSdkVersion a 33+ desde agosto de 2023.
iOS 8 (2014) introdujo la solicitud obligatoria de permiso a través de UIUserNotificationSettings. iOS 10 (2016) presentó UNUserNotificationCenter con soporte para notificaciones enriquecidas. iOS 12 (2018) agregó notificaciones provisionales y notificaciones agrupadas. iOS 15 (2021) introdujo el Modo de Enfoque, que puede bloquear notificaciones independientemente del permiso de la aplicación. App Tracking Transparency (iOS 14.5) no está relacionado con las notificaciones, pero también ha influido en la cultura general de solicitudes de permisos.
Actualmente, ambas plataformas requieren una solicitud de Notification Permission en tiempo de ejecución. El desarrollador ya no puede confiar en la activación automática de las notificaciones. El usuario tiene control total sobre qué aplicaciones pueden notificarle. Los canales de notificación en Android y las categorías de notificación en iOS permiten al usuario ajustar finamente los tipos de alertas que recibe.
Notification Permission en Android se habilita mediante el permiso POST_NOTIFICATIONS declarado en el manifiesto, seguido de una solicitud en tiempo de ejecución para Android 13+.
Para Android 13+, es necesario declarar el permiso POST_NOTIFICATIONS en AndroidManifest.xml. Para compatibilidad backward con Android 12 y versiones anteriores, el permiso se otorga automáticamente por el sistema — no se requieren acciones adicionales.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
La solicitud del permiso POST_NOTIFICATIONS se realiza a través de Activity Result API. Es importante verificar la versión del SDK: en Android 12 y versiones anteriores no se necesita solicitud — el permiso se considera otorgado automáticamente.
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 y versiones anteriores — permiso otorgado automáticamente
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
En Android 8.0+, la aplicación debe crear un canal de notificación a través de NotificationChannel antes de enviar la primera notificación. El canal tiene un nivel de importancia desde IMPORTANCE_NONE hasta IMPORTANCE_HIGH, que determina si la notificación se mostrará con sonido y como banner. Si el usuario ha desactivado las notificaciones para la aplicación, los nuevos canales no tendrán efecto hasta que se vuelvan a activar en la configuración. Se recomienda crear canales separados para diferentes tipos de alertas: mensajes, publicidad, eventos del sistema.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Mensajes",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Notificaciones de nuevos mensajes"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission en iOS se solicita a través de UNUserNotificationCenter. Apple recomienda un enfoque de dos pasos: primero solicitar notificaciones provisionales, luego, después de demostrar el valor, solicitar el permiso completo.
Las notificaciones provisionales son notificaciones silenciosas que aparecen en el Centro de Notificaciones sin sonido ni banner. No requieren el consentimiento explícito del usuario y permiten que la aplicación demuestre el valor de las notificaciones antes de una solicitud completa. Después de recibir varias notificaciones provisionales, el usuario puede activar las notificaciones completas a través del menú dentro de la propia notificación.
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
// Provisional — el usuario no ve el diálogo
// Las notificaciones llegan sin sonido al Centro de Notificaciones
registerForRemoteNotifications()
}
}
El estado actual de Notification Permission en iOS se puede obtener a través de UNUserNotificationCenter.current().getNotificationSettings. El estado .authorized, .denied, .provisional o .notDetermined permite que la aplicación elija el comportamiento correcto. Después de la primera denegación, el diálogo del sistema no se vuelve a mostrar — debe redirigir al usuario a Configuración a través de UIApplication.openSettingsURLString. Apple también recomienda manejar el estado .ephemeral (iOS 17+), que proporciona notificaciones temporales para escenarios específicos.
Las mejores prácticas para solicitar Notification Permission tienen como objetivo aumentar la conversión de aprobación y reducir la pérdida de usuarios. Una solicitud incorrecta no solo puede privar a la aplicación de la capacidad de enviar notificaciones, sino también llevar a la desinstalación de la aplicación.
El antipatrón más común es solicitar Notification Permission en el primer inicio de la aplicación. El usuario aún no comprende el valor de la aplicación y es muy probable que deniegue. El momento óptimo es después de que el usuario haya realizado la primera acción valiosa: realizado un pedido, enviado un mensaje, se haya suscrito a actualizaciones. Una solicitud post-valor aumenta la conversión de aprobación al 65-75%.
Antes del diálogo del sistema, muestre su propia pantalla con ejemplos de las notificaciones que recibirá el usuario. Muestre una maqueta de una notificación futura con texto e icono. Si el usuario ve que las notificaciones serán útiles y no intrusivas, es más probable que acepte. Una vista previa de notificación en la pantalla de pre-permiso es una técnica efectiva que aumenta la conversión entre un 35 y un 50%.
Solicitar de forma proactiva Notificaciones Provisionales en iOS permite entregar notificaciones sin el consentimiento explícito del usuario. Si el usuario ve valor en estas notificaciones, puede activar las notificaciones completas a través del menú contextual de la notificación. Apple recomienda este enfoque para aplicaciones de noticias, aplicaciones del clima y otros servicios donde las notificaciones son informativas y no transaccionales. Según Apple WWDC 2024, este enfoque aumenta la conversión de aprobación completa entre un 20 y un 30%.
Preguntas frecuentes
Después de la denegación, el diálogo del sistema no se vuelve a mostrar. La única forma de activar las notificaciones es redirigir al usuario a la configuración del sistema a través de Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) en Android o UIApplication.openSettingsURLString en iOS. Muestre una pantalla con instrucciones y un botón para continuar.
En Android 12 y versiones anteriores, no se requiere Notification Permission — todas las aplicaciones pueden enviar notificaciones sin solicitud. Sin embargo, el usuario puede desactivar las notificaciones en cualquier momento a través de la configuración del sistema. A partir de Android 13, la solicitud en tiempo de ejecución es obligatoria para targetSdkVersion 33+.
NotificationChannel es una categoría de notificación introducida en Android 8.0. Cada canal tiene un nombre, descripción, nivel de importancia y grupo. El usuario puede desactivar canales individuales sin desactivar todas las notificaciones de la aplicación. Por ejemplo, el canal “Nuevos mensajes” y el canal “Boletines publicitarios” se pueden configurar de manera diferente.
En Android 13+, sin POST_NOTIFICATIONS, cualquier llamada a NotificationManager.notify será ignorada por el sistema. En iOS, sin el permiso de UNUserNotificationCenter, las notificaciones no se entregan. Excepción: Provisional en iOS (sin sonido, solo en el Centro de Notificaciones) y Android 12- (no se requiere permiso).
En Android, use NotificationManagerCompat.areNotificationsEnabled(). En iOS, llame a UNUserNotificationCenter.current().getNotificationSettings y verifique la propiedad authorizationStatus. Para Android, adicionalmente verifique la importancia del canal: NotificationChannel.getImportance() no debe ser IMPORTANCE_NONE.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también