2011-10-31 13 views
8

Con iOS 5 y el centro de notificaciones, puede tener notificaciones en espera, apiladas, cada una con sus propios datos y mensajes. ¿Hay alguna manera de que su programa se inicie regularmente (sin tocar la notificación) para descubrir las notificaciones de espera y, lo que es más importante, los datos asociados a ellas?Verificar notificaciones de espera

La otra pregunta asociada con esto es cuando las notificaciones automáticas entran y su aplicación está en segundo plano application:didReceiveLocalNotification: todavía recibe una llamada o simplemente va y espera hasta que la aplicación se inicia y luego se espera que maneje manualmente con el lanzamiento de datos en el application:didFinishLaunchingWithOptions:

Mi caso es que tengo que actualizar algunos modelos de datos centrales con los datos adjuntos a las notificaciones automáticas, así que quiero que esos cambios se reflejen sin importar cómo inicien la aplicación.

Respuesta

1

Según mi experiencia, no hay forma de descubrir notificaciones aparte de iniciar la aplicación directamente a través de ellas (en iOS 5, eso sería justo después de recibir la notificación o de las notificaciones en cola presentes en el Centro de notificaciones).

Una estrategia alternativa sería usar insignias de iconos.

Si identifica el icono de su aplicación cuando recibe notificaciones, puede verificar ese número cada vez que la aplicación se inicie y luego realice las acciones requeridas.

1

Cuando aparece una notificación, puede verla o cancelarla. Si el usuario ha cancelado la notificación, se puede comprobar por ellos la próxima vez que van en la aplicación:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

    if(localNotif) { 
     // Do some stuff 
     application.applicationIconBadgeNumber = 0; // Reset num of notifications on app icon 
    } 
} 

Este método es despedido si recibe una notificación mientras se encuentre en esa aplicación específica, o si decide reconocer una notificación locales:

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

BOOL inApp = [application applicationState] == UIApplicationStateActive; 

    if(inApp) { // they got this in the app 
     //Do some stuff in the app 
    } 
    else { 
     // They acknowledged the notification out of the app and here they are 
     // Do some other stuff 
    } 

    application.applicationIconBadgeNumber = 0; 
} 

Eso le da una buena cobertura para todos los escenarios con las notificaciones locales que serían: se recibe

  • notificación, el usuario cancela. Verifique más adelante en didFinishLaunchingWithOptions
  • Se confirma la notificación, la aplicación no está abierta. Check in didFinishLaunchingWithOptions
  • Se confirma la notificación, la aplicación está en segundo plano. didReceiveLocalNotification:
  • notificación se presenta mientras que en la aplicación didReceiveLocalNotification:
Cuestiones relacionadas