2012-08-29 34 views
5

He leído varias preguntas aquí en SO con respecto a la recepción de notificaciones push mientras la aplicación no se está ejecutando (más que en segundo plano, lo que significa que se ha cerrado por completo) . This question in particular es muy útil para averiguar cómo determinar si se está recibiendo utilizando el diccionario launchOptions.Notificación de inserción mientras la aplicación no se está ejecutando - launchOptions dictionary está vacío

Sin embargo, estoy muy confundido, y admito que esto puede ser un descuido masivo de mi parte: cuando mi dispositivo recibe una notificación automática para esta aplicación mientras la aplicación se apaga, y luego abro mi aplicación, el diccionario launchOptions es un puntero nulo. De la descripción de la respuesta aceptada en el enlace mencionado anteriormente, y en otros lugares también, deduzco que debería poder ver una carga útil de notificación; sin embargo, no hay nada. Estoy desarrollando para iOS 5.1.1.

Mi único otro pensamiento es verificar el número de insignias en el inicio (mayor que cero, hacer algo ...), pero esto parece muy poco confiable.

¿Alguien me puede decir lo que me estoy perdiendo? ¡Gracias de antemano por su ayuda!

+0

¿Qué hay dentro de la carga útil? – msk

+0

@MSK Lo siento, pero no lo entiendo del todo. ¿Estás preguntando qué contenido contiene la carga original (desde mi servidor)? Si es así, la carga útil es básica, no contiene nada personalizado más allá del distintivo, la alerta y el sonido habituales. –

+0

ver mi respuesta a continuación – msk

Respuesta

7

application:didFinishLaunchingWithOptions: solo se llamará con la información de la carga cuando se inicia la aplicación debido a una notificación. P.ej. esto podría suceder si el usuario toca la alerta de notificación (agregada en el centro de notificaciones) o la notificación recibida con content-avialble = 1 en la carga útil (notificación de Play Kiosco) & siempre que su aplicación no esté en primer plano y en segundo plano.

Si su aplicación recibe una notificación cuando la aplicación está en segundo plano. Si se trata de la notificación o si Quiosco usuario pulsa sobre el botón de acción de alerta a continuación método se llama

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

con [[UIApplication sharedApplication] applicationState] no es igual a UIApplicationStateActive.

En el caso anterior si el usuario no toca el botón de acción de alerta de notificación y la aplicación de inicio tocando sobre él, no se llama didFinishLaunchingWithOptions o didReceiveRemoteNotification.

Si su aplicación recibe una notificación mientras está en primer plano didReceiveRemoteNotification se llama [[UIApplication sharedApplication] applicationState] será igual a UIApplicationStateActive.

Para la insignia en notification, si su aplicación no se está ejecutando, no se ejecuta código y la insignia se incrementa en 1 en el icono de la aplicación. Cuando inicie la aplicación (toque en el icono de la aplicación) se llama al didFinishLaunchingWithOptions con normalidad. (Si la aplicación está en segundo plano o en primer plano cuando se recibe una notificación, igual que la anterior)

Así que creo que esto cubre todos los casos posibles. También tenga en cuenta que el caso de fondo es válido para iOS SDK >= 4.0

+0

Ah, ja, gracias por su respuesta. Mi objetivo principal era obtener algunos datos de un servidor cuando se recibe un empuje; tenemos esto trabajando en segundo plano y en primer plano, y esperaba poder detectar, en la carga, si se recibía un impulso mientras la aplicación estaba fuera de línea; parece, en función de su respuesta, que esto es imposible a menos que el usuario toque la barra de notificaciones. En su opinión, ¿es confiable verificar el recuento de la insignia con carga? –

+0

tiene que mantener el recuento de distintivos en su servidor, vea [esta pregunta SO] (http: // stackoverflow.com/questions/1942605/push-notification-badge-auto-increment) – msk

+0

Ah, sí, sí, ya sabía de eso. Sin embargo, eso no es exactamente lo que estaba preguntando: sé que puedo verificar, dentro de la aplicación, el recuento de identificaciones utilizando [application applicationIconBadgeNumber]. Lo que me preguntaba si es confiable verificar si el recuento de distintivos es mayor que cero ('[application applicationIconBadgeNumber]> 0'). ¿Hay alguna razón por la que no debería ... ** hacer esto? –

Cuestiones relacionadas