【问题标题】:Assure Delivery Of UILocalNotification on correct time ios确保在正确的时间 ios 交付 UILocalNotification
【发布时间】:2017-06-05 07:25:11
【问题描述】:

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

由于需要非常关心通知的日期.. 如何保证通知的正确传递?

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

【问题讨论】:

标签: ios swift uilocalnotification


【解决方案1】:

所以你的意思是你有一个名为 ABC 的通知要在 30 分钟内触发......但是你关闭你的 iPhone 3 小时......然后打开它并看到通知 ABC 通知,即使它的时间已经过去了? AFAIK ....通知将仍然存在除非您使用 removeDeliveredNotifications(withIdentifiers:) 将其删除。

基本调用:

UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: ["notificationIdentifer1", "notificationIdentifer2"]).

有关更多信息,请参阅此 WWDC 视频的 moment

另见tutorial 查找“4.管理通知”部分

关于您的编辑:

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

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

第一步:符合UNUserNotificationCenterDelegate

第二步:实施:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse,
 withCompletionHandler completionHandler: @escaping () -> Void) {
}

现在您已打开设备...在应用处于后台时才会调用此函数。在那里你有机会杀死你过时的通知。

这个函数在前台和后台都被调用,如果是后台,那么你可以在step3之后杀死过时的通知,如果前台很好,那么你不需要做任何事情,它会自己发送队列,因为它被显示!

第三步:

你实现的功能做了:

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

【讨论】:

  • 所以需要用户在打开设备后再次打开应用才能正确运行我们的代码
  • @Saranjith 看到我的编辑。但我和你一样在学习。没有测试我自己的建议:/ 但希望它们对你有用。
  • 感谢您所做的努力,我对此表示怀疑 - 现在您已打开设备...仅当应用程序在后台时才会调用此函数。 我的应用程序将如何设备开机时是否在后台?
  • @Saranjith 我可能错了,但据我所知,没有办法实现你想要的。尽管您仍然可以使用已弃用的 UILocalNotification。即使应用程序在后台并且刚刚打开,使用它你也会得到一个触发器。但它注定会闯入即将推出的 iOS 版本
猜你喜欢
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多