gpt4 book ai didi

ios - 如何在 React Native 应用程序的 iOS 后台运行 socket.io?

转载 作者:IT王子 更新时间:2023-10-29 08:09:33 26 4
gpt4 key购买 nike

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

我在后台使用 react-native-location 进行位置跟踪,但我无法让 socket.io 工作。每当我更改应用程序或关闭屏幕时,该应用程序都会继续跟踪我的位置,但我会失去套接字连接。

有没有办法像位置跟踪一样在后台运行 socket.io ?除此之外,是否有一些 native 代码可以让我在后台保持客户端/服务器连接

我知道有一个 WebSocket alternative但我看不到让它在后台运行的方法。

更新:我仔细检查了我的 Info.plist,它已经为 react-native-location 设置了必要的背景值。 .我不知道这是否重要,但套接字工作和位置跟踪是在同一个组件中完成的。

enter image description here

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>
);
}
});

最佳答案

您无法以“正确的方式”做到这一点。

编辑

来自 Apple 的 official documentation :

Implementing Long-Running Tasks

For tasks that require more execution time to implement, you must request specific permissions to run them in the background without their being suspended. In iOS, only specific app types are allowed to run in the background:

Apps that play audible content to the user while in the background, such as a music player app

Apps that record audio content while in the background

Apps that keep users informed of their location at all times, such as a navigation app

Apps that support Voice over Internet Protocol (VoIP)

Apps that need to download and process new content regularly

Apps that receive regular updates from external accessories

Apps that implement these services must declare the services they support and use system frameworks to implement the relevant aspects of those services. Declaring the services lets the system know which services you use, but in some cases it is the system frameworks that actually prevent your application from being suspended.

这就是说,有一种有效的技术可以让你的套接字保持打开状态:

播放静音并将背景模式设置为音频。检查this article有关此事的更多信息(它有点旧但仍然有效)。这将允许您保持套接字打开以伪造音频应用程序。您的 info.plist 应该更新以允许音频在后台运行。UIBackgroundModes 应设置为 audio(查看 docs 了解更多信息)

关于ios - 如何在 React Native 应用程序的 iOS 后台运行 socket.io?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com