我需要类似于Facebook的离线发布功能。基本上我希望用户在设备上本地创建内容而不管连接状态如何,每当互联网变得可用时,它应该POST / PUT到服务器。
我在互联网上搜索了一个解决方案,我发现NSURLSessionUploadTask
可以在后台用于POST。但我无法弄清楚是否支持以下方案:
答案 0 :(得分:1)
首先,后台NSURLSession
仅允许文件上传。如果你没问题:
application:handleEventsForBackgroundURLSession:completionHandler:
。处理完信号并调用完成处理程序或30秒超时后,应用程序将关闭。URLSession:task:didCompleteWithError:
背景NSURLSessions
上有一个很好的tutorial。我建议你阅读这篇伟大文章的全部4部分
如果文件上传不是您的选项,我建议您将信息保存到本地数据库,然后等待可以访问互联网。 (这里的一个好方法是使用Reachability库,Alamofire也允许这样做。当互联网可用时,只需使用保存的数据调用您的http请求。
答案 1 :(得分:0)
我们遇到了内部应用程序的连接问题,因此我们编写了一个Swift框架,允许任何网络操作在设备访问互联网时排队并发送 - https://cocoapods.org/pods/OfflineRequestManager。您仍然必须在符合OfflineRequest的对象中处理网络请求本身,但它听起来非常适合您的用例。
最简单的用例看起来如下所示,尽管大多数实际情况(保存到磁盘,特定请求数据等)都会有更多的环节要跳过:
import OfflineRequestManager
class SimpleRequest: OfflineRequest {
func perform(completion: @escaping (Error?) -> Void) {
doMyNetworkRequest(withCompletion: { response, error in
handleResponse(response)
completion(error)
})
}
}
///////
OfflineRequestManager.defaultManager(queueRequest: SimpleRequest())