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

zum*_*zum 6 sockets voip keep-alive ios

我正在iOS 5上编写一个VOIP应用程序,我正在尝试了解实际通信如何在后台保持活动状态.

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

在300秒内超过15次唤醒

我真正不明白的是,如果套接字应该能够不断地通过它发送和接收数据(对于VOIP需要),如果每个时间段可以接收的数据量有限制吗?

假设套接字正在接收在后台发生的语音对话的语音数据.是不是语音数据应该通过套接字连接?如果是这样,如果套接字在每个时间段内的活动有限,它怎么能工作?

avi*_*hic 18

后台的VO​​IP应用行为(iOS 4.0+):

  • 有一个保持打开的插座,标记为Voip
  • 此VOIP插槽由系统维护,而应用程序暂停在BG
  • 您可以安排保持活动块,操作系统将每隔X次唤醒您的应用程序
  • X> = 10min(参见[[UIApplication sharedApplication] setKeepAliveTimeout:handler :)
  • 此套接字不是媒体套接字,它仅用于接收传入呼叫的​​邀请
  • 应用程序唤醒套接字上的每个传入数据(iOS 5.0+限制在300秒内为15次)
  • 收到来电后,您的应用将会唤醒,您可以为此通话打开音频会话.

    VOIP应用程序应在info.plist中标记为"必需的背景模式",如"voip"和"audio".

    打开音频会话后(对于当前通话),您的应用可能会在后台完全运行,并且在此音频会话关闭之前不再暂停.

    无论如何,另一种选择是使用推送通知作为来电的触发器.
    此外,这将为您节省维护插槽24/7,节省一些电池的麻烦,
    并且即使用户已关闭应用程序也将工作(第一种选择不是这种情况).


    小智 0

    您使用的是什么版本的 IOS、设备?

    这是 Apple 在 IOS5 中引入的一个已知“功能”/问题,旨在减少 Voip 应用程序的电池使用量......