如何在iOS的背景中运行一个React Native应用程序中的socket.io?

我在iOS React Native(v0.20)应用程序中使用socket.io.该应用程序跟踪我的位置,当我的位置更改时,会向服务器发送一条消息.如果套接字连接丢失,服务器发送电子邮件通知我.

我的位置跟踪工作在后台与react-native-location,但我不能让socket.io工作.当我更改应用程序或关闭屏幕时,应用程序会继续跟踪我的位置,但是我丢失了套接字连接.

有没有办法在后台运行socket.io,如位置跟踪?那么那里有一些本机代码,将允许我在后台维护客户端/服务器连接?

我知道有一个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对它允许的进程种类有相当的限制.

在socket.io客户端issue tracker上似乎有一些讨论.

如果将背景模式设置为音频,似乎有人将插座连接保持活动状态.因人而异

确保在Info.plist文件的UIBackgroundModes部分中设置正确的值. How to do this in XCode

以上是来客网为你收集整理的如何在iOS的背景中运行一个React Native应用程序中的socket.io?全部内容,希望文章能够帮你解决如何在iOS的背景中运行一个React Native应用程序中的socket.io?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。