как установить локальные уведомления между 8 утра и 8 вечера каждый день - PullRequest
0 голосов
/ 04 мая 2020

Так что я очень новичок в Swift и в настоящее время я настраиваю повторяющийся таймер каждые 30 минут после запуска приложения, но я хотел бы отправлять уведомления только с 8:00 до 20:00. Возможно ли это сделать без установки напоминания для каждого указанного c времени?

Вот как я сейчас это делаю.

override func viewDidLoad(){

let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.requestAuthorization(options: [.alert, .sound]) { (granted, error ) in
// enable or disable if needed.
    if granted {
        print("We have permission to send notifications")
    } else {
        print("We don't have the option to send notifications")
    }
}
notificationCenter.removeAllDeliveredNotifications()
notificationCenter.removeAllPendingNotificationRequests()

// The actual notification the user will receive
let notification    = UNMutableNotificationContent()
notification.title  = "You should have some water"
notification.body   = "It has been a long time since you had some water, why don't you have some."
notification.categoryIdentifier = "reminder"
notification.sound  = .default

let trigger     = UNTimeIntervalNotificationTrigger(timeInterval: (60*30), repeats: true)
let uuidString  = UUID().uuidString
let request     = UNNotificationRequest(identifier: uuidString, content: notification, trigger: trigger)
notificationCenter.add(request, withCompletionHandler: nil)
}

1 Ответ

1 голос
/ 04 мая 2020

К сожалению, вам нужно добавить запрос уведомления для каждого 30-минутного интервала в окне с 8:00 до 20:00. Каково ваше отвращение к этому подходу? Это просто для -l oop. Вместо использования UNTimeIntervalNotificationTrigger вы должны использовать UNCalendarNotificationTrigger.

let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.removeAllDeliveredNotifications()
notificationCenter.removeAllPendingNotificationRequests()

let startHour = 8
let totalHours = 12
let totalHalfHours = totalHours * 2

for i in 0...totalHalfHours {
    var date = DateComponents()
    date.hour = startHour + i / 2
    date.minute = 30 * (i % 2)
    print("\(date.hour!):\(date.minute!)")

    let notification = UNMutableNotificationContent()
    notification.title = "You should have some water"
    notification.body = "It has been a long time since you had some water, why don't you have some."
    notification.categoryIdentifier = "reminder"
    notification.sound  = .default

    let trigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
    let uuidString = UUID().uuidString
    let request = UNNotificationRequest(identifier: uuidString, content: notification, trigger: trigger)
    notificationCenter.add(request, withCompletionHandler: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...