GPS tracker React native expo
Делаю приложение для диспетчерской грузоперевозок на ReactNative expo, мне необходимо отправлять на сервер местоположение груза(телефона) даже если приложение убито, нечто подобное тому как нативно я бы сделал подписчика на события изменения местоположения и он работал как сервис, который дергался бы системой тогда, когда решит сама система. Я создал такс в app.js
const LOCATION_TASK_NAME = 'background-location-task';
TaskManager.defineTask(LOCATION_TASK_NAME, ({ data: { locations }, error }) => {
if (error) {
return;
}
sendDataToServer(locations);
});
Затем после авторизации в приложении на одном из экраном сначала получаю разрешение на foreground. как написано в мане, нужно сначала получить разрешение на доступ к местоположение при открытом приложении
let { status } = await Location.requestForegroundPermissionsAsync();
Затем вешаю слушателя на изменение местоположения с записью объекта в переменную, а на сервер отправляются данные в заданные промежутки времени через таймер
let foregroundLocation = await Location.watchPositionAsync({accuracy:Location.Accuracy.High, distanceInterval: 1, timeInterval: 5000}, (loc) => locationGPS = loc)
Затем показываю модалку с предложением и разъяснением для чего это нужно получить доступ к местоположению в любом режиме:
let { statusBackground } = await Location.requestBackgroundPermissionsAsync();
ну и наконец стартую таску
let backgroundLocations = await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {accuracy:Location.Accuracy.High, distanceInterval: 1, timeInterval: 5000})
После чего собираю АПК, открываю, вижу что при активном приложении всё работает корректно. Убиваю приложение и физически перемещаюсь(пробовал также Fake GPS) и не вижу никаких запросов на указанный в таске сервер.