es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede una PWA programar notificaciones cuando está cerrada?

Estoy desarrollando una PWA de lista de tareas pendientes que debe mostrar las tareas del día todos los días a las 8:00 am, incluso cuando la aplicación está cerrada (similar a un despertador).

¿Hay alguna manera de lograr esto con las PWAs? (Dirigido principalmente a Chrome/Android)

Hasta ahora, en mi service worker tengo (simplificado)


self.addEventListener("message", (event) => { // Flujo de trabajo: la aplicación envía un mensaje solicitando que se establezca el temporizador. const prom = new Promise((resolveIt) => self.setTimeout(() => showAlarmAndResolve(resolveIt, event.data), '<timeout en="" ms="">') ); // le indica al service worker que permanezca activo hasta que se resuelva la promesa event.waitUntil(prom); }); async function showAlarmAndResolve(resolveIt, text) { const options = { body: text, tag: "todo-alert", }; await self.registration.showNotification( "Tus tareas para hoy", options ); resolveIt(); // permite que el service worker se termine }

Sin el event.waitUntil, la notificación no se muestra cuando cierro la aplicación en mi teléfono (o cierro la pestaña del navegador), pero con él, sí se muestra.
Sin embargo, mantener vivo el service worker durante medio día de alguna manera parece ser una mala idea y, además, leí (aquí: https://stackoverflow.com/questions/58244539/best-practice-for-keeping-timer-running-in-pwa) que en Android el service worker podría terminarse de todos modos después de ~20 minutos.

¿Cómo puedo implementar una funcionalidad de despertador como esta?

Algunas preguntas (más antiguas) realmente no brindan mucha ayuda / esperanza…
https://stackoverflow.com/questions/36944167/background-events-in-progressive-web-apps-building-an-alarm-clock-app
https://stackoverflow.com/questions/58240785/is-it-possible-to-set-the-alarm-by-pwa-building-a-timer-alarm-clock-app

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible lograr esta funcionalidad con las PWAs, utilizando la API de Background Fetch (actualmente solo compatible con Chrome y Edge) o programando una tarea con la API experimental Periodic Background Sync.

    Con la API de Background Fetch, puedes configurar una solicitud de búsqueda en segundo plano para que se ejecute en un momento específico (en este caso, a las 8:00 a.m.) y mostrar la notificación cuando la búsqueda sea exitosa. Esto no mantendrá tu service worker en funcionamiento todo el tiempo, ya que la solicitud de búsqueda finalizará una vez que se complete.

    Con la API de Periodic Background Sync, puedes programar una tarea para que se ejecute periódicamente (nuevamente, a las 8:00 a.m. en este caso) y mostrar la notificación cuando se ejecute la tarea. Esta API aún no es ampliamente compatible y es experimental, por lo que puede que no sea la solución más confiable en este momento.

    Otra opción sería utilizar una notificación push para activar la visualización de las tareas del día. Esto requeriría que el usuario permita las notificaciones push para la PWA y que cuentes con un servicio de backend para enviar la notificación push en el momento deseado.

    En general, aunque existen posibilidades para lograr esta funcionalidad, puede que se requieran algunos compromisos o soluciones alternativas en este momento. Es importante tener en cuenta las limitaciones de las PWAs y ajustar las expectativas y la funcionalidad en consecuencia.

Comments are closed.