Как работает iOS локальная очередь уведомлений для UNTimeIntervalNotificationTrigger? - PullRequest
0 голосов
/ 01 мая 2020

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

Когда я вызываю scheduleManyNotes () ниже, я распечатываю ожидающие уведомления и вижу только 1. Почему эти уведомления группируются в 1?

func scheduleManyNotes() {

    for x in 0...4 {
        scheduleNote("note \(x)", (x * 60) + 5)
    }

    notificationCenter.getPendingNotificationRequests(completionHandler:{reqs in
        for request in reqs {
            print(request)
        }
    })
}

func scheduleNote(_ msg: String, _ delaySec: Int) {
    let content = UNMutableNotificationContent()
    content.sound = UNNotificationSound.default
    content.body = msg
    content.badge = NSNumber(integerLiteral: delaySec)
    content.categoryIdentifier = msg
    let trigger = delaySec == 0 ? nil : UNTimeIntervalNotificationTrigger(timeInterval: Double(delaySec), repeats: false)
    let request = UNNotificationRequest(identifier: "identifier", content: content, trigger: trigger)

    NSLog("Scheduling Request \(msg)")

    notificationCenter.add(request) { (error) in
        if let error = error {
            NSLog("Error \(error.localizedDescription)")
        }
    }
}

1 Ответ

0 голосов
/ 02 мая 2020

Проблема в том, что я использовал один и тот же идентификатор для всех уведомлений TimeInterval. Один раз я изменил идентификатор, чтобы он был уникальным для каждого запроса, затем у меня было 5 уникальных запросов.

// Original

    let request = UNNotificationRequest(identifier: "identifier", content: content, trigger: trigger)


// Modfified

    let uid = UUID.init().uuidString
    print("hopefully unique uuid:\(uid)")
    let request = UNNotificationRequest(identifier: uid, content: content, trigger: trigger)
...