我读过一些帖子(例如这篇文章https://forums.developer.apple.com/thread/7598)该设置
application.applicationIconBadgeNumber = -1
on
applicationDidBecomeActive
或 applicationWillEnterForeground
将允许我清除徽章编号,而无需从通知中心删除通知。当我将 application.applicationIconBadgeNumber
设置为负数(如 -1)时,它会清除来自 Notification Center
的所有通知。有没有其他方法可以在不删除notifications
的情况下清除徽章编号?
UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
我已经在 iOS 12.2 中对其进行了测试,它在远程通知方面对我来说运行良好。
通过将收到的远程通知保留在通知中心来清除徽章计数。
参考代码片段:
- (void)applicationDidBecomeActive:(UIApplication *)application {
UIApplication.sharedApplication.applicationIconBadgeNumber = -1;
}
使用空的本地通知间接将应用程序徽章设置为 -1 对我有用,但在清除应用程序徽章计数时将通知保留在托盘中是一种黑客行为。
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 版本
if badgeCount == 0 {
//set application badge indirectly with UILocalNotification
var ln = UILocalNotification()
ln.applicationIconBadgeNumber = -1
UIApplication.sharedApplication().presentLocalNotificationNow(ln)
}
else {
UIApplication.sharedApplication().applicationIconBadgeNumber = badgeCount
}
方法已在 iOS 9 和 10 上测试。
从 iOS 16 开始,出现了一个新的 API,它没有这种烦人的副作用:
UNUserNotificationCenter.current().setBadgeCount(0)