我正在用本地通知创建一个提醒,其中我必须注册一个带有某些标识符的本地通知,让我们说X,它应按定义的时间间隔触发,且无重复,同时我想注册相同的通知10分钟后使用相同的标识符,第一个被解雇。
在我的情况下,如果第一个通知被触发并且用户未对其执行任何操作,则在10分钟后,如果相同的通知被触发,则在通知中心(托盘)中不应有2条通知。相反,只有最后的通知应该在那里。
以下是我为完成此操作而执行的代码:
notificationContent.categoryIdentifier = Notification.Category.tutorial
let notificationTrigger1 = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
let request1 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger1)
center.add(request1, withCompletionHandler: {(_ error: Error?) -> Void in
if error == nil {
print("add NotificationRequest1 succeeded!")
center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
}
})
let notificationTrigger2 = UNTimeIntervalNotificationTrigger(timeInterval: 60*10, repeats: true)
let request2 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger2)
center.add(request2, withCompletionHandler: {(_ error: Error?) -> Void in
if error == nil {
print("add NotificationRequest2 succeeded!")
center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
}
})
在此代码中,问题在于第一个通知未触发,而10分钟后仅第二个通知被触发。
答案 0 :(得分:0)
您将两次删除先前计划的通知:
if error == nil {
print("add NotificationRequest2 succeeded!")
//remove previous notifications
center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
}
您应该在应用程序闲置时设置两个通知,前提是用户不会做出反应-这是设置这两个通知的唯一机会。
要在用户采取措施时删除第二个通知,就是在处理该操作的代码中删除不需要的通知,或者在应用程序激活时照顾该逻辑。