2012-09-05 12 views
8

He intentado gestionar las notificaciones recibidas en mi aplicación, pero no funciona.iOS Gestionar notificaciones después de iniciar la aplicación en estado no operativo

Cuando uso didReceiveLocalNotification:(UILocalNotification *)notification. Puedo recibir y usar la notificación que se utiliza para ingresar a la aplicación, sin ningún problema

Sin embargo, esta función solo se activa cuando la aplicación ya está ejecutándose (activa, inactiva, de fondo y posiblemente suspendida, pero aún no lo he intentado).

Ahora, existe esta función didFinishLaunchingWithOptions:(NSDictionary *)launchOptions donde puede usar [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey] que devolvería una UILocalNotification.

Sin embargo, cuando inicia la aplicación desde el estado que no se ejecuta, este evento no se desencadena. LocalNotification luego abre la aplicación, pero no puedo usarla de ninguna manera.

Ahora, mi pregunta es: ¿Cómo puedo hacer que funcione, para que pueda recibir y procesar las notificaciones al iniciar la aplicación, a partir de una notificación, cuando la aplicación está en estado de no ejecución? ¿Hay algo que estoy haciendo mal aquí?

Aquí es un poco de código de ejemplo desde mi aplicación:

En primer lugar, la función didFinishLaunchingWithOptions, que, por desgracia no funciona. La función [sharedLocalNotificationsInstance processNotification:notification] no se pone en marcha ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 
[sharedLocalNotificationsInstance checkNotifications]; 

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
if (notification != nil) { 

    // Process the received notification 
    [sharedLocalNotificationsInstance processNotification:notification]; 

    application.applicationIconBadgeNumber = 0; 
} 

return YES; 
} 

y una segunda pieza de código: la función didReceiveLocalNotification, que funciona perfectamente: recibo de la notificación, y [sharedLocalNotificationsInstance processNotification: Notificación] funciona perfectamente.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ 

// Used when the application launches from a notification 
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 

// Process the received notification 
[sharedLocalNotificationsInstance processNotification:notification]; 
} 
+0

Hi laarsk. Tengo exactamente el mismo problema. podría detectar notificaciones cuando la aplicación está en primer plano o en segundo plano pero ocurren cosas divertidas cuando se cierra la aplicación. hago clic en notificaciones, la aplicación se abre, permanece en pantalla durante 1 segundo y luego la pantalla se pone negra. Veo la aplicación en segundo plano pero no hay señal de notificación de recepción. Realmente no estoy seguro de si UILocalNotification * notification = (UILocalNotification *) [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; funciona o no. ¿Has encontrado una solución sólida para esto? – Add080bbA

Respuesta

4

Así es como iOS maneja la notificación local. Depende del estado de tu aplicación, p. activo, ejecutándose en segundo plano, o aún no iniciado. IOS llamará a didFinishLaunchingWithOptions o didReceiveLocalNotification, o no tocará su aplicación.

consulte este artículo de aclaración - http://www.thekspace.com/home/component/content/article/62-uilocalnotification-demystified.html

+0

¡Gracias por el enlace! Desafortunadamente, esa página también dice que la aplicación lanzará didFinishLaunchingWithOptions cuando la aplicación estaría en estado de no ejecución, lo que, desafortunadamente, no ... Al menos no tan lejos como yo sé. Algo en lo que estoy pensando ahora, es que quizás podría hacer algo ligeramente diferente: iniciar la aplicación, y luego disparar el evento didReceiveLocalNotification. Solo programé ese evento para hacer algo cuando applicationState = 1 (activo), pero tal vez deba usar eso en su lugar. ¡Le echaré un vistazo! – laarsk

+0

Si su aplicación no se está ejecutando, cuando ocurre una notificación local y el usuario activa la notificación, iOS iniciará su aplicación y pasará el objeto de notificación a través de didFinishLaunchingWithOptions. Sin embargo, si el usuario no activa la notificación, no pasaría nada. –

+0

En iOS7, no vi ninguna notificación de iOS cuando la aplicación está inactiva. La insignia está configurada, pero cuando se hace clic en la aplicación de iconos, no se llama a ninguna función. – Brave

1

<Matrix-Morpheus-Meme title="WHAT IF I TOLD YOU">

Cuando una aplicación se inicia desde el estado "no-funcionamiento" porque un usuario golpeado ligeramente en una notificación de alerta locales, la aplicación ha sido iniciado por iOS, no por Xcode, por lo tanto, NO FUNCIONA BAJO EL DEBUGGER. No se puede entrar dentro de él y NSLog() tampoco envía nada a la consola de Xcode. Pruebe con un UIAlertController.

</Matrix-Morpheus-Meme>

Cuestiones relacionadas