Permiso de tiempo de ejecución: notificaciones

Android 13 (nivel de API 33) y versiones posteriores admiten un permiso de tiempo de ejecución para enviar notificaciones no exentas (que incluyen los servicios en primer plano [FGS]) desde una app: POST_NOTIFICATIONS. Este cambio ayuda a los usuarios a centrarse en las notificaciones que les resultan más importantes.

Te recomendamos que segmentes tu app a Android 13 o versiones posteriores lo antes posible para aprovechar el control y la flexibilidad adicionales de esta función. Si continúas segmentando tu app a 12L (nivel de API 32) o versiones anteriores, perderás cierta flexibilidad cuando solicites el permiso en el contexto de la funcionalidad de tu app.

Declara el permiso

A fin de solicitar un nuevo permiso de notificación desde tu app, actualízala para que se oriente a Android 13 y completa un proceso similar al de solicitar otros permisos de tiempo de ejecución, como se muestra a continuación.

El permiso que debes declarar en el archivo del manifiesto de tu app aparece en el siguiente fragmento de código:

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

Las capacidades de la app dependen de la elección del usuario en el diálogo de permisos

En este diálogo, los usuarios tienen las siguientes acciones disponibles:

En las siguientes secciones, se describe el comportamiento de tu app según la acción que realice el usuario.

El usuario selecciona "Permitir"

Si el usuario selecciona Permitir, la app podrá hacer lo siguiente:

El usuario selecciona "No permitir"

Si el usuario selecciona No permitir, la app no podrá enviar notificaciones a menos que califique para una exención. Todos los canales de notificaciones se bloquearán, excepto algunos roles específicos. Este comportamiento es similar al que ocurre cuando el usuario desactiva manualmente todas las notificaciones de tu app en la configuración del sistema.

Precaución: Si tu app se segmenta a 12L o versiones anteriores y el usuario presiona No permitir, no se le volverá a preguntar, ni siquiera una vez, hasta que ocurra una de las siguientes situaciones:

  • El usuario desinstala y vuelve a instalar tu app.
  • Actualizas la app para que se segmente a Android 13 o versiones posteriores.

El usuario descarta el diálogo

Si el usuario descarta el diálogo (es decir, no selecciona Permitir ni No permitir), no cambia el estado del permiso de notificaciones.

Efectos en apps instaladas recientemente

Si un usuario instala tu app en un dispositivo que ejecuta Android 13 o versiones posteriores, sus notificaciones están desactivadas de forma predeterminada. Tu app debe esperar para enviar notificaciones hasta después de que solicites el nuevo permiso y el usuario se lo otorgue a tu app.

El momento en que aparece el diálogo del permiso se basa en la versión del SDK de destino de tu app:

  • Si tu app se segmenta a Android 13 o versiones posteriores, tendrá control total sobre el momento en que se mostrará el diálogo del permiso. Aprovecha esta oportunidad para explicarles a los usuarios las razones por las que la app necesita este permiso y aliéntalos a que lo otorguen.
  • Si tu app se segmenta a 12L (nivel de API 32) o versiones anteriores, el sistema mostrará el diálogo del permiso cuando, por primera vez, tu app inicia una actividad después de que crees un canal de notificaciones o cuando tu app inicie un actividad y, luego, cree tu primer canal de notificaciones. Por lo general, ocurre en el inicio de la app.

Efectos en actualizaciones de apps existentes

Para minimizar las interrupciones asociadas con los permisos de notificaciones, el sistema otorga previa y automáticamente el permiso a todas las apps aptas cuando el usuario actualiza su dispositivo a Android 13 o versiones posteriores. En otras palabras, estas apps pueden continuar enviando notificaciones a los usuarios, y estos no verán un mensaje de permiso de tiempo de ejecución.

Elegibilidad para otorgamiento previo de permisos

A fin de que tu app sea apta para un otorgamiento previo automático, debe tener un canal de notificaciones existente y el usuario no debe inhabilitar de manera explícita sus notificaciones en un dispositivo que ejecute 12L o versiones anteriores.

Si el usuario inhabilitó las notificaciones de tu app en un dispositivo que ejecuta 12L o versiones anteriores, esa denegación se conservará cuando el dispositivo se actualice a Android 13 o versiones posteriores.

Exenciones

En esta sección, se incluye el conjunto de notificaciones y apps que están exentas del cambio de comportamiento de los permisos de notificaciones. En Android 13 (nivel de API 33) o versiones posteriores, si el usuario rechaza el permiso de notificaciones, seguirá viendo los avisos relacionados con los servicios en primer plano en el Administrador de tareas, pero no los verá en el panel lateral de notificaciones.

Sesiones de contenido multimedia

