Flutter - 如何在后台实时、定期向后端发送位置更新。 (安卓和IOS均可)

问题描述 投票:0回答:1

我想定期在后台实时向我们的后端服务发送用户的位置更新(即使应用程序未运行/终止)。

目前我们正在通过应用程序和后端之间的网络套接字发送位置更新。

问题是网络套接字在以下情况下断开连接(应用程序终止、电池优化或应用程序在后台且操作系统需要更多内存)。

如何保持网络套接字连接(也许每天 12 小时)?

在这种情况下使用网络套接字是一种不好的做法吗?

实时发送位置更新的好替代方案是什么? ( 请记住,后端使用网络套接字向应用程序发送数据(但不频繁,我们可以使用推送通知代替)。 )。

我正在使用

geolocator
包来获取用户的当前位置。以及
socket_io_client
包来连接到网络套接字。

我们的目标是Android 和IOS

当前实施情况

// imports ...

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(
        socket: Geolocator.getPositionStream(),
        positionStream:  IO.io(kHost, <String, dynamic>{ 'transports': ['websocket'] }),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({this.socket, this.positionStream});

  final Stream<Position> positionStream;
  final IO.Socket socket;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  void listenToPosStream() {
    widget.positionStream.listen((Position position) {
      if (position != null)
        updatePosition(latitude: position.latitude, longitude: position.longitude);
    });
  }

  void updatePosition({@required latitude, @required longitude}) {
    widget.socket.emit(
        'setPosition',
        {'latitude': latitude, 'longitude': longitude},
    );
  }

  @override
  void initState() {

    listenToPosStream();

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // rest of code ...
  }
}
flutter dart websocket geolocation background-process
1个回答
0
投票

我开发了用于在后台跟踪位置的代码,即使应用程序被杀死,它适用于 Android 平台。

您可以查看此媒体博客,即使在向应用程序请求权限后也可以运行代码。

https://medium.com/@jaypanchal4498/fetching-location-even-after-app-killed-is-possible-using-flutter-this-is-how-i-did-it-ea9ecb738bdd

在这里你可以找到我所做的代码的Github链接,你可以运行代码并告诉我它是否正常工作。目前仅适用于 Android。

对于 Web 套接字,您可以创建一个新的 api 并让您始终连接到服务器,这样您就不必从应用程序端管理它,因为您可以从应用程序端服务调用套接字的 api 并将数据发送到套接字.

谢谢...

© www.soinside.com 2019 - 2024. All rights reserved.