确保在正确的时间ios上传递UILocalNotification

时间:2017-06-05 07:25:12

标签: ios swift uilocalnotification

我的本​​地通知存在问题:如果设备处于关闭状态或更改手机日期,则通知保持排队并与下一个通知一起开火。为什么呢?

因为需要非常关注通知日期.. 如何确保正确发送通知?

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

1 个答案:

答案 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 。 (虽然我再次确定你的计时器是否会自行重置。我认为它不应该是你的好处。