Zbudowałem małą aplikację na iOS w React Native, która śledzi lokalizację, regularnie wysyłając lat / lng na serwer wybrany przez użytkownika. Jednak działa to tylko wtedy, gdy aplikacja jest na pierwszym planie. Jak mogę uruchomić to zadanie w tle, gdy użytkownik jest w innych aplikacjach?
javascript
ios
react-native
liamzebedee
źródło
źródło
Odpowiedzi:
Obecnie niestety nie ma żadnego wsparcia dla jakichkolwiek zadań w tle. Funkcja, do której się odnosisz, to licznik czasu w tle. Taki licznik czasu to ból produktu (prośba o funkcję) dla reagowania natywnego, możesz go zagłosować, aby pokazać zwiększone zapotrzebowanie na tę funkcję.
EDYCJA 12/2016: Nadal nie ma prawdziwej opcji. Masz Headless JS API od RN 0.33, ale jest to tylko dla Androida. Również Twoja aplikacja ulegnie awarii, jeśli działa to na pierwszym planie, więc musisz być ostrożny z jej użyciem. Dzięki @Feng za wskazanie tego.
źródło
A teraz istnieje reakcja-natywne-zadanie w tle, które jest pojedynczym interfejsem API zarówno dla Androida, jak i iOS.
źródło
Ekosystem React Native poruszał się w zawrotnym tempie w ciągu ostatnich kilku miesięcy, a kilka wtyczek pojawiło się, aby rozwiązać problem braku możliwości uruchomienia kodu w tle.
https://github.com/transistorsoft/react-native-background-fetch - Obudź się okresowo na 30 sekund, aby uruchomić dowolny kod JS. Nie nadaje się do geolokalizacji o wysokiej rozdzielczości, ponieważ czas między wybudzeniami będzie wynosić 15 minut lub więcej.
https://github.com/transistorsoft/react-native-background-geolocation - lepsze dopasowanie do tej sytuacji, ukierunkowane szczególnie na geolokalizację w tle.
źródło
Te biblioteki mogą pomóc w osiągnięciu pożądanej funkcjonalności:
Alternatywnie, możesz użyć Headless JS z pliku React -Native. Ale jest dostępny tylko dla Androida.
źródło
Używam tego i wydaje się, że działa: 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);
źródło