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

标签 ios objective-c swift

我需要类似于 Facebook 的离线发布功能的东西。基本上,无论连接状态如何,我都希望用户在设备上本地创建内容,并且只要互联网可用,它就应该 POST/PUT 到服务器。

我在互联网上搜索了一个解决方案,我发现 NSURLSessionUploadTask 可以在后台用于 POST-ing。但是我不知道是否支持以下场景:

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

最佳答案

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

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

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

关于ios - 我可以使用 NSURLSessionUploadTask 进行离线同步任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804633/

相关文章:

ios - 动态调整单元格大小时出错

swift - Codable 和自定义 Getter 构建错误

ios - 如何配置文本字段以说明到期日期?

ios - 如何在 swift 中使用 GraphAPI 从 facebook 页面获取帖子

ios - UITableView 重复内容

objective-c - 通过 Casting 调用另一个类中的方法?

iphone - 从 app1 启动 app2 并传递数据

ios - Flutter:启用 Web 支持后...iOS 模拟器消失了

iOS:围绕绘制的路径裁剪?

ios - AVAudioPlayer 声音不播放