Creé una pequeña aplicación de iOS en React Native que realiza un seguimiento de la ubicación, enviando la latitud / longitud con regularidad a un servidor de elección del usuario. Sin embargo, esto solo funciona cuando la aplicación está en primer plano. ¿Cómo puedo ejecutar esta tarea en segundo plano cuando el usuario está en otras aplicaciones?
javascript
ios
react-native
liamzebedee
fuente
fuente
Respuestas:
Actualmente, desafortunadamente, no hay soporte para tareas en segundo plano de ningún tipo. La función a la que se refiere sería un temporizador de fondo. Tal temporizador es el problema de este producto (una solicitud de función) para reaccionar nativo, puede votarlo para mostrar una mayor demanda de esta función.
EDITAR 12/2016: Todavía no hay una opción real. Tiene la API de Headless JS desde RN 0.33, pero es solo para Android. Además, su aplicación se bloqueará si se ejecuta en primer plano, por lo que debe tener cuidado al usarla. Gracias a @Feng por señalar eso.
fuente
Y ahora está react-native-background-task, que es una única API tanto para Android como para iOS.
fuente
El ecosistema React Native se ha movido a un ritmo vertiginoso durante los últimos meses, y han aparecido algunos complementos para abordar el dolor de no poder ejecutar código en segundo plano.
https://github.com/transistorsoft/react-native-background-fetch : despierta durante 30 segundos periódicamente para ejecutar código JS arbitrario. No apto para geolocalización de alta resolución, ya que el tiempo entre despertares será de 15 minutos o más.
https://github.com/transistorsoft/react-native-background-geolocation : un ajuste mejor para esta situación, dirigido específicamente a la geolocalización en segundo plano.
fuente
Estas bibliotecas pueden ayudarlo a lograr la funcionalidad deseada:
Alternativamente, puede usar Headless JS desde react-native. Pero solo está disponible para Android.
fuente
Yo uso esto y parece que funciona: https://github.com/ocetnik/react-native-background-timer
import BackgroundTimer from 'react-native-background-timer'; // Start a timer that runs continuous after X milliseconds const intervalId = BackgroundTimer.setInterval(() => { // this will be executed every 200 ms // even when app is the background console.log('tic'); }, 200); // Cancel the timer when you are done with it BackgroundTimer.clearInterval(intervalId); // Start a timer that runs once after X milliseconds const timeoutId = BackgroundTimer.setTimeout(() => { // this will be executed once after 10 seconds // even when app is the background console.log('tac'); }, 10000); // Cancel the timeout if necessary BackgroundTimer.clearTimeout(timeoutId);
fuente