Suppression de UILocalNotification du bac de notification par programme

Existe-t-il un moyen de supprimer ou de supprimer par programme UILocalNotification de Notification Tray. Je suis en mesure d'annuler la notification qui supprime les notifications de

 [[UIApplication sharedApplication] scheduledLocalNotifications] 

Voici ce que je dois faire

Je dois rejeter le UILocalNotification de NotificationTray après que l'action ait été exécutée (c'est-à-dire après que l'user ait tapé la notification)

EDIT: Je peux supprimer les notifications du NSNotificationCenter . Je souhaite supprimer des notifications spécifiques de la zone de notification. Comme l'user appuie sur le button d'effacement pour effacer toutes les notifications appartenant à une application particulière.

Vous pouvez annuler toutes les notifications en utilisant:

 [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

Si vous souhaitez supprimer une notification particulière, vous pouvez utiliser l'object de notification userinfo , lorsque vous créez une notification locale, ajoutez un ID unique à celui-ci. Plus tard, vous pouvez utiliser cet ID pour supprimer la notification locale.

Pour cela, vous pouvez utiliser le code suivant:

 NSSsortingng *notificationId = @"id_to_cancel"; UILocalNotification *notification = nil; for(UILocalNotification *notify in [[UIApplication sharedApplication] scheduledLocalNotifications]) { if([[notify.userInfo objectForKey:@"ID"] isEqualToSsortingng:notificationId]) { notification = notify; break; } } [[UIApplication sharedApplication] cancelLocalNotification:notification]; 

Je crois que j'ai eu un problème similaire. Lorsque l'application est input au premier plan, j'ai tenté de supprimer les anciennes notifications pour supprimer les anciennes notifications du plateau des notifications.

J'ai fait quelque chose comme ça pour récupérer les anciennes notifications et les supprimer:

 NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; NSArray *pastNotifications = [activeNotifications filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"firDate < %@", [NSDate date]]]; for (UILocalNotification *notification in pastNotifications) { [[UIApplication sharedApplication] cancelLocalNotification:notification]; } 

Cependant, il semble que scheduledLocalNotifications n'inclut pas les locations dont la date de triggersment est déjà passée, même s'ils apparaissent toujours dans le centre de notifications.

L'appel de cancelAllLocalNotifications semble également supprimer les notifications précédentes. Nous pouvons donc récupérer toutes les notifications actuelles, tout annuler, puis append celles qui nous intéressent encore.

 // Grab all the current notifications NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; // Clear all notifications to remove old notifications [[UIApplication sharedApplication] cancelAllLocalNotifications]; // Add back the still relevant notifications for (UILocalNotification *notification in activeNotifications) { [[UIApplication sharedApplication] scheduleLocalNotification:notification]; } 

De plus, nous pouvons faire un filtrage des notifications avant de les rappend si certaines ne sont plus nécessaires, et nous pouvons récupérer les notifications actives quand l'application devient active, les stocker dans une variable d'instance et les append seulement quand l'application se déplace. l'arrière-plan

 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

va faire un tour aussi

mais si vous n'avez pas utilisé applicationIconBadgeNumber, cela ne fonctionnera pas, donc sortingck est défini d'abord par applicationIconBadgeNumber 🙂

 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 

Si l'application n'est pas en cours d'exécution, vous recevrez l'object Notification locale dans le

-applicationDidFinishLaunchingWithOptions:

comme:

 UILocalNotification *localNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; 

ou bien vous pouvez l'get dans

  • (void) application: application (UIApplication *) didReceiveLocalNotification: notification (UILocalNotification *)

Vous pouvez maintenant le supprimer du centre de notifications en utilisant

[[UIApplication sharedApplication] cancelLocalNotification: notificationToCancel];

 // deletes a pushnotification with userInfo[id] = id -(void)deleteLocalPushNotificationWithId:(NSSsortingng*)id{ for(UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]){ if([[notification.userInfo objectForKey:@"id"] isEqualToSsortingng:id]){ [[UIApplication sharedApplication] cancelLocalNotification:notification]; } } } // deletes all fired pushnotifications -(void)clearLocalPushNotifications{ NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; // Clear all notifications to remove old notifications [[UIApplication sharedApplication] cancelAllLocalNotifications]; // Add back the still relevant notifications for (UILocalNotification *notification in activeNotifications) { [[UIApplication sharedApplication] scheduleLocalNotification:notification]; } } 

Je jouais du code et je me demandais pourquoi les notifications locales sont stockées dans le centre de notification si l'application est au premier plan. C'est probablement parce que Apple ne sait pas ce que vous faites avec eux et honnêtement ne s'en soucie pas; alors ils font leur travail.

En ce qui concerne la question, je fais ce qui suit:

 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { if (application.applicationState == UIApplicationStateActive) { NSLog(@"active"); // display some foreground notification; [application cancelLocalNotification:notification]; } else { NSLog(@"inactive"); } }