如何让我的应用程序 "up to date" - 后台获取?

How do bring my App "up to date" - background fetch?

我正在寻找制作应用程序的好方法 "upToDate"。这些是我的要求:

我有一个 RESTful Web 服务,具有针对不同用户的任务。每个用户都有一个 iOS 应用程序,当 Server/Service 向该用户分配任务时,该应用程序应该会自动更新。

所以我首先创建了一个手动 "Sync" 按钮,用于检查新任务。使用 Alamofire 获取数据,并更新 UI.

但是,我的目标是在有新任务时自动同步。

所以,我猜有两种不同的方法可以解决这个问题:

1.每 xx 分钟进行一次后台获取(使用 NStimer?)并检查是否有新任务。

在查看该教程后: http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial 我不确定后台获取是否是解决该问题的好方法。在那种情况下,应用程序使用调度程序来检查一次新更新,而不是每 xx 分钟一次。

所以在我的情况下,我会在 AppDelegate 中创建一个 NStimer(可能在 applicationDidEnterBackground 中)并每隔 xx 分钟检查一次新数据(但是当有 3 天没有任何新数据时任务,那将是不必要的电池消耗,或者?)

2。使用推送通知。

我的另一个想法是使用推送通知,所以当有新任务时,我会发送一个推送通知并手动启动同步。在我看来,这会使用更少的电池,因为他只会在有新任务可用时才开始同步。

关于使用后台服务的一般问题

好的,如果用户完成任务,一些数据应该会自动上传到服务器。通常不是问题,手动同步会检查是否有要上传的内容。但是,如果没有互联网连接(在上传之前我会检查是否) - 并且用户没有按 "manual sync".

怎么办?

所以我更愿意检查我的 "Background Service" 是否有互联网连接,如果是 - 开始上传一些数据。

我知道这不是一个特定的问题,但我认为有很多用户有相同的要求,如果有人能帮助我解决这个问题的最佳方法是最好和最实用的,那就太好了方式。

提前致谢!

后台更新听起来很棒,直到您意识到 Apple 严重限制了它们:您可以要求尽可能频繁地更新,但是 iOS 根据用户打开您的应用程序的频率来决定该值的实际含义,并且当他们这样做时。 Apple 认为后台更新应该发生在用户打开您的应用程序之前,这样最新的内容就在那里,而不是主动在后台运行。

您的推送通知解决方案更好,特别是如果您使用 CloudKit 订阅使用 CKSubscriptionCKNotificationInfo 的记录更改事件。如果您这样做,您将自动在您的应用程序中收到推送消息,因此您可以通过很少的工作获得您想要的。 You can read my tutorial for more information on subscribing to CloudKit to get push messages.