I\'ve read in a few posts (like this one https://forums.developer.apple.com/thread/7598) that setting
application.applicationIconBadgeNumber = -1
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.
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;
}