我需要类似于 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/