Permiso de alarma exacta rechazado: envía recordatorios y pide el permiso de notificaciones sin USE_EXACT_ALARM
Google reserva USE_EXACT_ALARM para despertadores, temporizadores y calendarios. Una app de hábitos, una tienda o una app de reservas que envía recordatorios no está en esa lista, y en Android 14 incluso SCHEDULE_EXACT_ALARM, que concede el usuario, empieza denegado en la mayoría de las instalaciones nuevas. La mayoría de los recordatorios no necesitan llegar al segundo exacto. Quita los permisos de alarma exacta que no puedas justificar, conserva tus recordatorios y pide el permiso de notificaciones en el momento adecuado.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
Garantía de aprobación – o te devolvemos el dinero en 14 días
Sin programar
Pago único, actualizaciones gratuitas
Soporte humano 24/7
Hecho en Alemania desde 2014 · ISO 27001
9:41
Tu app
Tu appYa en tu bolsillo
App Store · Google Play Aprobada
Dos permisos de alarma exacta, dos reglas muy distintas
Android ofrece dos formas de programar una alarma que salte en un momento exacto, incluso cuando el teléfono está inactivo. USE_EXACT_ALARM se concede al instalar y el usuario no puede revocarlo. Por eso Google Play lo restringe a las apps cuya función principal de cara al usuario depende de una temporización precisa: despertadores, temporizadores y apps de calendario que muestran notificaciones de eventos. Una app fuera de esas categorías que lo incluya en el manifiesto se rechaza.
SCHEDULE_EXACT_ALARM es la alternativa para todos los demás: el usuario lo concede como acceso especial de la app (Alarmas y recordatorios) y puede retirarlo. Desde Android 14 está denegado por defecto para la mayoría de las apps recién instaladas, y el código que programa una alarma exacta sin él falla con una excepción de seguridad, así que una app que dependa de él tiene que comprobarlo primero y tener una alternativa. La propia guía de Android dice que la mayoría de las apps no necesitan alarmas exactas en absoluto: el trabajo periódico va en WorkManager, los recordatorios aproximados pueden usar alarmas inexactas o con ventana, y todo lo que dependa de eventos del servidor funciona mejor como push. Los detalles están en la página de Android sobre alarmas exactas.
Cómo se redacta el rechazo
La entrada en Estado de las políticas (Policy status) hace referencia al permiso de alarma exacta e indica que la funcionalidad principal de la app no cumple los requisitos de USE_EXACT_ALARM. Te pide que quites el permiso de los bundles de tu envío o que uses SCHEDULE_EXACT_ALARM, que concede el usuario, si la temporización precisa es de verdad una necesidad de cara al usuario. En una app ya publicada, la misma incidencia puede llegar como advertencia con un plazo. La mayoría de las apps web empaquetadas no añadieron el permiso a propósito; lo trajo una biblioteca de notificaciones o de programación.
¿Tus recordatorios necesitan una hora exacta?
Caso de uso
Precisión que espera el usuario
Mejor herramienta
Despertador, temporizador de cuenta atrás
Al segundo
Alarmas exactas; para esto existe USE_EXACT_ALARM, y normalmente es una app nativa y no una app web
App de calendario con notificaciones de eventos
Al minuto
Puede cumplir los requisitos para alarmas exactas cuando el calendario es el núcleo de la app
Recordatorio de hábitos, rachas o estudio
Más o menos a la hora elegida
Push local con sendlocalpushmsg://, o push programado desde tu servidor
Carrito abandonado, happy hour, aviso para volver
En cuestión de minutos u horas
Push local, o un mensaje programado desde OneSignal, Firebase o Pushwoosh
Recordatorio de cita o reserva
Unos minutos arriba o abajo no importan
Push del servidor, que tu backend envía en el momento adecuado
Actualización de pedido, chat o estado
Cuando ocurre el evento
Push del servidor; sin ninguna programación en el dispositivo
Mi WebView de iOS finalmente está aprobada. ¡Gracias!
Notificaciones en una app de WebViewGold, de la forma que acepta la política
Push local desde tu app web
Programa una notificación con unos segundos de antelación con sendlocalpushmsg://push.send?s=… mientras la app está abierta, y cancela todas las pendientes con sendlocalpushmsg://push.send.cancel. No necesita proveedor de push y sirve para avisos y recordatorios sencillos.
Push remoto para todo lo que dependa de la hora
OneSignal (PUSH_ENABLED), Firebase (FIREBASE_PUSH_ENABLED) o Pushwoosh (PUSHWOOSH_ENABLED) entregan lo que envía tu servidor, cuando lo envía, sin ningún permiso de alarma en la app. Compáralos en la comparativa de proveedores de push.
Pide el permiso en contexto
Android 13 y posteriores necesitan el permiso de tiempo de ejecución POST_NOTIFICATIONS. WebViewGold lo pide por defecto en el primer inicio (requirePush en true). Ponlo en false y llama a registerpush:// cuando el usuario active los recordatorios; para ello necesitas al menos un servicio de push activado.
Comprueba el estado
checkNativePushPermissions:// inyecta nativePushEnabled en la página. Solo es true cuando están concedidos tanto el ajuste de notificaciones del sistema como el permiso de tiempo de ejecución.
Recupérate de una denegación
Si el usuario lo rechazó de forma definitiva, ofrece un botón que abra la pantalla Información de la app del sistema con settingsapp://, donde se pueden volver a activar las notificaciones.
Soluciona el rechazo
Normalmente, un cambio en el manifiesto, un pequeño cambio en la app web y una recompilación.
Encuentra los permisos de alarma exacta y su origen
Revisa la lista de permisos en el App bundle explorer (Explorador de app bundles) y después la pestaña Merged Manifest de Android Studio, que indica qué biblioteca o manifiesto añade USE_EXACT_ALARM o SCHEDULE_EXACT_ALARM.
Quita USE_EXACT_ALARM salvo que seas una app de alarma, temporizador o calendario
Bórralo de tu manifiesto o elimínalo con la regla de abajo. En una app web empaquetada, casi siempre la respuesta es esta.
Decide qué hacer con SCHEDULE_EXACT_ALARM
Si viene de una biblioteca que no usas, quítalo también. Si el Merged Manifest muestra que viene del propio proyecto de WebViewGold, pregunta al soporte de WebViewGold si las notificaciones locales de tu versión de la plantilla dependen de él antes de quitarlo, porque una llamada de alarma exacta sin el permiso falla.
Pasa los mensajes que dependen de la hora a push del servidor
Todo lo que tenga que llegar en un momento concreto y dependa de tus datos (un recordatorio de reserva, una actualización de pedido) es más fiable como push enviado por tu backend. Deja el push local para avisos sencillos. La documentación de push para Android cubre los tres proveedores.
Lleva la solicitud de notificaciones a su contexto
Pon requirePush en false y lanza registerpush:// desde la pantalla en la que los usuarios activan los recordatorios, como en el código de abajo. Un revisor que lo rechace tiene que poder seguir usando la app.
Prueba en Android 14 o posterior y vuelve a enviarla
Instalación limpia desde las pruebas internas: activa los recordatorios, programa un push local para dentro de unos minutos, bloquea el teléfono y espera. En Ajustes → Aplicaciones → Acceso especial de aplicaciones → Alarmas y recordatorios, confirma que la app ya no pide alarmas exactas. Después súbela con un version code más alto y sustituye los bundles en todos los canales.
Regla de eliminación para AndroidManifest.xml
Elimina lo que añade una dependencia. Deja la segunda línea solo después de confirmar que nada en tu compilación necesita alarmas exactas.
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- No es una app de alarma, temporizador ni calendario: sin USE_EXACT_ALARM -->
<uses-permission android:name="android.permission.USE_EXACT_ALARM" tools:node="remove" />
<!-- Solo después de comprobar que nada depende de alarmas exactas -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" tools:node="remove" />
</manifest>
Pide las notificaciones en contexto y programa un recordatorio
Código de la app web para una pantalla de recordatorios. showModal y showSettingsHint representan tu propia interfaz; los esquemas de URL son los documentados de WebViewGold.
javascript
// 1. El usuario activa los recordatorios: primero explica, después pregunta a Android
function enableReminders() {
showModal({
title: "¿Activar los recordatorios diarios?",
body: "Te enviamos un recordatorio al día a la hora que elijas. Puedes desactivarlo aquí cuando quieras.",
primary: { label: "Activar", onClick: () => { window.location.href = "registerpush://"; } },
secondary: { label: "Ahora no", onClick: () => {} }
});
}
// 2. Más tarde: comprueba si las notificaciones están permitidas
function checkReminderStatus() {
window.location.href = "checkNativePushPermissions://";
setTimeout(() => {
if (typeof nativePushEnabled !== "undefined" && nativePushEnabled) {
scheduleNudge();
} else {
showSettingsHint(); // p. ej. un botón con href="settingsapp://"
}
}, 500);
}
// 3. Un recordatorio local sencillo, dentro de dos horas
function scheduleNudge() {
var title = "Tu racha te espera";
var message = "Dos minutos hoy mantienen viva tu racha.";
var seconds = 2 * 60 * 60;
var url = "https://app.example.com/today";
window.location.href = "sendlocalpushmsg://push.send?s=" + seconds + "=msg!" + message + "&!#" + title + "&!#" + url;
}
Lista de comprobación
Ningún bundle contiene USE_EXACT_ALARM, salvo que la app sea de alarma, temporizador o calendario.
SCHEDULE_EXACT_ALARM o ha desaparecido o se ha confirmado que es necesario, con una alternativa cuando el usuario no lo ha concedido.
Los mensajes que dependen de la hora llegan desde tu servidor como push; los avisos sencillos, desde push local.
requirePush está en false y la solicitud de permiso aparece después de que el usuario active los recordatorios.
La app funciona con normalidad cuando se deniegan las notificaciones y ofrece settingsapp:// para arreglarlo más tarde.
El formulario Data safety cubre los identificadores del dispositivo que usa tu proveedor de push; consulta la guía de Data safety.
Preguntas frecuentes
¿Seguirán llegando mis recordatorios sin alarmas exactas?
Sí. Sin alarmas exactas, Android puede agrupar un recordatorio con otras tareas y entregarlo un poco más tarde de lo programado mientras el teléfono está inactivo. Para rachas, avisos y la mayoría de los recordatorios de reservas eso no importa; usa push del servidor cuando la hora dependa de tus datos.
¿POST_NOTIFICATIONS es un permiso restringido que necesita una declaración?
No. Es un permiso de tiempo de ejecución normal en Android 13 y posteriores. Aun así hay que solicitarlo en tiempo de ejecución, y la app debe seguir funcionando si el usuario, o el revisor, lo rechaza.
¿Debería pedir el permiso de notificaciones en el primer inicio?
Puedes, y es lo que hace WebViewGold por defecto, pero la solicitud convierte mejor y causa mejor impresión a los revisores cuando el usuario ya tiene un motivo para decir que sí. Pon requirePush en false y usa registerpush:// en tu pantalla de recordatorios o de onboarding.
Mi app es una app de reservas con vista de calendario. ¿Cumplo los requisitos para USE_EXACT_ALARM?
Probablemente no. Google lo vincula a las apps cuya función principal es una alarma, un temporizador o un calendario con notificaciones de eventos. A un servicio de reservas con una pantalla de agenda le sirven mejor los recordatorios enviados como push desde tu backend.
¿Por qué está el permiso de alarma exacta en mi app?
Normalmente lo declara una dependencia de notificaciones, de programación o un SDK en su propio manifiesto, y se combina con el tuyo al compilar. La pestaña Merged Manifest indica el origen, y tools:node="remove" lo elimina.
Tres formas de llevar tu app a las tiendas
El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.
Hazlo tú mismo
$109 por plataforma, pago único
La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.
Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.