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:
- Seleccionar Permitir
- Seleccionar No permitir
- Deslizar el dedo fuera del diálogo sin presionar ningún botón
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:
- Enviar notificaciones: Se permiten todos los canales de notificaciones.
- Publicar notificaciones relacionadas con servicios en primer plano: Estas aparecen en el panel lateral de notificaciones.
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:
- Declara el permiso
MANAGE_OWN_CALLS
. - Implementa la interfaz
ConnectionService
. - 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 elecciones del usuario y 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.
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.