我为Android编写了一个应用程序,它可以监听传入的日历事件,并在应用程序处于后台时触发我的流程。
现在我试着在iOS上做同样的事情。
我读了很多东西,并运行了一些使用EKEventStore
和后台获取的演示。
但是这个方法不能让我满意。
还有其他方法吗?
[编辑]
应用程序只使用公共API。谢谢,
简短的回答是你不能。苹果不会允许任何应用程序在后台做这样的事情,因为它需要在CPU关闭时打开它。
当你的应用程序正在运行时,你可以在不久的将来读取所有事件(比如,两周后?),并为事件时间设置"本地"推送通知。
同样,如果用户经常启动你的应用,那么苹果将允许你的应用使用后台应用刷新进行刷新。该设备通常会在用户每天早上醒来并第一次打开手机之前进行这项工作,并根据用户的活动在全天进行这项工作。你可以在后台刷新app时做任何你想做的事情。
另一个问题是苹果的全磁盘加密是如何工作的。如果手机是锁定的,那么你的应用程序就无能为力了。手机上的大部分数据都是用用户密码加密的。在用户输入密码之前,什么也做不了。在这种情况下,后台应用程序刷新将运行只要他们输入他们的密码,但在他们启动你的应用程序。
也许你可以让远程服务器也向手机发送推送通知。我不确定这是否适合你。显然,这意味着服务器需要访问用户的日历数据。
一般来说,Android的后台执行模式并不适用于iOS。
您可以注册日历事件,如下所示,但您的应用程序只会在运行时收到通知。在iOS上,这意味着它要么在前台,最近后台仍在运行,要么被系统作为指定后台模式的一部分启动/唤醒(例如后台获取,位置更新,VoIP等)。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveEventStoreChangedNotification:)
name:EKEventStoreChangedNotification
object:eventStore];
如果您的应用程序需要指定的后台模式之一,您至少会不时收到通知(当您被唤醒时)。我曾见过一些获得批准的应用使用位置更新只是为了获得更多的执行时间。