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