ios - 定期后台同步

标签 ios swift3 background-process synchronization

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

直到现在我还没有找到 Swift 3.0 的这种机制,所以我需要询问是否有人有经验或对我如何实现这一点有一些提示。

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

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

我该怎么做?

最佳答案

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

regularly downloads and processes small amounts of content from the network

您可以设置一个minimumBackgroundFetchInterval

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

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

参见:Apple SampleApple Docs


更新:自 iOS13 起,BackgroundFetch已弃用。

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

参见 Apple Docs


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

参见:Apple Documentation

关于ios - 定期后台同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40328576/

相关文章:

ios - 我可以使用具有不同 UIview 类的水平 ScrollView 而不是 UINavigationController 来导航到不同的 View Controller 吗

ios - 传递数据不会更新字符串

ios - geofence didEnterRegion/didExitRegion通知后如何进行BG NW下载

ios - 杀死应用程序后如何在后台执行某些任务

ios - UItextView 在 textview 外点击时关闭键盘

ios - Xcode 8.3 - 在本地删除包标识符?

ios - UITableViewCell 每 5 个单元格重复一次(在标记为重复之前,请阅读整个任务)

ios - 无法检查函数的引用相等性;这里的操作数类型为 'UIBarButtonItem' 和 '(UIBarButtonItem) -> ()'

swift - 如何检查给定日期在 Swift 3 中的 x 天数内

ubuntu - Google Cloud VM 中的后台进程在一段时间后终止