清除 applicationIconBadgeNumber 而不删除通知不起作用

问题描述 投票:0回答:3

我读过一些帖子(例如这篇文章https://forums.developer.apple.com/thread/7598)该设置

    application.applicationIconBadgeNumber = -1

on

applicationDidBecomeActive
applicationWillEnterForeground
将允许我清除徽章编号,而无需从通知中心删除通知。当我将
application.applicationIconBadgeNumber
设置为负数(如 -1)时,它会清除来自
Notification Center
的所有通知。有没有其他方法可以在不删除
notifications
的情况下清除徽章编号?

ios swift badge
3个回答
10
投票
UIApplication.sharedApplication.applicationIconBadgeNumber = -1;

我已经在 iOS 12.2 中对其进行了测试,它在远程通知方面对我来说运行良好。

通过将收到的远程通知保留在通知中心来清除徽章计数。

参考代码片段:

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

6
投票

使用空的本地通知间接将应用程序徽章设置为 -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 上测试。


0
投票

从 iOS 16 开始,出现了一个新的 API,它没有这种烦人的副作用:

UNUserNotificationCenter.current().setBadgeCount(0)
© www.soinside.com 2019 - 2024. All rights reserved.