Обновить местоположение пользователя на сервере, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 13 декабря 2018

Мобильная технология: Реагируйте на собственное отслеживание в реальном времени, используя: Socket.io

У меня есть приложение служб такси, в котором я постоянно обновляю местоположение водителя до сервера.Работает нормально, когда приложение на переднем плане.Теперь я хочу обновить расположение драйвера на сервере с помощью сокета любым другим способом, когда приложение находится в фоновом режиме.Мне нужно решение, которое работает как для IOS / Android.

Пожалуйста, поделитесь своими предложениями

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

ОК, здесь не такой ответ, более подробное объяснение ситуации, в которой вы находитесь.

Я уже был в такой же ситуации, и есть некоторые вещи, которые вы можете сделать, чтобы протестировать свое приложение React Native.в том же сценарии, что и в «режиме бездействия».Android представил это как способ ограничения использования процессора и батареи, пока телефон находится в режиме ожидания.Сам режим ожидания достигается, если телефон неподвижен и / или не взаимодействовал с пользователем в течение определенного времени.

Во-первых, с вашим текущим решением - вы хотите протестировать свое приложение в режиме ожидания / режима ожидания.Это можно сделать, выполнив следующие действия:

Тестирование приложения с помощью Doze

Вы можете проверить режим Doze, выполнив следующие действия:

https://developer.android.com/training/monitoring-device-state/doze-standby#testing_doze

Настройте аппаратное устройство или виртуальное устройство на системный образ Android 6.0 (уровень API 23) или выше.

  • Подключите устройство к компьютеру разработчика и установите приложение.
  • Запустите приложение и оставьте его активным.
  • Переведите систему в режим ожидания, введя следующую команду: $ adb shell dumpsys deviceidle force-idle

  • Когдаготово, выйдите из режима ожидания, введя следующую команду:

$ adb shell dumpsys deviceidle unforce

  • Повторно активируйте устройство, выполнив следующую команду:

$ adb shell dumpsys battery reset

  • Наблюдайте за поведением вашего приложения после повторной активации устройства.Убедитесь, что приложение корректно восстанавливается, когда устройство выходит из Doze.

Это даст вам сценарий тестирования для тестирования на Android.

Проблема:

Android дает приложениям все меньше и меньше контроля над подключением телефонов в фоновом режиме.Все сетевое соединение прекратится и откроется только в «Окне обслуживания».Состояние Android:

Ограничение Doze на доступ к сети также может повлиять на ваше приложение, особенно если оно использует сообщения в реальном времени, такие как тикки или уведомления.Если вашему приложению требуется постоянное подключение к сети для получения сообщений, вам следует использовать Firebase Cloud Messaging (FCM), если это возможно.

Проблема:

Проблема не в том, чтоприложение в фоновом режиме, ваша проблема будет использовать сеть в фоновом режиме.Например, безголовый JS будет запускаться - запускаемые задачи будут выполняться, НО он может не иметь возможности делать какие-либо запросы для сети.

Возможные решения:

Использование аварийных сигналов

  • Если вам нужно установить аварийные сигналы, которые срабатывают в режиме ожидания, используйте setAndAllowWhileIdle() или setExactAndAllowWhileIdle().

  • Сигналы тревоги, установленные с помощью setAlarmClock(), продолжают работать нормально - система выходит из режима ожидания незадолго до срабатывания этих сигналов тревоги.

Помещение вашего приложения вБелый список (перейдите по ссылке выше для приемлемых случаев использования).

iOS:

Для React Native, я использовал это:

https://github.com/mauron85/react-native-background-geolocation

Это также работает для Android, однако режим Doze (в моемслучай) не будет отправлять сетевые запросы.

0 голосов
/ 14 декабря 2018

я не уверен насчет использования сокета, но вы можете попробовать сохранить ваши данные в базе данных sqlite, а затем с помощью response-native-background-task, когда ваше приложение работает в фоновом режиме. https://github.com/jamesisaac/react-native-background-task

использовать так:

BackgroundTask.define(() => {
  //API CALL
  BackgroundTask.finish()
})

componentDidMount() {
  BackgroundTask.schedule();
}

обратите внимание, что для вызова на iOS

требуется по крайней мере 15 минут
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...