首页 > 解决方案 > ios - 安排无限数量的本地通知

问题描述

我有一个允许用户创建重复事件的应用程序。每个事件在一天中的特定时间可能有也可能没有提醒/警报。如果有,该应用程序会在当天的那个时间发送本地通知。

事件存储在CoreData中。

Event(name: "Go to London", 
  date: 2020-04-03 21:40:55.419925+0200, 
  reminders: [2020-04-03 20:00:00.419925+0200, 
  2020-04-03 10:00:00.419925+0200, 
  2020-04-03 12:00:00.419925+0200]
)

事件可能发生在一年中的每一天或接下来 X 年的每一天。

用户每天可以创建无限数量的事件。因此,要发送的通知总数很容易超过 64(您可以在 iOS 中安排的本地通知总数)。因此,当应用程序处于前台时,我无法安排所有通知。

如果待处理的通知少于 64 个,我需要一种机制来定期安排通知。即使应用程序在后台,也应该这样做。

如果您提供解决方案或指导我为这种情况找到解决方案,我会很高兴。

信息

我尝试设置一个计时器,定期检查待处理通知的总数及其截止日期。. 但它不起作用,因为一旦应用程序进入后台,计时器就不会触发。

标签: iosswiftnotifications

解决方案


我不确定我是否正确理解您的问题。但我的印象如下:

您的用户设置和更新事件数据库,其中每个事件都有特定的日期和时间。
他们这样做只是将新事件输入数据库。然后很容易n从数据库中获取第一个(比如 10 个)事件。需要获取多个,因为不能保证本地通知的传递,请参阅文档

尽一切努力及时传递本地和远程通知,但不能保证传递。

将这些n本地通知注册到通知中心,并取消任何不再属于n下一个事件的通知。文档说:

通常,您会在条件发生变化并且不再需要通知用户时取消请求。例如,如果用户完成提醒,您将取消与该提醒关联的任何活动请求。要取消活动的通知请求,请调用 UNUserNotificationCenter 的 removePendingNotificationRequests(withIdentifiers:)or removePendingNotificationRequests(withIdentifiers:)方法。

因此,即使您的应用程序处于后台或挂起状态,本地通知也会将其唤醒,处理事件,将其从数据库中删除,并更新n下一个事件。即使无法传递通知(这不太可能,但可能),您也可以处理错过的事件,并安排下一个事件。
我希望这能满足你的要求!


推荐阅读