10

我对 iOS 编程很陌生,现在想要实现定期后台同步以将我的服务器数据与客户端数据同步。我想要实现的与 Android 类似SyncAdapter,您可以定义时间间隔(例如每 30 分钟),系统将在后台自动触发定义的任务。

到目前为止,我还没有为 Swift 3.0 找到这样的机制,所以我需要询问是否有人有经验或一些提示我如何实现这一点。

我想做的事情听起来很简单:

当应用程序第一次启动时,应用程序应该设置一个同步管理器,它每 30 分钟自动触发一个后台任务。后台任务负责同步服务器和客户端数据(使用 Alamofire)。

我怎样才能做到这一点?

4

2 回答 2

13

有一个名为 的 iOS 功能BackgroundFetch,您可以为其设置

定期从网络下载和处理少量内容

您可以设置一个minimumBackgroundFetchInterval.

与上面提到的 Android 功能相比,这个间隔并不能保证。

操作系统在黑盒中进行了一些启发式操作。它奖励您使用“合理的”(对操作系统而言)CPU 时间/功耗以及用户经常使用的奖励。另一方面,您会因耗尽电池或(更糟糕的是)从未被用户使用/打开而受到惩罚。

请参阅:Apple 示例Apple Docs


更新:自 iOS13 以来,BackgroundFetch已弃用。

有一个类似的新 API,名为BGTaskBGAppRefreshTask相当于 deprecated BackgroundFetch

请参阅Apple 文档


或者,根据您的需要,您可以Silent (push) Notification在服务器端的用户数据更改时发布。静默推送会在不通知用户的情况下唤醒您的应用程序,因此您可以获取数据并可能通过安排本地通知来通知用户。

请参阅:Apple 文档

于 2016-10-30T12:15:35.113 回答
0

你不能。Apple 不允许 3rd 方应用程序有这样的常规后台时间。您需要想出另一种方法,例如在有新内容可用时从您的服务器实现静默推送通知。

正如@ekscrypto 在他们的评论中指出的那样,当系统决定获取数据时,您可以使用后台获取来加载少量数据。但是,您无法控制何时进行提取。在 Xcode 帮助系统中搜索“Fetching Small Amounts of Content Opportunistically”以获取更多信息。

于 2016-10-30T11:34:27.027 回答