Marie Amida
Marie Amida

Reputation: 556

Clear applicationIconBadgeNumber without removing notifications not working

I've read in a few posts (like this one https://forums.developer.apple.com/thread/7598) that setting

    application.applicationIconBadgeNumber = -1

on applicationDidBecomeActive or applicationWillEnterForeground would allow me to clear the badge number without removing the notifications from the notification center. When I set application.applicationIconBadgeNumber to a negative number (like -1) it clears all my notifications from the Notification Center. Is there another way to clear the badge number without removing the notifications?

Upvotes: 12

Views: 13194

Answers (3)

Nickolay Tarbayev
Nickolay Tarbayev

Reputation: 406

Starting iOS 16 there's a new API, which doesn't have this annoying side effect:

UNUserNotificationCenter.current().setBadgeCount(0)

Upvotes: 1

Manisha
Manisha

Reputation: 181

UIApplication.sharedApplication.applicationIconBadgeNumber = -1;

I have tested it in iOS 12.2 and it's working fine for me with remote notification.

It is clearing badge count by keeping received remote notification in notification centre.

Code snippet for reference:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
}

Upvotes: 10

Irfan Gul
Irfan Gul

Reputation: 1577

Setting application badge to -1 indirectly with a empty local notification worked for me, but its a hack to persist notifications in tray while clearing application badge count.

if(badgeCount == 0) {
   //set application badge indirectly with UILocalNotification
   UILocalNotification *ln = [[UILocalNotification alloc]init];
   ln.applicationIconBadgeNumber = -1;
   [[UIApplication sharedApplication] presentLocalNotificationNow:ln];
}
else {
   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount];
}

Swift Version

if badgeCount == 0 {
    //set application badge indirectly with UILocalNotification
    var ln = UILocalNotification()
    ln.applicationIconBadgeNumber = -1
    UIApplication.sharedApplication().presentLocalNotificationNow(ln)
}
else {
    UIApplication.sharedApplication().applicationIconBadgeNumber = badgeCount
}

Approach tested on iOS 9 and 10.

Upvotes: 6

Related Questions