setKeepAliveTimeout iOS行为在300秒内超过15次唤醒

我正在编写iOS 5上的VOIP应用程序,我正在尝试了解实际的通信如何在后台保持活跃状态​​。

我知道,每个时间量都可以获得最大的唤醒次数。 我的问题是,我的套接字连接收到太多的唤醒消息,因为该应用程序终止与崩溃消息:

在300秒内超过15次醒来

我真的不明白的是,如果每个时间段内可以接收的数据量有限制,那么sockets应该如何能够不断地发送和接收数据(为了VOIP的需要)呢?

让我们说,套接字正在接收语音数据,用于在后台进行的语音对话。 这不是说声音数据应该通过套接字连接吗? 如果是这样的话,如果每个时间段的套接字可以有活动的限制,它又怎么能起作用呢?

后台(iOS 4.0+)的VOIP应用程序行为:

  • 有一个保持打开状态的单个套接字,标记为Voip
  • 这个VOIP套接字由系统维护,而应用程序在BG暂停
  • 您可以安排一个保持活动的模块,操作系统会每X次唤醒您的应用程序
  • X> = 10分钟(请参阅[[UIApplication sharedApplication] setKeepAliveTimeout:处理程序:)
  • 此套接字不是媒体套接字,它只用于接收来电的邀请
  • 应用程序会唤醒套接字上的每个传入数据(iOS 5.0 +限制在300秒内是15次)
  • 一旦收到来电,您的应用程序将会唤醒,您可以打开此通话的audio会话。
  • VOIP应用程序应标记在info.plist的“所需的背景模式”下,作为“voip”和“audio”。

    一旦您打开了一个audio会话(对于主动呼叫),您的应用程序可能会在后台完全运行,并且不会再挂起,直到此audio会话closures。

    无论如何,另一种select是将Push通知用作传入呼叫的​​触发器。
    此外,这将节省您维护sockets24/7的麻烦,节省一些电池,
    即使用户closures了应用程序也是可以工作的(第一种select并不适用)。

    什么版本的IOS,你正在使用的设备?

    这是苹果公司在IOS5中引入的一个已知“function”/问题,以减lessVoip应用程序的电池使用量。

    Interesting Posts