Все уведомления, исчезающие после открытия одного из них

У меня есть сервер, который отправляет мне push-уведомления и позволяет утверждать, что у меня есть 5 уведомлений на моем телефоне. Если я открою одно из них, все остальные уведомления исчезнут. Я хочу, чтобы только один нажал, чтобы исчезнуть.

Вот как я обрабатываю получение уведомлений:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    if ( application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background  )
    {
        // navigating user to a view controller
    }
    application.applicationIconBadgeNumber = 0
}

Ответ 1

Установив applicationIconBadgeNumber на 0, вы также удалите каждое уведомление из центра уведомлений.

Это также обсуждалось здесь: Приложение iOS: как очистить уведомления?

Кроме того, невозможно программно удалить одно уведомление, но с iOS8 on ОС будет обрабатывать это для вас, когда пользователь удаляет одно уведомление. Это также обсуждалось здесь: Удалить одно удаленное уведомление из Центра уведомлений

Ответ 2

Решение состоит в том, чтобы установить для applicationIconBadgeNumber действительное количество уведомлений, которые пользователь имеет в центре уведомлений. Я сделал функцию для этого:

func updateIconBadge() {
    UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
        DispatchQueue.main.async {
            UIApplication.shared.applicationIconBadgeNumber = notifications.count
        }
    }
}

Для получения дополнительной информации (например, где вызывать эту функцию) вы можете проверить мой оригинальный ответ здесь: fooobar.com/questions/2421591/...

Ответ 3

Решение состоит в том, чтобы установить для applicationIconBadgeNumber действительное количество уведомлений, которые пользователь имеет в центре уведомлений. Я сделал функцию для этого:

func updateIconBadge() {
    UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
        DispatchQueue.main.async {
            UIApplication.shared.applicationIconBadgeNumber = notifications.count
        }
    }
}

Для получения дополнительной информации (например, где вызывать эту функцию) вы можете проверить мой оригинальный ответ здесь: fooobar.com/info/2421591/...