Ios 确保在正确的时间发送UILocalNotification

Ios 确保在正确的时间发送UILocalNotification,ios,swift,uilocalnotification,Ios,Swift,Uilocalnotification,我的本地通知有一个问题:如果设备处于关闭状态或更改电话日期时,,通知将保持在队列中,并与下一个通知一起触发。为什么? 因为需要非常关注通知日期。。 如何确保通知的正确送达 我们应该把删除过期通知的代码放在哪里?那么你的意思是,你有一个名为ABC的通知将在30分钟内触发…但是你关闭iPhone 3小时…然后打开它,并看到该通知ABC通知,即使时间已过?好的。除非您使用removeDeliveredNotifications(带标识符:)删除通知,否则通知仍将存在 基本上叫: UNUserNotif

我的本地通知有一个问题:如果设备处于关闭状态或更改电话日期时,,通知将保持在队列中,并与下一个通知一起触发。为什么?

因为需要非常关注通知日期。。 如何确保通知的正确送达


我们应该把删除过期通知的代码放在哪里?

那么你的意思是,你有一个名为ABC的通知将在30分钟内触发…但是你关闭iPhone 3小时…然后打开它,并看到该通知ABC通知,即使时间已过?好的。除非您使用
removeDeliveredNotifications(带标识符:)
删除通知,否则通知仍将存在

基本上叫:

UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["notificationIdentifer1", "notificationIdentifer2"]).
有关更多信息,请参阅本WWDC视频的此部分

另请参见“4.管理通知”一节中的此外观

至于您的编辑地址:

老实说,我不确定……但我认为你应该这样做:

我建议创建创建通知的类:

步骤1:符合
UNUserNotificationCenterDelegate

步骤2:实施:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse,
 withCompletionHandler completionHandler: @escaping () -> Void) {
}
现在你们已经打开了你们的设备…这个函数只有在应用程序在后台时才会被调用。在那里你有机会杀死你的过时通知

这个函数在前台和后台都被调用,如果它是后台,那么你可以在第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
更改为
直到IntervalNotificationTrigger
。(不过我也不确定你的计时器是否自动重置。我认为不应该重置,而且你很好)。

可能的重复或可能的重复。如果你使用的是iOS 10,那么我的答案中的链接会有足够的信息…在你的标题中,你的意思是正确的还是最新的?所以用户需要在打开设备后再次打开应用程序来运行我们的代码right@Saranjith请参阅我的编辑。但我和你一样在学习。没有测试我自己的建议:/但希望它们能为您工作。感谢您的努力,我一直怀疑-现在您已打开设备…只有在应用程序处于后台时才会调用此功能。当设备打开时,我的应用程序将如何在后台运行?@Saranjith我可能错了,但据我所知,没有办法实现您想要的。尽管您仍然可以使用不推荐使用的UILocalNotification。使用它,即使应用程序在后台并且刚刚打开,你们也会得到一个触发器。但它注定会在即将推出的iOS版本中出现