ios - 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 个,我需要一种机制来定期安排通知。即使应用程序在后台,也应该这样做。
如果您提供解决方案或指导我为这种情况找到解决方案,我会很高兴。
信息
我尝试设置一个计时器,定期检查待处理通知的总数及其截止日期。. 但它不起作用,因为一旦应用程序进入后台,计时器就不会触发。
解决方案
我不确定我是否正确理解您的问题。但我的印象如下:
您的用户设置和更新事件数据库,其中每个事件都有特定的日期和时间。
他们这样做只是将新事件输入数据库。然后很容易n
从数据库中获取第一个(比如 10 个)事件。需要获取多个,因为不能保证本地通知的传递,请参阅文档:
尽一切努力及时传递本地和远程通知,但不能保证传递。
将这些n
本地通知注册到通知中心,并取消任何不再属于n
下一个事件的通知。文档说:
通常,您会在条件发生变化并且不再需要通知用户时取消请求。例如,如果用户完成提醒,您将取消与该提醒关联的任何活动请求。要取消活动的通知请求,请调用 UNUserNotificationCenter 的
removePendingNotificationRequests(withIdentifiers:)
orremovePendingNotificationRequests(withIdentifiers:)
方法。
因此,即使您的应用程序处于后台或挂起状态,本地通知也会将其唤醒,处理事件,将其从数据库中删除,并更新n
下一个事件。即使无法传递通知(这不太可能,但可能),您也可以处理错过的事件,并安排下一个事件。
我希望这能满足你的要求!
推荐阅读
- c# - New DbContext 将旧数据放入数据库
- excel - 如果两个月之间的公式如何写平均值,但是月份应该是通用名称格式而不是日期?
- javascript - 比较特定时区的服务器日期
- python - 在 Raspberry Pi 上持续运行 Pimoroni buttonhim 的 Python 代码导致冻结
- javascript - 浏览器缓存 API 不适用于 cookie 身份验证服务
- r - 我们如何构建一个同时满足多个条件的循环/ if 语句?
- php - 如何将较低的 PHP 版本代码(codeigniter)运行到较高的 php 版本
- c# - 我将如何设置一个 StatusStrip,其中有 2 个 StatusLabels 在彼此下方
- java - 如何在 Junit5 中获取成功和不成功的断言列表
- sql-server - 如何在 if 语句之前创建列表?