【发布时间】:2016-05-29 06:23:28
【问题描述】:
我在iOS React Native(v0.20) app 中使用socket.io。该应用程序跟踪我的位置,当我的位置发生变化时,它会向服务器发出一条消息。如果套接字连接丢失,服务器会发送一封电子邮件通知我。
我在后台使用react-native-location 进行位置跟踪,但我无法让socket.io 工作。每当我更改应用程序或关闭屏幕时,应用程序会一直跟踪我的位置,但我会失去套接字连接。
有没有办法像位置跟踪一样在后台运行socket.io?除此之外,是否有一些本机代码可以让我在后台维护client/server connection?
我知道有一个WebSocket alternative,但我看不到让它在后台运行的方法。
更新:
我仔细检查了我的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>
);
}
});
【问题讨论】:
-
在 iOS 和 Android 上的行为是否相似,还是仅限 iOS 的问题?
-
我没试过安卓。这是我的第一个 React Native 应用程序,我想专注于为 iOS 构建,以便可以在手机上使用它。
-
您找到解决方案了吗?
-
@ChrisAndersson 不,我没有。我能找到的最好的建议是构建一个包,它将我需要运行的 javascript 与可以运行它的本机代码连接起来。我实际上还不知道该怎么做。
-
@EasilyBaffled 我发现了这个,但还没有让它工作。 gist.github.com/liamzebedee/67e1b2c53c6c5edcf8ec
标签: ios reactjs websocket socket.io react-native