iOS应用程序如何在后台无限期地保持TCP连接活动?

yeh*_*nan 43 iphone background ios

一个iPhone应用程序,通过TCP连接到远程服务器.使用场景是:

  1. app(用户)将数据发送到服务器,服务器响应数据.
  2. 服务器可能会在没有任何操作的情况下向应用程

假设如果应用程序30分钟内没有向服务器发送数据,服务器将关闭连接.即使用户什么也不做,我想让连接保持120分钟.

案例1:如果应用程序在前台,我可以使用计时器向服务器发送一些无用数据.没问题.

案例2:如果用户按下主页并且应用程序转到后台,我该怎么办?我不想表现出警告或某些事情来打断用户(他不在或正在玩游戏).我只想让连接保持更长时间,当用户回到应用程序时,他发现连接仍然存在并且对此感到满意.

我已阅读有关iphone API的后台执行,多任务处理和本地通知的文档.我不确定能否达到案例2.

仅使用合法的API,不进行越狱.

Nic*_*ick 24

Tapbot通过提示用户始终运行静音背景音轨来解决Pastebot的这个问题.

请注意,在使用黑客喜欢使用的背景音乐或VoIP的API,以保持非音频或运行(通过上述文章中所描述的"处理方法"为证),VOIP应用这些技术,从而涉足苹果皱眉在提交点风险拒绝.

不幸的是,没有合法的API可以在后台保持连接活动.也许他们会在未来的iOS更新中引入一个,但您可以考虑提交功能请求来表达对它的支持.


Nic*_*ver 15

参阅 Apple的iOS应用程序编程指南中的实现VoIP应用程序.这不是经过测试的解决方案,但我认为它可以用来实现您的要求.

实施VoIP应用程序

互联网协议语音(VoIP)应用程序允许用户使用互联网连接而不是设备的蜂窝服务拨打电话.这样的应用程序需要维持与其关联服务的持久网络连接,以便它可以接收传入呼叫和其他相关数据.系统不是让VoIP应用程序始终保持唤醒状态,而是允许它们被暂停,并提供监视其套接字的工具. 当检测到传入流量时,系统唤醒VoIP应用程序并将其套接字的控制权返回给它.

我不确定您是否正在开发VoIP应用程序,但您将能够访问套接字并对传入的数据包做出反应.引用后的文本指的是[setKeepAliveTimeout:handler:][2]允许您设置一个代码块,允许您保持(您的VoIP)连接.但最短调度时间是10分钟.

实现VoIP应用程序是关于安装Keep-Alive Handler的一个段落.我很好奇这是否会有所帮助.如果这解决了您的问题,请给我们一个说明.


小智 5

1.用这样的VOIP属性创建你的套接字

[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

[outputStream  setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
Run Code Online (Sandbox Code Playgroud)

2.在app.plist中添加所需的后台模式作为"App提供IP语音服务"

如果您的应用程序处于后台模式,则voip socket将无法关闭.使用此套接字和uilocal通知,您可以获得.

"如果您的应用程序不是原始的voip应用程序商店将拒绝"