Las notificaciones relacionadas con sesiones multimedia están exentas de este cambio de comportamiento.

Apps configuradas para autoadministrar llamadas telefónicas

Si tu app se configura para autoadministrar llamadas telefónicas, no necesitas el permiso POST_NOTIFICATIONS a fin de que la app envíe notificaciones que usan el estilo de notificación Notification.CallStyle.

El sistema considera que tu app se configuró para autoadministrar llamadas telefónicas si realiza cada una de las siguientes acciones:

  1. Declara el permiso MANAGE_OWN_CALLS.
  2. Implementa la interfaz ConnectionService.
  3. Se registra con el proveedor de telecomunicaciones del dispositivo con una llamada a registerPhoneAccount().

Prueba tu app

Puedes evaluar el modo en que los permisos de notificaciones afectan a tu app cuando se usan por primera vez en un dispositivo que ejecuta Android 13 o versiones posteriores. Los siguientes conjuntos de comandos de Android Debug Bridge (adb) te permiten simular las secuencias más comunes de las elecciones de usuarios y las actualizaciones de dispositivos sin necesidad de restablecer el dispositivo de prueba:

  • La app se instaló recientemente en un dispositivo que ejecuta Android 13 o versiones posteriores:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • El usuario mantiene habilitadas las notificaciones cuando se instala la app en un dispositivo que ejecuta 12L o versiones anteriores y, luego, el dispositivo se actualiza a Android 13 o versiones posteriores:

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • El usuario inhabilita las notificaciones de forma manual cuando se instala la app en un dispositivo que ejecuta 12L o versiones anteriores y, luego, el dispositivo se actualiza a Android 13 o versiones posteriores:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed

Prácticas recomendadas

En esta sección, se describen varias formas en las que puedes usar el nuevo permiso de notificación de manera más efectiva en la app.

Actualiza la versión de destino del SDK de tu app

A fin de que tu app tenga más flexibilidad respecto de cuándo aparece diálogo del permiso, actualízala para que se oriente a Android 13 o versiones posteriores.

Espera para mostrar el mensaje de permiso de notificación

Antes de pedirles a los usuarios que otorguen permisos, permíteles que se familiaricen con la app.

Es posible que los usuarios nuevos deseen explorar la app y descubrir de primera mano los beneficios de cada solicitud de notificación individual. Puedes activar una solicitud de permisos desde una acción del usuario. En la siguiente lista, se muestran varios ejemplos de cuándo es un buen momento para mostrar el mensaje de permiso de notificación:

  • El usuario presiona un botón de "campana de alertas".
  • El usuario elige seguir la cuenta de redes sociales de otra persona.
  • El usuario realiza un pedido de envío de comida.

En la Figura 1, se muestra un flujo de trabajo recomendado para solicitar el permiso de notificaciones. A menos que shouldShowRequestPermissionRationale() muestre true, tu app no necesita mostrar la pantalla del medio, que es la que tiene el texto del título "Get notified!".

Como alternativa, puedes configurar una solicitud para que aparezca después de que le brindes a los usuarios la oportunidad de familiarizarse con tu app. Por ejemplo, puedes esperar hasta la tercera o cuarta vez que el usuario inicie la app.

Después de que el usuario accede, aparece una invitación para recibir notificaciones sobre actualizaciones del viaje. Una vez que el usuario presiona el botón &quot;Acepto&quot;, la app solicita el permiso nuevo, lo que hace que aparezca el diálogo del sistema
Figura 1. Flujo de trabajo recomendado impulsado por el usuario para solicitar el permiso de notificaciones. La pantalla del medio solo es necesaria si shouldShowRequestPermissionRationale() muestra true.

Solicita el permiso en contexto

Cuando solicites permisos de notificación dentro de tu app, hazlo en el contexto correcto a fin de que quede claro el fin de las notificaciones y los motivos por los que el usuario debería aceptarlas. Por ejemplo, una app de correo electrónico podría incluir opciones para enviar notificaciones sobre cada correo electrónico nuevo o solo para los correos electrónicos en los que el usuario es el único destinatario.

Aprovecha esta oportunidad para brindar transparencia a tus intenciones y será más probable que los usuarios otorguen el permiso de notificación a tu app.

Verifica si tu app puede enviar notificaciones

Antes de que tu app envíe una notificación, confirma si el usuario habilitó las notificaciones de la app. Para hacerlo, llama a areNotificationsEnabled().

Usa el permiso con responsabilidad

Después de recibir la aprobación para enviar notificaciones, recuerda usar el permiso de manera responsable. Los usuarios pueden ver la cantidad de notificaciones diarias que envía tu app y revocar el permiso en cualquier momento.