Увеличение значения значка в зависимости от количества уведомлений - PullRequest
0 голосов
/ 08 сентября 2018

Я показываю уведомления в своем приложении, и у меня возникают трудности с увеличением номера значка в зависимости от количества уведомлений. Мой код указан ниже:

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

Я могу получить несколько уведомлений, но не могу увеличить значение значка, чтобы отразить количество уведомлений.

Уведомление приложения также не отображается, если приложение в данный момент запущено, но уведомления работают, если приложение находится в фоновом режиме.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

На самом деле эта строка content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber ошибочна. Серверная часть имеет свой собственный ключ для номера значка приложения. Если вы хотите получить полный контроль над количеством значков, связанных с вашими действиями пользователя, вы должны реализовать некоторую логику в UIApplicationDelegate, чтобы отразить желаемое поведение. Что-то вроде кеша numbers vs actions опроса и логики для работы с этим кешем. Позвоните, когда ваше приложение выйдет на передний план для очистки значка. Если ваша сторона сервера APNS отправляет вам статический счетчик значков - поговорите с ними. Насколько я знаю, нет способа исправить неверное количество значков с сервера, если ваше приложение не запущено и обратные вызовы не называются

РЕДАКТИРОВАТЬ: возможно, я перепутал push и локальные уведомления в вопросе. Оставит ответ как напоминание для меня, чтобы прочитать вопрос дважды (как минимум):)

0 голосов
/ 09 сентября 2018

Вы можете увеличить значок, используя это:

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

Подробнее о местных уведомлениях смотрите здесь .

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