在为其设置的时间之前触发所有待处理的通知

Posted

技术标签:

【中文标题】在为其设置的时间之前触发所有待处理的通知【英文标题】:Triggering all pending notifications before the time set for it 【发布时间】:2018-02-16 13:12:41 【问题描述】:

在我正在开发的应用程序中,有一个选项可以在为所述通知设置的实际时间之前触发通知 x 时间量。例如,我将提醒设置为 10:00。但是在应用程序的本地设置中,我将通知设置为在设置的时间前 10 分钟触发。因此,在本例中,通知将在 9:50 触发。

现在,我可以在设置个人通知时间时执行上述操作。但我想做的是在为它设置的实际时间之前触发所有待处理的通知。

这是我用来设置通知的函数:

func scheduleNotification(at date: Date, identifier: String, threadIdentifier: String, body: String) 
    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents(in: .current, from: date)
    let newComponents = DateComponents(calendar: calendar, timeZone: .current, year: components.year, month: components.month, day: components.day, hour: components.hour, minute: components.minute)

    let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false)

    let content = UNMutableNotificationContent()
    content.title = "TestNotification"
    content.body = body
    content.threadIdentifier = threadIdentifier
    content.sound = UNNotificationSound.default()

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

    UNUserNotificationCenter.current().add(request) 
        error in

        if let error = error 
            print("Error in delivering notification. Error: \(error.localizedDescription)")
        
    

日期来自日期选择器设置的日期。我尝试使用以下代码更改触发器属性:

UNUserNotificationCenter.current().getPendingNotificationRequests  (requests) in
    for request in requests 
            request.trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10*60, repeats: false)
    

但现在我收到一条错误消息,提示“触发器”是一个仅限获取的属性。

【问题讨论】:

【参考方案1】:

无法更改已安排通知的触发时间,您可以将其全部删除并重新安排时间

【讨论】:

全部重新安排,是不是要重新一个一个地设置通知? 通常你会将每个通知与 id 关联以循环所有并更改特定的通知,但如果你想更改所有通知的触发时间,那么一个接一个

以上是关于在为其设置的时间之前触发所有待处理的通知的主要内容,如果未能解决你的问题,请参考以下文章

ServiceNow 推送通知卡在“待处理”中

当重复设置为“是”时,UNUserNotification 不会从待处理通知中删除 - Swift

rocketmq之顺序消费

从一张桌子获取待处理的好友请求

立即在 WooCommerce 中设置待处理订单并发送处理电子邮件通知

Django 抽象模型 + DB 迁移:测试抛出“无法更改表,因为它有待处理的触发事件”