如何在iOS的后台模式下保持Alive PJSIP活着

时间:2015-01-27 12:11:33

标签: ios sip voip pjsip

您好,我已经阅读了几乎所有的教程,以保持清醒ios应用程序,但没有运气。 我已将acc.cfg transport = tcp和keepalivetimeout处理程序以及后台模式设置为voip。 我已经检查了activesocket类的库函数被调用来配对CFstreampropertyforvoip。

如果有人能够在后台模式下成功唤醒pjsip。请分享一些信息或片段。

2 个答案:

答案 0 :(得分:0)

您可以使用TCP传输,但您应该考虑电池和带宽使用,因为您的客户需要连续注册并保持活动。

另一种解决方案是使用PUSH。这个想法很简单。当您的客户端转到后台时,它必须取消注册,以便服务器上不存在注册。然后,如果有来电,服务器将找不到被叫方的任何注册,并将发送PUSH通知。当客户端获得PUSH通知时,用户可以点击通知,客户端打开并注册。最后,服务器将来电与收到的注册请求相关联,最后将来电转发给客户端。

使用PUSH的优点是:

  • 减少电池使用量
  • 减少带宽使用
  • 能够使用UDP作为传输协议

主要缺点是实施整个流程的复杂性增加(PUSH,暂停交易......)。

答案 1 :(得分:0)

除非您注册“音频和播放”背景模式,然后播放音频文件以防止iOS抢占正常的运行时处理,否则无法在后台保持应用程序唤醒。 MMPDeepSleepPreventer是实现此目的的绝佳资源,可以定期播放静默WAV文件。

可以使用VoIP套接字标志(kCFStreamNetworkServiceTypeVoIP),但必须在现有的连接TCP套接字上设置标志。当您的应用程序背景化时,它将像其他任何应用程序一样暂停,但iOS将接管监视传入数据的连接并唤醒您的应用程序以正确处理传入的信息。需要注意的是,iOS会在一段时间内唤醒您的应用程序,然后因为不当行为而终止应用程序,因此存在严格的限制。

此外,还有一个beginBackgroundTaskWithExpirationHandler调用,可用于注册操作系统将在最短10分钟时间内调用的后台“管家”方法,让您的应用程序有机会做任何简短的操作 - 通信,连接管理等