Можете ли вы отслеживать фоновую геолокацию с помощью React Native? - PullRequest
0 голосов
/ 21 февраля 2019

Проблема

Я хотел бы иметь возможность отслеживать местоположение пользователей, даже если приложение больше не находится на переднем плане (например, пользователь переключился на другое приложение или переключился на домашний экран и заблокировал ихтелефон).

В этом случае пользователь будет отслеживать пробег.Они могут открыть приложение и нажать «Пуск» в начале своего запуска, а затем переключить или свернуть приложение (нажать кнопку «Домой») и заблокировать экран.В конце пробега они могли вывести приложение на передний план и нажать «Стоп», и приложение сообщит им пройденное расстояние во время пробега.

Вопрос

Возможно ли отслеживание фоновой геолокации наи в iOS, и в Android используется чисто реагирующий нативный язык?

Реагирующий нативный документ по геолокации (https://facebook.github.io/react-native/docs/geolocation) не очень ясен или не детализирован. Приведенная выше документальная ссылка не дает справиться о фоновом геолокации в iOS (без полной ясности)) но не упоминает Android.

Было бы лучше, если бы я использовал Expo?

Ответы [ 4 ]

0 голосов
/ 09 июля 2019

ОБНОВЛЕНИЕ 2019 EXPO 33.0.0:

Экспо сначала устарело для SDK 32.0.0, чтобы соответствовать рекомендациям магазина приложений, но затем снова открыло его в SDK 33.0.0 .

С тех пор благодаря им стало очень легко реализовывать фоновое местоположение.Используйте этот фрагмент кода, который я использовал для фоновой геолокации.

import React from 'react';
import { Text, TouchableOpacity } from 'react-native';
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';

const LOCATION_TASK_NAME = 'background-location-task';

export default class Component extends React.Component {
  onPress = async () => {
    await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
      accuracy: Location.Accuracy.Balanced,
      timeInterval: 5000,
    });
  };

  render() {
    return (
      <TouchableOpacity onPress={this.onPress} style={{marginTop: 100}}>
        <Text>Enable background location</Text>
      </TouchableOpacity>
    );
  }
}

TaskManager.defineTask(LOCATION_TASK_NAME, ({ data, error }) => {
  if (error) {
    alert(error)
    // Error occurred - check `error.message` for more details.
    return;
  }
  if (data) {
    const { locations } = data; 
    alert(JSON.stringify(locations); //will show you the location object
    //lat is locations[0].coords.latitude & long is locations[0].coords.longitude
    // do something with the locations captured in the background, possibly post to your server with axios or fetch API 
  }
});

Код работает как брелок.Стоит отметить, что вы не можете использовать геолокацию в приложении Expo .Однако вы можете использовать в своей автономной сборке .Следовательно, если вы хотите использовать фоновую геолокацию, вы должны использовать этот код, а затем выполнить expo build:ios и загрузить его в магазин приложений, чтобы иметь возможность получить фоновое местоположение пользователя.

Кроме того, обратите внимание, что необходимо включить

"UIBackgroundModes":[
          "location",
          "fetch"
        ]

в раздел info.plist вашего файла app.json.

0 голосов
/ 21 февраля 2019

Экспо команда выпустила новую функцию в SDK 32, которая позволяет отслеживать в фоновом режиме местоположение.

https://expo.canny.io/feature-requests/p/background-location-tracking

0 голосов
/ 08 июля 2019

Webkit в настоящее время оценивает решение только для Javascript.Вы можете добавить свой голос здесь

Полностью документированный пример проверки концепции см. Brotkrumen .

0 голосов
/ 21 февраля 2019

Да возможно, но без использования Expo, я видел два модуля:

Это коммерческий, вам нужно купить лицензию https://github.com/transistorsoft/react-native-background-geolocation

Иэто https://github.com/mauron85/react-native-background-geolocation

...