2011-10-31 13 views
8

Con iOS 5 e il centro di notifica puoi avere le notifiche in attesa, impilate ciascuna con i propri dati e messaggi. C'è un modo quando il tuo programma viene lanciato regolarmente (senza toccare la notifica) per scoprire le notifiche di attesa e, ancora più importante, i dati associati a loro?Controlla le notifiche di attesa

L'altra domanda associata a questo è quando arrivano le notifiche push e la tua app è in background fa application:didReceiveLocalNotification: ancora chiamato o va semplicemente e aspetta fino a quando l'app viene lanciata e quindi ci si aspetta che maneggi manualmente con i dati di avvio nel application:didFinishLaunchingWithOptions:

Il mio scenario è che ho bisogno di aggiornare alcuni modelli di dati di base con i dati allegati alle notifiche push, quindi voglio che queste modifiche vengano riflesse indipendentemente dal modo in cui lanciano l'app.

risposta

1

Dalla mia esperienza, non c'è modo di scoprire le notifiche oltre a lanciare l'app direttamente attraverso di loro (su iOS 5, che sarebbe giusto dopo aver ricevuto la notifica o dalle notifiche in coda presenti al Centro di notifica).

Una strategia alternativa consisterebbe nell'utilizzare i badge icona.

Se si contrassegna l'icona dell'app quando si ricevono le notifiche, è possibile verificare tale numero ogni volta che l'app viene avviata e quindi eseguire le azioni richieste.

1

Quando viene visualizzata una notifica, è possibile visualizzarla o annullarla. Se l'utente ha annullato la notifica, è possibile controllare per loro la prossima volta che vanno in app:

- (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 
    } 
} 

Questo metodo viene licenziato se si riceve una notifica mentre si è in tale applicazione specifica, o si sceglie di riconoscere una notifica locale:

- (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; 
} 

che ti dà una buona copertura per tutti gli scenari con le notifiche locali che sarebbero:

  • notifica ricevuto, utente annulla. Controlla più tardi in didFinishLaunchingWithOptions
  • La notifica è confermata, l'app non è aperta. Check in didFinishLaunchingWithOptions
  • La notifica è confermata, l'app è in background. didReceiveLocalNotification:
  • notifica è presentato mentre in app didReceiveLocalNotification:
Problemi correlati