应用程序在ios中处于后台时接收voip调用

时间:2011-09-22 15:42:44

标签: ios background voip pjsip

我认为我有应用程序处于后台时拥有“活动”套接字的所有要求。也就是说:

  • 我的应用程序将voip和audio作为其背景模式。
  • 我正在使用PJSIP作为SIP库,它应该使用CFReadStreams并启用“在后台运行”属性
  • 该应用正在使用TCP与SIP服务器建立连接。

当应用程序发送到后台时,它会添加一个后台处理程序,每个时间段都会发送一个“keepAlive”消息。

keepAlive似乎正在发挥作用。如果我检查服务器中的日志,即使应用程序不在前台,我也可以看到消息是如何到达的。

问题(和问题)是,当应用程序处于后台时,我没有接到电话。

似乎套接字仍处于活动状态,如果我在应用程序不在前台时拨打手机,没有任何反应,但如果我自己启动应用程序,则会自动检测到呼叫。

谢谢:)

2 个答案:

答案 0 :(得分:4)

我们发现了问题。

根据当前配置,服务器使用不同的连接从手机使用的初始TCP套接字发送INVITE请求,以发送初始REGISTER请求。

由于两个套接字不同,操作系统没有唤醒应用程序。

如果您配置服务器(在我们的情况下是Kamailio)重用手机用来发送第一个REGISTER的初始套接字,它可以无缝工作。

默认情况下,SIP服务器似乎为他们想要发送到手机的每个INVITE请求创建新的套接字。这种情况对iphone背景模型来说是一个问题。

答案 1 :(得分:0)

要仔细检查,您已经读过:http://trac.pjsip.org/repos/wiki/Getting-Started/iPhone#UnabletoacceptincomingcallinbackgroundmodeiOS4

另外,尝试使用Subversion存储库中最新的1.x分支,已经有一些iOS支持修复。