Applicazione iOS: come cancellare le notifiche?

Ho un’applicazione iOS su cui vengono inviate alcune notifiche push. Il mio problema è che i messaggi / notifiche rimangono nel Centro di notifica in iOS dopo di che vengono toccati. Come posso rimuovere una notifica per la mia applicazione nel Centro di notifica la prossima volta che si apre l’applicazione?

Ho trovato post in cui le persone chiamano setApplicationIconBadgeNumber a un valore zero per cancellare le notifiche. Sembra strano per me, quindi credo che forse esiste un’altra soluzione?

Edit1:

Sto avendo qualche problema a cancellare le notifiche. Si prega di consultare il mio codice qui:

 - (void) clearNotifications { [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (launchOptions != nil) { NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (dictionary != nil) { NSLog(@"Launched from push notification: %@", dictionary); [self clearNotifications]; } } return YES; } - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo { NSLog(@"Received notification: %@", userInfo); [self clearNotifications]; } 

Sto eseguendo l’App tramite Xcode. Quando l’app è ridotta a icona e avvio l’app utilizzando la notifica nel centro di notifica, posso vedere nel log che è stata richiamata la didReceiveRemoteNotification e, utilizzando i punti di interruzione che posso vedere, è stato eseguito clearNotifications . Tuttavia, la notifica si blocca nel Centro notifiche. Perché?

    Molto probabilmente perché Notification Center è una funzionalità relativamente nuova, Apple non ha necessariamente voluto spingere un nuovo paradigma per cancellare le notifiche. Quindi, invece, hanno una multiposizione [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; cancellare le notifiche. Potrebbe sembrare un po ‘strano, e Apple potrebbe fornire un modo più intuitivo per farlo in futuro, ma per il momento è il modo ufficiale.

    Io, io uso questo snippet:

     [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

    che non manca mai di cancellare tutte le notifiche dell’app dal Centro notifiche.

    Solo per espandere la risposta di pcperini. Come cita, dovrai aggiungere il seguente codice alla tua application:didFinishLaunchingWithOptions: method;

     [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

    È inoltre necessario incrementare quindi decrementare il badge nella propria application:didReceiveRemoteNotification: metodo se si sta tentando di cancellare il messaggio dal centro messaggi in modo tale che quando un utente inserisce l’app dalla pressione di una notifica, il centro messaggi si azzera anche, ovvero;

     [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

    Potrebbe anche essere utile aggiungere una chiamata a clearNotifications in applicationDidBecomeActive in modo che, nel caso in cui l’applicazione si trovi in ​​background e ritorni, cancellerà anche le notifiche.

     - (void)applicationDidBecomeActive:(UIApplication *)application { [self clearNotifications]; } 

    Aggiornamento per iOS 10 (Swift 3)

    Per cancellare tutte le notifiche locali nelle app iOS 10, devi utilizzare il seguente codice:

     import UserNotifications ... if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled. center.removeAllDeliveredNotifications() // To remove all delivered notifications } else { UIApplication.shared.cancelAllLocalNotifications() } 

    Questo codice gestisce la cancellazione delle notifiche locali per iOS 10.x e tutte le precedenti versioni di iOS. Dovrai import UserNotifications per il codice iOS import UserNotifications

    Se sono presenti notifiche locali pianificate in sospeso e non si desidera utilizzare cancelAllLocalNotifications per cancellare quelle precedenti nel Centro notifiche, è inoltre ansible effettuare le seguenti operazioni:

     [UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications; 

    Sembra che se si impostano le Notifiche di scheduledLocalNotifications , cancella quelle precedenti nel Centro di notifica e, impostandolo su sé stesso, si mantengono le notifiche locali in sospeso.

    Se stai venendo qui chiedendo il contrario (come ero), questo post potrebbe essere per te.

    Non riuscivo a capire perché le mie notifiche si stavano cancellando quando ho cancellato il badge … Aumento manualmente il badge e poi voglio cancellarlo quando l’utente entra nell’app. Non è un motivo per cancellare il centro di notifica, però; possono ancora voler vedere o agire su quelle notifiche.

    Negativo 1 fa il trucco, per fortuna:

     [UIApplication sharedApplication].applicationIconBadgeNumber = -1; 

    Forse nel caso in cui ci siano allarmi programmati e badge icona app non premuti.

     NSArray *scheduledLocalNotifications = [application scheduledLocalNotifications]; NSInteger applicationIconBadgeNumber = [application applicationIconBadgeNumber]; [application cancelAllLocalNotifications]; [application setApplicationIconBadgeNumber:0]; for (UILocalNotification* scheduledLocalNotification in scheduledLocalNotifications) { [application scheduleLocalNotification:scheduledLocalNotification]; } [application setApplicationIconBadgeNumber:applicationIconBadgeNumber]; 

    In Swift sto usando il seguente codice all’interno del mio AppDelegate:

     func applicationDidBecomeActive(application: UIApplication) { application.applicationIconBadgeNumber = 0 application.cancelAllLocalNotifications() } 

    Se in futuro hai ripetuto notifiche, non desideri annullare tali notifiche, puoi cancellare l’elemento nel centro notifiche tramite:

     func clearNotificationCenter() { UIApplication.sharedApplication().applicationIconBadgeNumber = 1 UIApplication.sharedApplication().applicationIconBadgeNumber = 0 } 

    Non puoi cancellare la notifica quando la tua app è aperta in primo piano chiamando il metodo di seguito immediatamente dopo aver ricevuto la notifica locale, altrimenti riceverai decine di centinaia di notifiche. Forse perché la stessa notifica si applica di nuovo, e ora è il momento di sparare, quindi continui a sparare, applica nuovamente, spara, applica ….:

     [UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications; 

    Quando esci dalla tua app, in quel momento devi usare una riga di codice qui sotto sul metodo di clic del pulsante di disconnessione.

     [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

    e questo funziona perfettamente nella mia app.

    Devi aggiungere il codice seguente nel tuo metodo AppDelegate applicationDidBecomeActive .

     [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 

    Ho capito da qui . Funziona per iOS 9

     UIApplication *app = [UIApplication sharedApplication]; NSArray *eventArray = [app scheduledLocalNotifications]; for (int i=0; i<[eventArray count]; i++) { UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; //Cancelling local notification [app cancelLocalNotification:oneEvent]; }