如果用户在离线时在iOS应用中执行操作(例如飞行模式),即使用户完全关闭了应用,应用也可以在用户上线后完成操作(通过向其服务器发送数据) em>在上线之前?
我问,因为Twitter和Facebook没有此功能。 (如果我在离线时发布内容,然后关闭应用程序并上线,则在我再次启动应用程序之前不会提交帖子。)
答案 0 :(得分:1)
没有。如果用户杀死了您的应用,它就会消失。它不能再执行任何应用程序代码。您可以做的最好的事情是研究background tasks,然后您可以在自动终止之前执行您的操作约10分钟(如果用户在操作系统之前没有这样做)。
您可以将操作存储在数据库(Core Data,Realm)中,甚至存储在NSUserDefaults中。当应用程序联机时,您可以定期尝试解析这些操作并使用exponential back-off发送网络请求。我想这是Facebook和Twitter使用的过程。
答案 1 :(得分:1)
我不同意@ JoeyClover的回答。
如果您想要做的是HTTP POST,您应该能够设置NSURLSession
进行后台处理。即使应用程序未运行,系统也应接管提交您的帖子。有关更多信息,请参阅NSURLSession上的Xcode文档。 (对于使用HTTP GET的下载,您可以做同样的事情,但这不是您要问的内容。)
例外情况是用户通过在任务列表中向上滑动来实际终止您的应用。在这种情况下,系统会终止您的后台上传/下载任务。有关的信息位于NSURLSessionConfiguration
部分。引用Apple的文档:
使用此方法初始化适合的配置对象 应用程序在后台运行时传输数据文件。一个 使用此对象配置的会话可以控制传输 到系统,在单独的过程中处理传输。 在iOS中,此配置可以继续传输 即使应用程序本身被暂停或终止。
如果iOS应用程序被系统终止并重新启动,则该应用程序可以 使用相同的标识符来创建新的配置对象和 会话并检索正在进行的传输的状态 终止的时间。此行为仅适用于正常情况 系统终止应用程序。 如果用户终止该应用 从多任务屏幕,系统取消所有会话 背景转移。此外,系统不会自动进行 重新启动用户强制退出的应用程序。用户必须 在转移再次开始之前明确重新启动应用程序。
(我把关键位加粗了。)