Я использую socket.io
в iOS React Native(v0.20) app
. Приложение отслеживает мое местоположение, и когда моя позиция изменяется, он отправляет сообщение на сервер. Если соединение сокета потеряно, сервер отправляет электронное письмо, чтобы уведомить меня.
У меня есть отслеживание местоположения, работающее в фоновом режиме с react-native-location, но я не могу заставить socket.io
работать. Когда я меняю приложения или выключаю экран, приложение отслеживает мое местоположение, но я теряю соединение сокета.
Есть ли способ запустить socket.io
в фоновом режиме, например, отслеживание местоположения? Коротко это есть некоторый собственный код, который позволит мне поддерживать client/server connection
в фоновом режиме?
Я знаю, что есть альтернатива WebSocket, но я не вижу способа заставить его работать в фоновом режиме.
UPDATE:
Я удвоил проверил мой 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>
);
}
});