Ahm*_*ah. 8 geolocation background-process websocket dart flutter
我想定期在后台实时向我们的后端服务发送用户的位置更新(即使应用程序未运行/终止)。
目前,我们正在通过应用程序和后端之间的网络套接字发送位置更新。
问题是网络套接字在以下情况下断开连接(应用程序终止、电池优化或应用程序在后台且操作系统需要更多内存)。
如何保持网络套接字连接(也许每天 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 ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |