Swift - 交付应用程序的本地通知图标徽章编号更新在后台

时间:2017-09-19 18:10:42

标签: ios swift uilocalnotification unusernotificationcenter

我想知道如何在传递本地通知时动态更新图标徽章编号。 在安排时注册徽章编号不是一种选择,因为如果我在任何交付之前注册了两个或更多通知

UIApplication.shared.applicationIconBadgeNumber // this will be zero 

在发送通知之前始终为零。

我可以将UNUsernotification委托与func

一起使用
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { } 

但只有在应用处于活动状态时才会调用此函数。 如果应用程序未激活怎么办?

我已经读了一下,几乎所有我读过的人都说没有办法做这样的事情!但这有可能吗?

Apple如何管理提醒和日历的通知?他们是本地通知,他们更新图标徽章?还是我弄错了?我相信它必须是在本地通知发送时更新图标徽章的方法吗?

任何想法的人?无法相信苹果公司没有提供实现这一目标的方法!谢谢!

2 个答案:

答案 0 :(得分:0)

UNMutableNotificationContent具有属性调用标记。您在触发通知之前设置了此属性,仅此而已! 徽章编号属性为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 {
       ...
    }
  }

答案 1 :(得分:0)

为了能够为重复通知和计划通知增加徽章,您应该在配置通知之前增加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
}