gpt4 book ai didi

ios - 确保在正确的时间 ios 交付 UILocalNotification

转载 作者:搜寻专家 更新时间:2023-11-01 07:12:02 28 4
gpt4 key购买 nike

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

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

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

最佳答案

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

基本上调用:

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

有关更多信息,请参阅此 moment这段 WWDC 视频。

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

关于处理您的编辑:

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

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

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

关于ios - 确保在正确的时间 ios 交付 UILocalNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com