根据通知数增加徽章价值

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

我正在我的应用程序中显示通知,并且我很难根据通知的数量递增徽章编号。我的代码如下:

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)
        }
    })
}

我能够获得多个通知,但我无法增加徽章值以反映通知的数量。

如果应用程序当前正在运行,则应用程序通知也不会显示,但如果应用程序在后台,通知也会起作用。

ios swift notifications
2个回答
2
投票

您可以使用以下方法增加徽章:

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。


0
投票

实际上这行here是误导性的。 Serverside拥有自己的应用程序徽章编号密钥。如果您想要对徽章委员会进行完全控制,与您的用户操作相关,则必须在content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber上实现一些逻辑以反映所需的行为。类似UIApplicationDelegate轮询的缓存和使用该缓存的逻辑。当您的应用程序进入前台以清理徽章时,请调用它。如果您的APNS服务器端向您发送静态徽章计数 - 与他们交谈。据我所知,如果您的应用程序未运行且未调用回调,则无法从服务器更正错误的徽章计数

编辑:可能我在问题中混淆了推送和本地通知。将留下答案作为提醒我,阅读问题两次(至少):)

© www.soinside.com 2019 - 2024. All rights reserved.