我正在一个 iOS React Native(v0.20) app
中使用 socket.io
。该应用程序跟踪我的位置,当我的位置发生变化时,它会向服务器发送消息。如果套接字连接丢失,则服务器会发送电子邮件进行通知。
我使用 react-native-location 在后台实现了位置跟踪,但我无法使 socket.io
正常工作。每当我更改应用程序或关闭屏幕时,应用程序仍然跟踪我的位置,但我会失去套接字连接。
是否有一种方法可以像位置跟踪一样在后台运行 socket.io
?除此之外,是否有一些本地代码可以让我在后台维护 客户端/服务器连接
?
我知道有一个WebSocket替代方案,但我看不到任何使其在后台运行的方法。
更新:
我已经双重检查了我的 Info.plist
,对于 react-native-location,它已经设置了必要的后台值。我不知道是否重要,但套接字工作和位置跟踪都是在同一个组件中完成的。
LocationComponent.js
window.navigator.userAgent = 'react-native';
const io = require('socket.io-client/socket.io');
const socket = io(url, {jsonp: false});
import React, { Text, View, DeviceEventEmitter } from 'react-native';
import { RNLocation } from 'NativeModules';
export default GeolocationExample = React.createClass({
componentDidMount: function() {
RNLocation.requestAlwaysAuthorization();
RNLocation.startUpdatingLocation();
RNLocation.setDistanceFilter(3.0);
DeviceEventEmitter.addListener('locationUpdated', locationObject => {
this.props.newPosition({ longitude: locationObject.coords.longitude, latitude: locationObject.coords.latitude });
});
},
render: function() {
const { lastPosition, distance } = this.props;
socket.emit('newPos', { longitude: lastPosition.longitude, latitude: lastPosition.latitude, distance, time: Date() });
return (
<View>
<Text> {distance} </Text>
</View>
);
}
});