Увеличьте счетчик локальных уведомлений за 1 - PullRequest
1 голос
/ 22 февраля 2020

В настоящее время я пытаюсь внедрить локальные уведомления в свое приложение и столкнулся с проблемой невозможности увеличить счетчик значков после 1. По какой-то причине

Вот мой метод настройки и планирования уведомлений. .

func scheduleNotification() {

    let content = UNMutableNotificationContent()
    content.title = "\(self.title == "" ? "Title" : self.title) is done"
    content.subtitle = "Tap to view"
    content.sound = UNNotificationSound.default
    content.badge = 1

    if self.isPaused {
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: self.currentTime, repeats: false)
        let request = UNNotificationRequest(identifier: self.notificationIdentifier.uuidString, content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request)
    } else {
        removeNotification()
    }

}

По некоторым причинам, когда несколько уведомлений успешно запланированы и действительно доставлены, счетчик значков увеличивается только до 1, независимо от фактического количества доставленных уведомлений.

Есть ли правильный способ управления количеством значков, и это просто не правда ли?

1 Ответ

2 голосов
/ 22 февраля 2020

Вы должны подумать о том, что делает ваш код. Вы не увеличиваете количество значков, вы просто устанавливаете его на 1 каждый раз.

Вот один способ реализовать подсчет значков:

  1. Вам нужен способ сохранить отслеживание текущего количества значков. Одним из простых решений является использование пользовательских настроек по умолчанию.

  2. Когда вы планируете новое уведомление, вам нужно увеличить счетчик значков и не устанавливать его на c значение.

  3. Вы должны установить увеличенное количество значков для вашего уведомления.

  4. Когда приложение откроется, вы должны сбросить количество значков до нуля.

    func scheduleNotifications(notificationBody: String, notificationID: String) {
    
        //Your other notification scheduling code here...
    
        //Retreive the value from User Defaults and increase it by 1
        let badgeCount = userDefaults.value(forKey: "NotificationBadgeCount") as! Int + 1
    
        //Save the new value to User Defaults
        userDefaults.set(badgeCount, forKey: "NotificationBadgeCount")
    
        //Set the value as the current badge count
        content.badge = badgeCount as NSNumber
    
    }
    

И в вашем методе application(_:didFinishLaunchingWithOptions:) вы сбрасываете количество значков до нуля при запуске приложения:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


     UIApplication.shared.applicationIconBadgeNumber = 0
     userDefaults.set(0, forKey: "NotificationBadgeCount")

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...