Ich habe in React Native eine kleine iOS-App erstellt , die die Standortverfolgung durchführt und die Lat / Lng regelmäßig an einen Server des Benutzers sendet. Dies funktioniert jedoch nur, wenn die App im Vordergrund steht. Wie kann ich diese Aufgabe im Hintergrund ausführen, wenn sich der Benutzer in anderen Apps befindet?
javascript
ios
react-native
Liamzebedee
quelle
quelle
Antworten:
Derzeit gibt es leider keine Unterstützung für Hintergrundaufgaben jeglicher Art. Die Funktion, auf die Sie sich beziehen, ist ein Hintergrund-Timer. Solch ein Timer ist dieser Produktschmerz (eine Funktionsanforderung), um native zu reagieren. Sie können ihn verbessern, um eine erhöhte Nachfrage nach dieser Funktion anzuzeigen.
EDIT 12/2016: Es gibt noch keine echte Option. Sie haben die Headless JS API seit RN 0.33, aber es ist nur für Android. Außerdem stürzt Ihre App ab, wenn diese im Vordergrund ausgeführt wird. Sie müssen also vorsichtig sein, wenn Sie sie verwenden. Vielen Dank an @Feng für den Hinweis.
quelle
Und jetzt gibt es eine reaktive native Hintergrundaufgabe, die eine einzige API für Android und iOS ist.
quelle
Das React Native-Ökosystem hat sich in den letzten Monaten rasant entwickelt, und einige Plugins sind aufgetaucht, um den Schmerz zu beheben, dass Code nicht im Hintergrund ausgeführt werden kann.
https://github.com/transistorsoft/react-native-background-fetch - Wachen Sie regelmäßig 30 Sekunden lang auf, um beliebigen JS-Code auszuführen. Nicht für hochauflösende Geolokalisierung geeignet, da die Zeit zwischen dem Aufwecken 15 Minuten oder mehr beträgt.
https://github.com/transistorsoft/react-native-background-geolocation - Passt besser zu dieser Situation und ist speziell auf die Geolokalisierung im Hintergrund ausgerichtet.
quelle
Diese Bibliotheken können Ihnen helfen, die gewünschte Funktionalität zu erreichen:
Alternativ können Sie Headless JS von React-Native verwenden. Aber es ist nur für Android verfügbar.
quelle
Ich benutze dies und es scheint zu funktionieren: 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);
quelle