我正在我的应用程序中显示通知,并且我很难根据通知的数量递增徽章编号。我的代码如下:
func notifcation(model: Model) -> Void {
let calendar = Calendar.current
guard let date = model.remiderDate else {return}
let title = model.name
let body = model.desc
let comp2 = calendar.dateComponents([.year,.month,.day,.hour,.minute], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: comp2, repeats: true)
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.default()
content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber
let identifier = "\(date)"
let request = UNNotificationRequest(identifier: identifier,
content: content, trigger: trigger)
center.add(request, withCompletionHandler: { (error) in
if let error = error {
// Something went wrong
print(error as Any)
}
})
}
我能够获得多个通知,但我无法增加徽章值以反映通知的数量。
如果应用程序当前正在运行,则应用程序通知也不会显示,但如果应用程序在后台,通知也会起作用。
您可以使用以下方法增加徽章:
UIApplication.shared.applicationIconBadgeNumber += 1
要么 :
content.badge = NSNumber(integerLiteral: UIApplication.shared.applicationIconBadgeNumber + 1)
要在应用程序位于前台时接收通知,您的视图控制器应符合UNUserNotificationCenterDelegate
协议并实现userNotification:willPresent
方法,然后将您的视图控制器声明为viewDidLoad()
中的通知委托:
class ViewController: UIViewController, UNUserNotificationCenterDelegate {
override func viewDidLoad() {
super.viewDidLoad()
//...
UNUserNotificationCenter.current().delegate = self
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound])
}
}
有关本地通知的更多信息,请查看qazxsw poi。
实际上这行here是误导性的。 Serverside拥有自己的应用程序徽章编号密钥。如果您想要对徽章委员会进行完全控制,与您的用户操作相关,则必须在content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber
上实现一些逻辑以反映所需的行为。类似UIApplicationDelegate
轮询的缓存和使用该缓存的逻辑。当您的应用程序进入前台以清理徽章时,请调用它。如果您的APNS服务器端向您发送静态徽章计数 - 与他们交谈。据我所知,如果您的应用程序未运行且未调用回调,则无法从服务器更正错误的徽章计数
编辑:可能我在问题中混淆了推送和本地通知。将留下答案作为提醒我,阅读问题两次(至少):)