我有一种情况,当设备收到推送通知时,我会发送一个NSURLSession
与NSURLConnection
. 我有几个关于NSURLSession
.
NSURLSession's
如果互联网连接丢失,数据任务是否会在后台自动恢复?
NSURLSession
如果最初没有互联网,是否会自动尝试完成任务,或者会话是否只是返回错误?
我有一种情况,当设备收到推送通知时,我会发送一个NSURLSession
与NSURLConnection
. 我有几个关于NSURLSession
.
NSURLSession's
如果互联网连接丢失,数据任务是否会在后台自动恢复?
NSURLSession
如果最初没有互联网,是否会自动尝试完成任务,或者会话是否只是返回错误?
看起来由你来处理重试。
当任何任务完成时,NSURLSession 对象调用代理的 URLSession:task:didCompleteWithError: 方法,带有一个错误对象,如果任务成功完成,则为 nil。如果任务是可恢复的下载任务,则 NSError 对象的 userInfo 字典包含 NSURLSessionDownloadTaskResumeData 键的值。您的应用应使用可达性 API 来确定何时重试,然后应调用 downloadTaskWithResumeData: 或 downloadTaskWithResumeData:completionHandler: 来创建新的下载任务以继续下载。转到步骤 3(创建和恢复任务对象)。
如果 Internet 连接丢失,NSURLSession 的数据任务是否会在后台自动恢复?
如果 Internet 连接丢失,您将在委托方法中收到错误NSURLErrorNetworkConnectionLost
(错误代码:-1005)URLSession:task:didCompleteWithError
。您负责使用 invalidateAndCancel 或 finishAndInvalidate 重试和/或使会话无效(尽管在网络连接丢失的情况下它已经完成)。
如果最初没有互联网,NSURLSession 会自动尝试完成任务,还是会话只是返回错误?
如果没有互联网连接,您将NSURLErrorNotConnectedToInternet
在委托方法中收到错误(错误代码:-1009)URLSession:task:didCompleteWithError
。您负责使用 invalidateAndCancel 或 finishAndInvalidate 使会话无效(如果需要)(尽管在没有 Internet 连接的情况下它已经完成)。
参考:
如果您将后台配置与 NSURLSession 一起使用,则当您的应用程序处于活动状态或在后台时,代表会在成功/失败时被调用。您创建的任务被移交给操作系统的恶魔,您的应用程序正在被唤醒甚至启动(如果它被 iOS 杀死)使用
`application:handleEventsForBackgroundURLSession:completionHandler`:
当所有任务完成时,您的会话委托将被调用
URLSessionDidFinishEventsForBackgroundURLSession:
有关后台会话的更多详细信息,请参见此处
您还可以在此处获取苹果示例代码并查找“简单后台传输”