Как отправить локальное уведомление UNTimeInterval, начиная с определенного времени в swift [iOS]

Я хочу отправлять локальное уведомление каждые 8 ​​часов, начиная с определенного времени. Например, сейчас мы в 10 часов утра, но я хочу, чтобы вы каждые 8 ​​часов, начиная с 12 часов, уведомляли меня, как я могу это сделать.

У меня есть этот код:

let content: UNMutableNotificationContent = UNMutableNotificationContent()
content.title = "Alert!"
content.body = "Alert"
content.categoryIdentifier = "alarm"

let request = UNNotificationRequest(
    identifier: "AA",
    content: content,
    trigger: UNTimeIntervalNotificationTrigger(timeInterval: 8*3600, repeats: false)
)

let action = UNNotificationAction(identifier: "remindLater", title: "remind_me_later".localized(), options: [])
let category = UNNotificationCategory(identifier:"pill-alarm", actions: [action], intentIdentifiers: [], options: [])

UNUserNotificationCenter.current().setNotificationCategories([category])
UNUserNotificationCenter.current().add(request)

1 ответ

Итак, у меня была та же проблема, что и я:

Допустим, у вас срабатывает будильник каждые 8 ​​часов, начиная с 12 и сейчас 10 утра. Я сделал некоторые вычисления и создал несколько повторяющихся уведомлений:

Первое уведомление будет ежедневно в 12, второе уведомление будет ежедневно в 20, третье уведомление будет ежедневно в 4.

вы создаете их так:

var date = DateComponents()
date.hour = hour
date.minute = minutes

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

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

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

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

Сначала вам нужно создать триггерную дату вместо временного интервала

Нравится:

let date = Date(timeIntervalSinceNow:  8*3600 + extraTime) // extraTime = time interval between 8 to 12
let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: date)

Теперь используйте дату запуска в запросе

let request = UNNotificationRequest(
    identifier: "AA",
    content: content,
    trigger: UNTimeIntervalNotificationTrigger(timeInterval: triggerDate, repeats: false)
)

для получения дополнительной ссылки: https://useyourloaf.com/blog/local-notifications-with-ios-10/

Другие вопросы по тегам