2011-03-10 17 views
8

ejecutar He creado una aplicación de chat utilizando XMPP framework..when que salir de la aplicación (entrar en el modo de fondo) Quiero recibir el message..and de chat también es necesario para mostrar el icono placa ... ¿Cómo puede ¿Hago esto?iPhone App de XMPP fondo

Respuesta

11

Efectivamente, puedes ejecutar una aplicación basada en el Marco de XMPP en el fondo en iOS4 llamándolo una aplicación de VoIP. (Sin embargo,, Apple lo rechazará de la App Store a menos que también lo haga VoIP).

Es necesario configurar la bandera de VoIP en su aplicación (nombreaplic) -info.plist archivo, y luego en

(void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket 

que necesitará para establecer las banderas secuencias de socket para incluir kCFStreamNetworkServiceTypeVoIP:

CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 
CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 

Luego, su aplicación se activará brevemente cuando llegue un nuevo mensaje XMPP. Para su correcto manejador

(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

, que se quiere crear una notificación local para el mensaje si están en segundo plano (puede realizar un seguimiento del estado de fondo a través de UIApplicationDidEnterBackgroundNotification y UIApplicationWillEnterForegroundNotification). El manejador local de notificaciones puede establecer el número de la insignia de la aplicación, etc. (como lo haría con una notificación push).

EDIT

versiones más recientes del Marco XMPP (en concreto, GCDAsyncSocket) ahora apoyan una llamada para hacer esto más fácil, por lo que sólo se puede tener:

- (void)xmppStream:(XMPPStream *)sender socketWillConnect:(GCDAsyncSocket *)socket 
{ 
    // Tell the socket to stay around if the app goes to the background (only works on apps with the VoIP background flag set) 
    [socket performBlock:^{ 
      [socket enableBackgroundingOnSocket]; 
    }]; 
} 
+0

gracias Jeff, esto está funcionando bien para mí ... muchas gracias :-) – Raj

+0

control no va al método "socketWillConnect: (AsyncSocket *) socket". Por favor, ayuda – iphonedev23

+0

El control debe ir a socketWillConnect: siempre que hayas llamado addDelegate: en tu objeto XMPPStream. Tenga en cuenta que la llamada socketWillConenct: ahora espera un parámetro GCDAsyncSocket * en lugar de AsyncSocket * (a partir de XMPPFramework 3) –

6

Hay un número limitado de programas que se pueden ejecutar en segundo plano sin límite, estos programas de VoIP son, los que juegan música, y aquellos que hacen un seguimiento de la ubicación del usuario. Si no está haciendo ninguno de estos legítimamente, entonces está limitado a diez minutos de funcionamiento en segundo plano. Tenga en cuenta que Apple rechazará aplicaciones que prueben trucos tontos como reproducir sonidos "vacíos" para mantener la aplicación en vivo.

Puede encontrar información sobre las tareas que se ejecutan en segundo plano aquí: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Su otra opción Conjeturaría es tener el programa de chat funciona poniéndose en contacto con un servidor, y de tener que las respuestas de cola del servidor cuando un usuario está fuera de línea y luego entregarlos la próxima vez que inicien sesión. Al no ser un programador de red, no sé qué tan factible es, pero creo que es la única manera de hacerlo indefinidamente si solo está ofreciendo chat de texto. La mejor opción sería hacer su aplicación VOIP habilitada usando la guía anterior.

EDIT A partir del lanzamiento de iOS 5.0, también es posible obtener aplicaciones registradas como aplicaciones de Kiosco para descargar información mientras están en segundo plano, más un montón de otras características funky que también son solo Kiosco.

-Ash

+0

primer lugar muchas gracias para usted replay..i no quiero empujar esta aplicación para AppStore.usando el archivo IPA para su distribución. Leí el enlace que le proporcionó y agregué el VOIP en info.plist. Necesito más cambios en el código ... porque todavía no funciona en el backkground. – Raj

+0

Creo que ya leyó el documento al que te indiqué; necesita hacer algo más que simplemente agregar VOIP a info.plist para que funcione. Consulte más abajo en la página "Implementación de una aplicación VOIP" – Ash

+0

Mi aplicación está configurada como una aplicación basada en la ubicación, pero después de 3 horas en segundo plano se desconecta de mi servidor XMPP. Además de configurar info.plist como ubicación, ¿hay algo más que establecer en xmppframework para que nunca se desconecte? – subharb

5

En el último marco XMPP se no es necesario modificar los archivos de framework.

a hacer esto: 1 .Agregue esto a su método connect clave

#if !TARGET_IPHONE_SIMULATOR 
{ 
    self.xmppStream.enableBackgroundingOnSocket = YES; 
} 
#endif 

2. Agregar VoIP a su información de archivo plist:

enter image description here

+2

pero rechazo de manzana de esta manera ...... – Raju