Je souhaite supprimer les anciennes notifications de mon application à partir du centre de notifications iOS 5. Puis-je faire ceci? Si c'est le cas, comment?
Pour supprimer les notifications du Centre de notifications, définissez simplement le numéro de votre badge d'icône sur zéro.
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Cela ne fonctionne que si le numéro change, donc si votre application n'utilise pas le numéro de badge, vous devez d'abord le définir, puis le réinitialiser.
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Une méthode plus simple que j'utilise (et ne nécessite pas de badges) consiste à réinitialiser le tableau des notifications locales planifiées, comme suit:
UIApplication* application = [UIApplication sharedApplication];
NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
application.scheduledLocalNotifications = scheduledNotifications;
Cela a pour effet que toutes les notifications planifiées restent valides, tandis que toutes les "anciennes" notifications présentes dans Notification Center sont supprimées. Cependant, il a également la sensation de quelque chose qui pourrait changer dans une future version d'iOS, car je n'ai vu aucune documentation pour ce comportement.
Bien sûr, si vous souhaitez supprimer les notifications all, c'est simplement le suivant:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Oui, vous pouvez annuler des notifications spécifiques ou toutes les notifications locales en appelant
[[UIApplication sharedApplication] cancelLocalNotification:...];
ou
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Si vous souhaitez effacer les notifications dans Swift et iOS 10.0
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
}
Pour moi, cela n'a fonctionné qu'avec l'envoi d'une notification locale avec uniquement un badge comme celui-ci:
if([UIApplication sharedApplication].applicationIconBadgeNumber == 0) {
UILocalNotification *singleLocalPush = [[UILocalNotification alloc] init];
singleLocalPush.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
singleLocalPush.hasAction = NO;
singleLocalPush.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:singleLocalPush];
[singleLocalPush release];
} else {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
Et dans la méthode
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
Je peux remettre le badge à 0.