我认为我有应用程序处于后台时拥有“活动”套接字的所有要求。也就是说:
当应用程序发送到后台时,它会添加一个后台处理程序,每个时间段都会发送一个“keepAlive”消息。
keepAlive似乎正在发挥作用。如果我检查服务器中的日志,即使应用程序不在前台,我也可以看到消息是如何到达的。
问题(和问题)是,当应用程序处于后台时,我没有接到电话。
似乎套接字仍处于活动状态,如果我在应用程序不在前台时拨打手机,没有任何反应,但如果我自己启动应用程序,则会自动检测到呼叫。
谢谢:)
答案 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支持修复。