gpt4 book ai didi

ios - Swift 通知 - 触发日期后的重复间隔

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:29 24 4
gpt4 key购买 nike

我正在使用 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)

最佳答案

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)
}

希望这对您有所帮助。 :)

关于ios - Swift 通知 - 触发日期后的重复间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com