2016-10-30 52 views
4

我对iOS编程颇为陌生,现在想要实现定期的后台同步来同步我的服务器数据和客户端数据。我想实现的目标与Androids SyncAdapter相媲美,您可以在其中定义一个时间间隔(例如每30分钟),系统将在后台自动触发定义的任务。定期后台同步

到目前为止我无法找到Swift 3.0的这种机制,所以我需要问问somone是否对我有经验或一些提示,我可以如何实现这一点。

我想要做什么听起来很简单:

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

我该怎么做?

回答

6

有一个叫BackgroundFetch在iOS功能,您可以从网络

你可以设置一个minimumBackgroundFetchInterval成立

定期下载和处理少量的内容。

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

操作系统在黑匣子中进行一些启发式操作。它会奖励您使用“合理的”(对操作系统)CPU时间/功耗,并且经常由用户使用。另一方面,你会因为耗尽电池而受到惩罚,如果你的应用从未被使用过,则更糟。

请参见:Apple Documentation


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

参见:Apple Documentation

+0

您受到的处罚是什么意思? –

+0

@AkashRajput你会因为获得更少的时间而受到惩罚,即你的背景获取次数会减少。 – shallowThought

1

你不行。 Apple不允许第三方应用程序具有这样的常规背景时间。您需要提供另一种方法,例如在新内容可用时从您的服务器实施silent push notification

+0

WOW!你认真对待这个?这听起来令人难以置信,因为我没有这样的功能。我在谷歌上找到的'NSBackgroundActivityScheduler'怎么样,但在Swift 3.0中它不存在。 – Mulgard

+0

您可以从文档 - https://developer.apple.com/reference/foundation/nsbackgroundactivityscheduler中看到 - “NSBackgroundActivityScheduler”适用于MacOS,不适用于iOS。在iOS上,您需要使用后台提取或服务器推送 – Paulw11