iOS平台是否提供后台同步?

时间:2015-12-30 14:33:19

标签: ios

如果用户在离线时在iOS应用中执行操作(例如飞行模式),即使用户完全关闭了应用,应用也可以在用户上线后完成操作(通过向其服务器发送数据) em>在上线之前?

我问,因为Twitter和Facebook没有此功能。 (如果我在离线时发布内容,然后关闭应用程序并上线,则在我再次启动应用程序之前不会提交帖子。)

2 个答案:

答案 0 :(得分:1)

没有。如果用户杀死了您的应用,它就会消失。它不能再执行任何应用程序代码。您可以做的最好的事情是研究background tasks,然后您可以在自动终止之前执行您的操作约10分钟(如果用户在操作系统之前没有这样做)。

您可以将操作存储在数据库(Core DataRealm)中,甚至存储在NSUserDefaults中。当应用程序联机时,您可以定期尝试解析这些操作并使用exponential back-off发送网络请求。我想这是Facebook和Twitter使用的过程。

答案 1 :(得分:1)

我不同意@ JoeyClover的回答。

如果您想要做的是HTTP POST,您应该能够设置NSURLSession进行后台处理。即使应用程序未运行,系统也应接管提交您的帖子。有关更多信息,请参阅NSURLSession上的Xcode文档。 (对于使用HTTP GET的下载,您可以做同样的事情,但这不是您要问的内容。)

例外情况是用户通过在任务列表中向上滑动来实际终止您的应用。在这种情况下,系统会终止您的后台上传/下载任务。有关的信息位于NSURLSessionConfiguration部分。引用Apple的文档:

  

使用此方法初始化适合的配置对象   应用程序在后台运行时传输数据文件。一个   使用此对象配置的会话可以控制传输   到系统,在单独的过程中处理传输。   在iOS中,此配置可以继续传输   即使应用程序本身被暂停或终止。

     

如果iOS应用程序被系统终止并重新启动,则该应用程序可以   使用相同的标识符来创建新的配置对象和   会话并检索正在进行的传输的状态   终止的时间。此行为仅适用于正常情况   系统终止应用程序。 如果用户终止该应用   从多任务屏幕,系统取消所有会话   背景转移。此外,系统不会自动进行   重新启动用户强制退出的应用程序。用户必须   在转移再次开始之前明确重新启动应用程序。

(我把关键位加粗了。)