web-dev-qa-db-fra.com

Puis-je effacer par programme les notifications de mon application depuis le centre de notifications iOS 5?

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?

48
Will

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];
75
voidStern

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];
19
Gabriel Reid

Oui, vous pouvez annuler des notifications spécifiques ou toutes les notifications locales en appelant

[[UIApplication sharedApplication] cancelLocalNotification:...]; 

ou

[[UIApplication sharedApplication] cancelAllLocalNotifications];
3
Henrik Strand

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
}
2
Anit Kumar

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.

1
piz78