Ежедневное локальное уведомление на iOS

Мне нужно сделать локальное уведомление, которое будет предупреждать пользователя ежедневно в 19:30.

Вот что я сделал:

var dateComponents = DateComponents()
    dateComponents.hour = 19
    dateComponents.minute = 30
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)    

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

    UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
    UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in
      if error != nil {
        debugPrint("center.add(request, withCompletionHandler: { (error)")
      } 
    })

Однако я обнаружил, что уведомление не приходит в 19:30. Вместо этого он предупреждает на 15 минут раньше. Кроме того, он не может будильник каждый день. Что я сделал не так?


person user6539552    schedule 11.07.2017    source источник


Ответы (1)


Используйте функцию ниже, чтобы запланировать уведомление:

func registerLocal() {
    let center = UNUserNotificationCenter.current()

    center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        if granted {
            print("Yas!")
        } else {
            print("Ohhh No!!")
        }
    }
}

func scheduleLocal() {
    let center = UNUserNotificationCenter.current()

    let content = UNMutableNotificationContent()
    content.title = "Drink Milk"
    content.body = "Two Servings A Day Keeps Bone Problems At Bay."
    content.categoryIdentifier = "alarm"
    content.userInfo = ["customData": "whater"]
    content.sound = UNNotificationSound.default()

    var dateComponents = DateComponents()
    dateComponents.hour = 19
    dateComponents.minute = 30

    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)

    let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
    center.add(request)
}
person Bhavesh Dhaduk    schedule 11.07.2017
comment
Я уже сделал функцию registerLocal(), просто я не публиковал ее здесь, так как она не в центре внимания. Приведенный выше код по-прежнему не будет вызывать оповещение в 19:30 ежедневно. - person user6539552; 11.07.2017
comment
Как вы тестируете @user6539552 - person Bhavesh Dhaduk; 11.07.2017
comment
Это нормально для первого сигнала тревоги, но он не повторяется!! - person user6539552; 13.07.2017
comment
если у меня есть два запланированных уведомления, они имеют разные идентификаторы и содержимое. Я использовал код UNUserNotificationCenter.current().removeAllPendingNotificationRequests(), удалит ли это ожидающие уведомления друг друга? - person user6539552; 13.07.2017