我正在iPhone上开发一个需要互联网连接的网络应用程序。但是,一旦我登录到服务器并让iPhone闲置一段时间,iPhone就会进入睡眠模式并断开我的网络连接(它会将我注销)。
如果我在iPhone上运行相同的应用程序,而iPhone通过USB线连接到PC,它永远不会失去网络连接。
在info.plist文件中,我添加了这两个标志,但似乎没有任何效果。
UIRequiresPersistentWifi - >真正 SBUsesNetwork - 整数 - > 3
我错过了什么吗?您能告诉我如何确保网络连接在应用程序的整个生命周期中都是持久的吗?
答案 0 :(得分:4)
在您的应用程序委托(“appDelegate”)中,使用+initialize
方法禁用空闲计时器:
myApp.idleTimerDisabled = YES;
请注意,这会让您的iPhone在应用程序打开时不会睡觉。这可能会导致电池寿命问题。
另一种选择可能是设置一个后台线程,以便在定时的基础上打开一个小CFStream
。
答案 1 :(得分:1)
你在这里“登出我”是什么意思?在网络级别,没有“登录”(*)。只有数据包。你发送它们或不发送它们。那么您的服务器进程是否会对数据包或消息定期到达有所期望?如果是,那么你必须发送它们,这意味着你不能闲置(idleTimerDisabled = YES
)。如果您控制服务器,最好不要对与它交谈的频率要求较低。然而,这一切都发生在网络层之上。
UIRequiresPersistentWifi
表示即使您没有通话,Wifi收音机也会在您运行应用程序时保持打开状态。这对于接收数据很重要。否则你会掉网,其他人在大约30分钟后就无法与你交谈。它应该在Info.plist中设置,但这肯定在您的应用程序包中。如果不是,您的应用程序将无法启动,因此这不是问题。
(*)细胞网络确实具有登录的概念,但这不是造成问题的原因。