我有一个ios应用程序,它通过注册VOIP回调在后台运行。我可以为此正在运行的应用程序手动启动和结束2个backgroundtasks。我在IOS7上尝试这个。 我认为苹果已经在ios7中将应用程序后台运行时间限制设置为3分钟。
答案 0 :(得分:0)
If you want to let your VOIP application run in background ,
except those base settings in plist file, you need a TCP socket who's property
is set to VOIP, than the iOS system will take care this socket for you,
when your application enter background , every thing was 'sleep' except that
tcp socket. and if VOIP server send some data thought that TCP socket,
your application will be awake up for 10 secs. during this time,
you can post a local notification.
Only Tcp socket can be set as VOIP Socket. But from i know ,
mostly VOIP application are based on UDP socket. if you do not want to separate
the control socket from the data socket. you should create another tcp
socket which is focus on 'awake' your application ,
and from my personal experience , it's very hard to keep this 'awake' signal
and the real sip control signal synchronize, the application always miss
the sip invite request.
So,the best way is separating the sip control single from the UDP data socket ,
make it as a tcp socket , this is the best solution ,
but never use tcp socket to transfer voice data.
Another dirty way: keep the application awake all the time.
As i said , each TCP single the application received thought
that 'VOIP' tcp socket , will keep application awake for 10 seconds,
so at the end of this duration(after 9 secs) ,
you can send a response to the server to ask for another signal ,
when the next signal arrived, the application will be awake again,
after 9 secs , send response again. keep doing this,
your application will awake forever.