【问题标题】:Update user location to server when application is in background应用程序在后台时将用户位置更新到服务器
【发布时间】:2018-12-13 06:35:43
【问题描述】:

移动技术:React Native 实时跟踪使用:Socket.io

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

请分享您的建议

【问题讨论】:

  • 您好,欢迎您。您应该为您的问题添加更多细节;你试过什么?你能展示你的代码吗?
  • 感谢@Paulw11,对于后台我没有尝试过任何东西,我知道有许多后台 GPS 跟踪服务可用,但没有得到任何解决方案通过后台在 react native 中发出套接字事件
  • 你正在前台做某事。除了你可能每次都需要建立套接字连接之外,背景基本相同。
  • 可能用户在谈论背景限制,例如 Android Nougat 及更高版本中的打盹模式@Paulw11

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


【解决方案1】:

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

像这样使用它:

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

componentDidMount() {
  BackgroundTask.schedule();
}

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

【讨论】:

    【解决方案2】:

    好的,这里没有这样的答案,更多的是对你所处情况的解释。

    我以前也遇到过同样的情况,您可以做一些事情来在与“打盹模式”相同的场景中测试您的 React Native 应用程序。 Android 引入了此功能,以在手机处于打盹模式时限制 CPU 和电池使用量。如果手机静止和/或在设定的时间内没有与用户进行任何交互,则进入打盹模式本身。

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

    使用 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 让应用在后台对手机连接的控制越来越少。它将一起停止联网,仅在“维护窗口”中打开。安卓状态:

    对网络访问的 Doze 限制也可能会影响您的应用,尤其是当应用依赖于实时消息(如痒痒或通知)时。如果您的应用需要持久连接到网络来接收消息,则应尽可能使用 Firebase Cloud Messaging (FCM)。

    问题:

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

    可能的解决方案:

    使用警报

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

    • 使用setAlarmClock()设置的警报继续正常触发 - 系统在警报触发前不久退出打盹。

    将您的应用加入白名单(访问上面的链接了解可接受的用例)。

    iOS:

    对于 React Native,我使用了这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2016-07-08
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 2019-11-08
      • 2014-02-26
      相关资源
      最近更新 更多