我正在写我的第一个iOS应用程序(我厌倦了丢失的事件提醒,并希望有一个基于规则的提醒,例如对于某些日历和某些人来说,将会响起一个不同的,更响亮的音调,10,5和0分钟在活动前)
第一部分是访问日历,并感谢this的伟大的演示,我有这样的覆盖.在我的iPhone上运行的应用程序,我可以看到我的日历事件.
(好的,第一部分是弄清楚迅速,一般的iOS基础,我还在工作)
第二部分是在我花几个小时研究之前想问的地方.我有两个工作要做
>定期检查日历以进行新的/更新的事件的后台任务,或以编程方式订阅某种事件总线的功能的任何日历更新(新事件,事件更改)
>在给定时间安排通知(我可能会使用这个:How can I schedule local notification for the following scenario?)
如何完成#1?
解决方法
我不认为没有设计变更可以实现.
应用程序通常不会在后台运行,并且在Apple允许它(voip,音乐,位置等)的非常具体的情况之外,您的应用程序将被暂停.有背景刷新API,但这不够可靠.
请注意,EKEventStoreChangedNotification通知只有在您的进程运行时才有效.如果您的进程中断(由于内存压力,设备重新启动,用户杀死应用程序等),在启动应用程序时,不会收到有关更改的通知,您仍然必须遍历会议并查找更改,所以你必须开发自己的机制来迭代EventKit数据库(也许在一定的时间内).
如果它是一个个人应用程序,您可以在后台继续运行一些技巧,例如播放静音音乐文件,voip后台API,位置等).所有这些方法可以让您的应用程序在后台运行,但会对电池寿命造成损失,并且在提交后不会被Apple批准.具有一致的后台运行时的一种方法是使推送通知服务设置静默推送以定期唤醒应用程序,并让其执行其逻辑.这有可能启动应用程序,以防它在后台被杀死(但不是如果用户杀死它).