我可以使用NSURLSessionUploadTask进行离线同步任务吗?

Hle*_*ess 7 objective-c ios swift

我需要类似Facebook的离线帖子功能.基本上我希望用户在设备上本地创建内容而不管连接状态如何,并且每当互联网变得可用时,它应该POST/PUT到服务器.

我在互联网上搜索了一个解决方案,我发现它NSURLSessionUploadTask可以在后台用于POST.但我无法弄清楚是否支持以下方案:

  • 当用户离线时,我的任务是否会保留在后台队列中,并且操作系统是否会在重新连接网络时尝试执行队列中的项目?
  • 如果应用程序被用户强制关闭或崩溃会发生什么?
  • 如果操作失败会发生什么?

Seg*_*ero 2

首先,后台NSURLSession只允许文件上传。如果这对你来说没问题:

  • 该任务将处于队列中,直到收到服务器答复。
  • 如果您的应用程序被强制关闭,任务仍将执行。请求完成后,您的应用程序将以非交互式后台状态启动并接收application:handleEventsForBackgroundURLSession:completionHandler:. 处理信号并调用完成处理程序或 30 秒超时后,应用程序将关闭。
  • 如果操作失败,您将收到URLSession:task:didCompleteWithError:

关于背景有一个很好的教程NSURLSessions。我建议您阅读这篇精彩文章的全部 4 部分。
如果文件上传不适合您,我建议您将信息保存到本地数据库,然后等待互联网可达。(这里的一个好方法是使用Reachability库,Alamofire也允许这样做)。当互联网可用时,只需使用保存的数据调用您的 http 请求即可。