Uno de los cambios que llegan con Android 13, es la inclusión de un nuevo permiso obligatorio en el caso de que deseemos mostrar notificaciones en nuestras aplicaciones. Las comparaciones son odiosas, pero para los que hayan trabajado en el desarrollo IOS este permiso es el mismo que siempre ha existido en esta plataforma.

Por supuesto solo es obligatorio si nuestra aplicación tiene un target para Android 13 o API 33, cosa que se recomienda hacer nada más sea lanzada la versión de forma estable.

Funcionamiento del permiso de notificaciones en Android 13

Este nuevo permiso llega con ciertas peculiaridades que son interesantes conocer para no llevarnos una sorpresa cuando estemos trabajando con él. Por defecto, en Android 13, el permiso para el envío de notificaciones está sin conceder.

En primero lugar decir que la solicitud de concesión del permiso sigue los mismos flujos que los de cualquier permiso de este tipo. Se pedirá al sistema que compruebe si tenemos concedido este permiso utilizando checkSelfPermission lo cual hará que el sistema muestre un cuadro de diálogo que contendrá dos botones:

  • Conceder permiso
  • No conceder permiso

En este momento el usuario tendrá tres opciones a realizar y cada una de ella hará que nuestra aplicación pueda funcionar de una forma u otra.

  • Si el usuario pulsa el botón de Conceder Permiso, nuestra aplicación podrá enviar notificaciones al usuario por cualquier canal. Siempre hay que ser respetuosos con nuestros usuarios y no atosigarlos a notificaciones.
  • Si el usuario pulsa sobre No conceder Permiso, nuestra aplicación no podrá enviar ningún tipo de notificación al usuario. Además no se podrá mostrar de nuevo este cuadro de diálogo al usuario hasta que se desinstale y se vuelva a instalar la app. Este escenario es similar a cuando a día de hoy un usuario de forma manual bloquea las notificaciones mediante la configuración de la misma.
  • El usuario pulsa fuera del diálogo y no pulsa ninguno de los dos botones. En este caso nuestra aplicación queda por defecto sin posibilidad de enviar notificaciones a menos que ya tuviese concedido el envío de notificaciones en algún canal.

Cuando en un teléfono con Android 13 una aplicación se actualice a una nueva versión que tenga el target de Android 13, esta conservará de forma temporal los permisos que tuviese hasta que se lance una nueva Activity. En ese momento habrá que mostrar el cuadro de diálogo comentado anteriormente.

Si el target de la aplicación es Android 12 o inferior, en un terminal que ejecute Android 13, se mantendrán los permisos que tuviese concedidos hasta ese momento. Una vez tengamos que pedir permisos al usuario para alguna notificación nueva o que el usuario las hubiese cancelado, el flujo será como el indicado por defecto en Android 13

Añadiendo el permiso de notificaciones en Android 13

Lo primero a hacer como con cualquier permiso obligatorio en Android, es declararlo en el AndroidManifest.

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Solo queda solicitar el acceso al permiso dentro del flujo de nuestra aplicación donde creamos que sea más conveniente. Se recomienda hacerlo dentro de un contexto de nuestra aplicación donde se explique bien para que deseamos usar las notificaciones, que quede claro al usuario.

if (ContextCompat.checkSelfPermission(
                    this,
                    Manifest.permission.POST_NOTIFICATIONS,
                ) == PackageManager.PERMISSION_GRANTED
            ) {
                showNotification()
            } else {
                requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }

Ya que el usuario puede revocar el permiso en cualquier momento, antes de enviar una notificación podemos utilizar el siguiente código para saber si tenemos concedido el permiso en ese momento.

NotificationManagerCompat.from(context).areNotificationsEnabled() 

Esto retornará un booleano con la respuesta.