如何在后台iOS中应用时收听日历事件?

时间:2014-03-26 22:12:56

标签: ios ekeventstore

我编写了Android应用程序,用于监听传入的日历事件,并在后台应用程序时触发我的流程。

现在我尝试为iOS做同样的事情。

我阅读了很多内容并运行了一些使用EKEventStore后台提取的演示。

然而,这种做法并不能让我满意。

还有其他办法吗?

[编辑]

应用程序仅使用公共API。

谢谢,

2 个答案:

答案 0 :(得分:5)

简短的回答是你不能。 Apple不会允许任何应用程序在后台执行此类操作,因为它需要在关闭时打开CPU。

当您的应用程序运行时,您可以在不久的将来阅读所有活动(例如,两周后?)并为活动时间设置“本地”推送通知。

此外,如果用户经常启动您的应用,那么Apple将允许您的应用使用后台应用刷新进行刷新。设备通常会在用户通常每天醒来并在每天第一次打开手机之前的早晨,以及根据用户的活动在一整天内完成此操作。您可以在后台应用刷新期间执行任何操作。

另一个正在进行的工作是Apple的全盘加密工作方式。如果手机被锁定,那么您的应用程序确实无法做到。手机上的大多数数据都是使用用户的密码加密的。直到用户输入他们的密码不能做多少。在这种情况下,后台应用刷新将在他们输入密码后立即运行,但在他们启动您的应用之前。

也许您可以让远程服务器向手机发送推送通知。不确定这是否适合您。显然,这意味着服务器需要访问用户的日历数据。

答案 1 :(得分:4)

一般来说,后台执行的Android模型不适用于iOS。

您可以注册日历活动,如下所示,但您的应用程序只会在运行时收到通知。在iOS上,这意味着它处于前台,最近是后台并且仍在运行,或者已经被系统启动/唤醒,作为指定后台模式的一部分(例如,后台获取,位置更新,VoIP等)。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(receiveEventStoreChangedNotification:)
                                             name:EKEventStoreChangedNotification
                                           object:eventStore];

如果您的应用程序需要其中一种指定的后台模式,您至少会收到通知(当您被唤醒时)。我看到批准的应用程序使用位置更新只是为了获得更多的执行时间,当然是YMMV。