我有一个允许用户创建重复事件的应用程序。在一天的特定时间,每个事件可能都具有或不具有提醒/警报。如果有的话,该应用会在一天的该时间发送本地通知。
事件存储在 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个,我需要一种机制来定期安排通知。即使应用程序在后台,也应该这样做。
如果您提供解决方案或指导我针对这种情况找到解决方案,我将非常高兴。
我尝试设置一个计时器,该计时器会定期检查待处理通知的总数及其到期日期。 。但这没有用,因为一旦应用程序进入后台,计时器就不会触发。
答案 0 :(得分:2)
我不确定我是否理解您的问题。但是我的印象如下:
您的用户建立并更新事件数据库,其中每个事件都有特定的日期和时间。
他们只需将新事件输入数据库即可。
然后很容易从数据库中获取前n
个事件(例如10个)。
由于无法保证传递本地通知,因此需要获取多个消息,请参见the docs:
尽一切努力在本地传递远程通知。 及时,但不能保证交货。
在通知中心注册这些n
本地通知,并取消不再属于n
下一个事件的所有通知。 The docs说:
通常,当条件发生变化时您取消请求,而您没有 不再需要通知用户。例如,如果用户完成 提醒您,您将取消与此相关的所有活动请求 提醒。要取消有效的通知请求,请致电
removePendingNotificationRequests(withIdentifiers:)
或removePendingNotificationRequests(withIdentifiers:)
种方法 UNUserNotificationCenter。
因此,即使您的应用程序处于后台或挂起状态,本地通知也会将其唤醒,处理该事件,将其从数据库中删除并更新n
下一个事件。即使无法发送通知(这不可能,但是可能),您也可以处理错过的事件并安排下一个事件。
希望这符合您的要求!
答案 1 :(得分:1)
您是否尝试过后台获取功能?官方文档链接here。
在我看来,最好使用远程通知,只需设置一个简单的服务器来存储用户的数据即可。