我想知道如何在传递本地通知时动态更新图标徽章编号。在安排时注册徽章编号不是一种选择,因为如果我在任何交付之前注册了两个或更多通知
UIApplication.shared.applicationIconBadgeNumber // this will be zero
在发送通知之前,它将始终为零。
我可以使用带有func的UNUsernotification委托
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { }
但只有在应用程序处于活动状态时才会调用此函数。如果应用程序未激活怎么办?
我读了一下,我读过的每个人都说没有办法做这样的事!但这有可能吗?
Apple如何管理提醒和日历的通知?他们是本地通知,他们更新图标徽章?还是我弄错了?我相信它必须是在本地通知发送时更新图标徽章的方法吗?
伙计们好吗?不敢相信苹果没有提供实现这一目标的方法!谢谢!
UNMutableNotificationContent有一个属性调用标记。你在触发de通知之前设置了这个属性就是这样!徽章编号属性是NSNumber,所以将它递增1会有点棘手。
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey:
"Your Last Time Alarm!", arguments: nil)
content.body = self.userInfo["descripcion"]!
content.sound = UNNotificationSound.default
content.badge = NSNumber(value: UIApplication.shared.applicationIconBadgeNumber + 1)
其余的设置触发器并添加请求:
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: idNotificacion, content: content, trigger: trigger)
let center = UNUserNotificationCenter.current()
center.add(request) { (error : Error?) in
if let theError = error {
print(theError)
} else {
...
}
}
为了能够为重复通知和预定通知增加徽章,您应该在配置通知之前增加UIApplication.shared.applicationIconBadgeNumber:
UIApplication.shared.applicationIconBadgeNumber += 1
然后简单地说:
let notificationContent = UNMutableNotificationContent()
notificationContent.title = "Test"
notificationContent.subtitle = "Test"
notificationContent.body = "Test"
notificationContent.sound = UNNotificationSound.default
notificationContent.badge = UIApplication.shared.applicationIconBadgeNumber as NSNumber
为了在每次用户打开应用程序时重置计数器,只需在AppDelegate.swift中将UIApplication.shared.applicationIconBadgeNumber的值设置为0,如下所示:
func applicationWillResignActive(_ application: UIApplication) {
UIApplication.shared.applicationIconBadgeNumber = 0
}