Let me give a bit of background information on how iOS backgrounding works:
Officially iOS only supports background operations for voip applications when using TCP.
In this scenario, Zoiper will hibernate completely while in background, but the network stack will still be monitored by iOS.
If something arrives on the socket, iOS will wake up the softphone and we can process the packets and start ringing etc. While in background Zoiper is not using any CPU, we can schedule to wake up to re-register but not more than once every 10 minutes. This implies that you cannot have a re-registration expiry time of less than 10 minutes.
There is no such VOIP mode for UDP in iOS. that means the application will be "frozen" while in background. There are some tricks to keep an application alive in background with UDP, but they are all dirty hacks and they all use quite a lot of battery.
Zoiper has such tricks implemented, but because of the battery drain, you need to explicitly enable them in the incoming calls section.
Another thing to keep in mind when using UDP, is that some firewalls / routers have NAT timeouts that are less than 30s, this means that you need to keep the connection open quite regularly depending on the networking equipement used. As comparison, TCP connections last for more than an hour on most NAT networks, requing much less packets and cpu cycles.
So in short: TLDR:
- Check if your provider or PBX supports TCP. If it does, change zoiper to use TCP instead and make sure that the server is not sending SIP OPTION packets (quality=yes on asterisk) too often or the application will get killed.
- If your provider / PBX does not support UDP, go to the incoming call section in Zoiper and enable the settings there. This will drain your battery really quickly.
PS. a new version has been uploaded to the appstore and is awaiting review. This version fixes a bug with 99% cpu in background and has some reliability improvements for the dirty UDP hacks.
We think it will be approved within the next 7 days