¿Puedo hacer que un sitio web siga funcionando cuando está en espera?

Estoy desarrollando una aplicación web simple que se utilizará para rastrear la posición del GPS. La idea general es que cada par de minutos enviará la ubicación del GPS a un servidor con una solicitud AJAX. Tenga en cuenta que el dispositivo estará conectado a la alimentación de forma permanente.

Idealmente, necesitamos esto para seguir ejecutándose en segundo plano cuando la pantalla está apagada. Realicé una prueba con un Nexus con Lollipop y Chrome y tuve un éxito limitado. Las solicitudes continúan enviándose durante 5 a 10 minutos después de que la pantalla se apaga y luego se detienen.

Curiosamente, todavía parece haber solicitudes ocasionales. Para mis pruebas, estoy haciendo un intervalo de solicitud de 10 segundos, en el mundo real será más como 5-10 minutos. ¿Algún tipo de cola? Si esto es una cosa y puedo descubrir cómo trabajar con él de manera confiable, podría funcionar.

¿Hay alguna manera de que pueda hacer que sigan enviando indefinidamente? ¿Configuraciones en el sistema operativo/navegador, o un navegador diferente (o ambos) tal vez?

Respuestas (1)

HTML5 ServiceWorker parece admitir lo que necesita a través de la función BackgroundSync / PeriodicSync. Sin embargo, dado que ServiceWorker sigue siendo un esfuerzo continuo, no estoy seguro de qué características están implementadas actualmente en Chrome. No pude encontrar buenas demostraciones de esto, solo propuestas: https://github.com/clelland/BackgroundSync/blob/master/explainer.md

Cordova agregó recientemente compatibilidad con la sincronización en segundo plano: https://github.com/MobileChromeApps/cordova-plugin-service-worker-background-sync , pero esto requiere que cree una aplicación de Android.

Sin el soporte explícito del navegador para tal función, todos sus esfuerzos ad hoc serán una pérdida de tiempo, ya que se garantizará que su código funcione solo cuando el navegador esté en primer plano. De lo contrario, el sistema operativo puede eliminar el navegador y no podrá continuar ejecutando el código de su página. La función de sincronización periódica proporcionada por ServiceWorker implica que el navegador programará trabajos periódicos utilizando los servicios de Android correspondientes, como lo haría en una aplicación de Java.

¡Gracias! Echaré un vistazo a ese primer enlace en los próximos días y veré si puedo armar una prueba de concepto rápida para probar. De lo contrario, Cordova también podría ser una opción: activar una aplicación que no es más que un iframe que apunta al sitio web real podría hacer lo que necesito sin gastar el presupuesto. Informará de nuevo.