当应用程序处于后台时,将用户位置更新到服务器

时间:2018-12-13 06:35:43

标签: android ios react-native socket.io geolocation

移动技术:React native 使用Socket.io进行实时跟踪

我有出租车服务应用程序,在该应用程序中我不断将驾驶员的位置更新到服务器。当应用程序是前台时,它工作正常。现在,当应用程序在后台运行时,我想以任何其他方式使用套接字将驱动程序的位置更新到服务器。我需要适用于ios / android的解决方案。

请分享您的建议

2 个答案:

答案 0 :(得分:1)

我不确定是否要使用套接字,但是可以尝试将数据保存在sqlite数据库中,然后在应用程序处于后台时使用react-native-background-task https://github.com/jamesisaac/react-native-background-task

像这样使用它:

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

componentDidMount() {
  BackgroundTask.schedule();
}

请注意,在iOS上调用它需要ATLEAST 15分钟

答案 1 :(得分:0)

好的,这里没有这样的答案,更多地说明了您所处的状况。

我以前也处于相同的情况,在与“打ze模式”相同的场景中,您可以做一些事情来测试您的React Native应用程序。 Android引入了这种方法,以限制手机处于打ze模式时的CPU和电池使用量。如果电话静止不动和/或在设定的时间内未与用户进行任何交互,则进入打ze模式本身。

首先,使用当前的解决方案-您想在待机/打ze模式下测试您的应用。您可以通过执行以下操作来实现:

使用Doze测试应用

您可以按照以下步骤测试打ze模式:

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状态:

  

对网络访问的“打ze睡”限制也可能会影响您的应用程序,特别是如果该应用程序依赖实时消息(例如挠痒痒或通知)。如果您的应用需要与网络的持久连接才能接收消息,则应尽可能使用Firebase Cloud Messaging(FCM)。

问题:

问题不在后台运行您的应用,您的问题将在后台使用网络。例如,无头JS将运行-可运行的任务将运行,但它可能无法发出任何网络请求。

可能的解决方案:

使用警报

  • 如果您需要设置在打ze睡时触发的警报,请使用setAndAllowWhileIdle()setExactAndAllowWhileIdle()

  • 设置为setAlarmClock()的警报继续正常触发-在这些警报触发之前,系统会立即退出Doze。

将您的应用放入白名单(请访问上面的链接以获取可接受的用例)。

iOS:

对于React Native,我使用了它:

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

这也适用于Android,但是“打mode”模式(在我的情况下)不会发送网络请求。