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

标签 ios background-fetch

我正在寻找使我的应用程序“upToDate”的好方法。这些是我的要求:

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

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

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

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

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

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

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

<强>2。使用推送通知。

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

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

好吧,如果用户完成了任务,一些数据应该会自动上传到服务器。通常不是问题,手动同步会检查是否有要上传的内容。但是,如果没有互联网连接(上传前会检查是否)并且用户没有按“手动同步”怎么办。

所以我宁愿检查我的“后台服务”是否有互联网连接,如果是 - 开始上传一些数据。

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

提前致谢!

最佳答案

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

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

关于ios - 如何将我的应用程序 "up to date"- 后台获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233860/

相关文章:

ios - 使用 Xcode 进行模拟时,PerformFetchWithCompletionHandler 调用了两次

ios - 延迟在后台获取 EXC_BAD_ACCESS

ios - 后台获取在 iOS 中执行的频率是多少?

ios - 此类与键的键值编码不兼容。

iphone - 将文件名中包含字符串的应用程序包中的所有文件加载到 NSMutableArray 中?

ios - 无法通过下标赋值 : subscript is get-only

ios - 当用户平移 map 时,iOS 6 中的 map 注释不会保持旋转

ios - 如何快速切换 View Controller ?

ios - 即使应用程序处于后台或终止,我如何执行接收远程通知的操作?

iOS后台获取自定义间隔