我的本地通知存在问题:如果设备处于关闭状态或更改手机日期,则通知保持排队并与下一个通知一起开火。为什么呢?
因为需要非常关注通知日期.. 如何确保正确发送通知?
我们应该在哪里放置删除过期通知的代码?
答案 0 :(得分:2)
所以你的意思是你有一个名为ABC的通知会在30分钟内被触发......但是你将iPhone关闭了3个小时......然后打开它并看到通知ABC通知,即使它的时间已经过去了? AFAIK ....通知仍然会在,除非您使用removeDeliveredNotifications(withIdentifiers:)
将其删除。
基本上打电话:
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["notificationIdentifer1", "notificationIdentifer2"]).
有关详细信息,请参阅此WWDC视频的moment。
另请参阅此tutorial查找" 4部分。管理通知"
至于解决您的修改问题:
说实话,我不确定......但是我认为你应该这样做:
我建议创建通知的类:
第1步:符合UNUserNotificationCenterDelegate
第2步:实施:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
}
现在你开启了你的设备......如果应用程序在后台,这个功能只会被称为 。在那里你有机会杀死过时的通知。
此功能在前景和后台都被调用,如果它的背景是你可以在步骤3后杀死过时的通知,如果它的前景很好,那么你不需要做任何事情,它发送队列本身,因为它显示了!
<强>步骤3:强>
内部您实施的功能:
UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: {deliveredNotifications -> () in
print("\(deliveredNotifications.count) Delivered notifications-------")
for notification in deliveredNotifications{
if (someCondition){
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["notificationIdentifer1", "notificationIdentifer2"]).
}
}
})
至于iPhone时间更改问题......您应该提出合理的条件并找到通知并将其删除......或者只是将通知触发器从UNCalendarNotificationTrigger
更改为UNTimeIntervalNotificationTrigger
。 (虽然我再次确定你的计时器是否会自行重置。我认为它不应该是你的好处。