我对iOS编程非常陌生,现在我想实现周期性的后台同步,以使服务器数据与客户端数据同步。我想要实现的是与Android SyncAdapter类似的功能,您可以定义一个时间间隔(例如,每30分钟一次),系统将在后台自动触发定义的任务。
到目前为止,我还没有找到SWIFT3.0的这种机制,所以我需要问一下有人是否有经验,或者给我一些提示,我是如何做到这一点的。
我想做的事情听起来很简单:
当应用程序第一次启动时,应用程序应该设置一个同步管理器,它每30分钟自动触发一次后台任务。后台任务负责同步服务器和客户端数据(使用Alamofire)。
我怎么能这么做?
发布于 2016-10-30 12:15:35
有一个名为iOS的BackgroundFetch特性,您可以为它设置
定期从网络下载和处理少量内容
您可以设置一个minimumBackgroundFetchInterval。
不过,与上述Android功能相比,这种间隔并不能得到保证。
操作系统在黑匣子中做一些启发式的操作。它奖励您使用“合理”(对操作系统) CPU时间/功耗,并经常被用户使用。另一方面,你会因为耗尽电池而受到惩罚,或者(更糟糕的是)用户从未使用/打开电池。
更新:,因为iOS13,BackgroundFetch被废弃了。
有一个类似的新API名为BGTask,BGAppRefreshTask相当于被弃用的BackgroundFetch。
请参阅苹果文档
或者,根据您的需要,您可以在用户数据在服务器端发生更改时发布Silent (push) Notification。一个无声的推送唤醒了你的应用程序,而没有通知用户,这样你就可以获取数据,或者通过调度一个本地通知通知用户。
请参阅:苹果文档
发布于 2016-10-30 11:34:27
你不能这样做。苹果不允许第三方应用程序有这样的定期背景时间。当新内容可用时,您需要想出另一种方法,比如从服务器实现无声推送通知。
正如@ekscrypto在他们的评论中指出的那样,当系统决定获取数据时,您可以使用使用后台提取来加载少量数据。但是,您无法控制抓取发生的时间。在Xcode帮助系统中搜索“机会主义地获取少量内容”以获得更多信息。
https://stackoverflow.com/questions/40328576
复制相似问题