我正在使用UNUserNotification向用户发送本地通知。我想首先在我从时间选择器计算的开始时间发送通知。在第一次通知后,我想每15分钟发送一次提醒。有没有办法设置日历的触发器和时间间隔?
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH"
let hour = dateFormatter.string(from: _notificationTime)
dateFormatter.dateFormat = "mm"
let minutes = dateFormatter.string(from: _notificationTime)
var dateComponents = DateComponents()
dateComponents.hour = Int(hour)
dateComponents.minute = Int(minutes)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
let content = UNMutableNotificationContent()
content.body = "Hi " + settings.username + ".\nHast du deine Pille schon genommen?"
content.categoryIdentifier = "takePill"
content.userInfo = ["customData": "takePill"]
content.sound = UNNotificationSound.default()
if let path = Bundle.main.path(forResource: "DontForget", ofType: "PNG") {
let url = URL(fileURLWithPath: path)
do {
let attachment = try UNNotificationAttachment(identifier: "DontForget", url: url, options: nil)
content.attachments = [attachment]
} catch {
print("The attachment was not loaded.")
}
}
let pillTakenAction = UNNotificationAction(identifier: "pillTakenAction", title: "Pille eingenommen", options: [])
let pillTakenCategory = UNNotificationCategory(identifier: "pillTakenCategory", actions: [pillTakenAction], intentIdentifiers: [], options: [])
center.setNotificationCategories([pillTakenCategory])
content.categoryIdentifier = "pillTakenCategory"
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
答案 0 :(得分:0)
UNNotificationTrigger
有一个属性repeats
,用于确定是否应重复通知。通过将该属性设置为true,可以指定需要在给定日期重复通知。
在上面的代码中:
var dateComponents = DateComponents()
dateComponents.hour = Int(hour)
dateComponents.minute = Int(minutes)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
您已将该属性指定为true,这将在特定时间dateComponents
重复通知。
要实现此目的,您可以使用UNTimeIntervalNotificationTrigger
。首先,在指定时间安排UNCalanderNotificationTrigger
。调用此通知后,您可以在userNotificationCenter(_ center:, didReceive response:, withCompletionHandler completionHandler:)
功能中安排UNTimeIntervalNotificationTrigger
每15分钟重复一次。
您的代码看起来像
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: (15*60), repeats: true)
let content = UNMutableNotificationContent()
content.body = "Hi " + settings.username + ".\nHast du deine Pille schon genommen?"
content.categoryIdentifier = "takePill"
content.userInfo = ["customData": "takePill"]
content.sound = UNNotificationSound.default()
if let path = Bundle.main.path(forResource: "DontForget", ofType: "PNG") {
let url = URL(fileURLWithPath: path)
do {
let attachment = try UNNotificationAttachment(identifier: "DontForget", url: url, options: nil)
content.attachments = [attachment]
} catch {
print("The attachment was not loaded.")
}
}
let pillTakenAction = UNNotificationAction(identifier: "pillTakenAction", title: "Pille eingenommen", options: [])
let pillTakenCategory = UNNotificationCategory(identifier: "pillTakenCategory", actions: [pillTakenAction], intentIdentifiers: [], options: [])
center.setNotificationCategories([pillTakenCategory])
content.categoryIdentifier = "pillTakenCategory"
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
}
希望这会有所帮助。 :)