Recepción de llamadas voip mientras la aplicación está en segundo plano en ios

Creo que tengo todos los requisitos para tener un socket "vivo" mientras la aplicación está en segundo plano. Es decir:

  • Mi aplicación tiene voip y audio como sus modos de background.
  • Estoy usando PJSIP como la biblioteca SIP, que se supone que use CFReadStreams con la propiedad "Ejecutar en segundo plano" activada
  • La aplicación está utilizando TCP para establecer la connection con el server SIP.

Cuando la aplicación se envía a segundo plano, agrega un controller de background que envía un post "keepAlive" cada período de time.

Eso keepAlive parece estar funcionando. Si reviso los loggings en el server puedo ver cómo llegan los posts incluso cuando la aplicación no está en primer plano.

El problema (y la pregunta) es que no recibo llamadas mientras la aplicación está en segundo plano.

Parece que el socket todavía está vivo, si hago una llamada al teléfono celular mientras la aplicación no está en primer plano, no pasa nada, pero si ejecuto la aplicación yo solo, la llamada se detecta automáticamente.

Gracias 🙂

Encontramos el problema.

Dada la configuration actual, el Servidor usó una connection diferente para enviar la request de INVITACIÓN desde el socket TCP inicial usado desde el teléfono para enviar la request inicial de REGISTRO.

Como los dos zócalos eran diferentes, el sistema operativo no despertó la aplicación.

Si configura el server (Kamailio en nuestro caso) para reutilizar el socket inicial que usó el teléfono para enviar el primer REGISTRO, funciona a la perfección.

De forma pnetworkingeterminada, parece que los serveres SIP crean nuevos sockets para cada request de INVITACIÓN que desean enviar al teléfono. Esta situación es un problema para el model de background de iPhone.

Solo para verificar dos veces, ha leído esto: http://trac.pjsip.org/repos/wiki/Getting-Started/iPhone#UnabletoacceptincomingcallinbackgroundmodeiOS4

Además, pruébelo con la última twig 1.x del repository de Subversion, ha habido varias correcciones para el soporte de iOS.