Tag: nsurlsession

当应用程序从后台移除或重启设备时,使用NSURLSession恢复任务

我已经检查了很多文档,但是在应用程序从后台删除或重启设备时找不到使用NSURLSession恢复任务的解决scheme。 我正在处理亚马逊S3上传一些文件,在这我能够 当应用程序处于前景以及后台时,使用NSURLSessionUploadTask将file upload到S3。 当上传时由于任何其他原因应用程序崩溃 ,并且如果应用程序未从后台移除,则继续任务 。 重新启动任务,如果我重新启动设备,而上传,如果应用程序不会从后台删除。 这里是我的代码,以appdelegate的applicationDidBecomeActive方法编写的恢复function。 // Initialize session config and the background session NSURLSession *l_taskSession = [self backgroundSession]; [l_taskSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { if([uploadTasks count]) { for (int i=0; i<[uploadTasks count]; i++) { NSURLSessionUploadTask *uploadRequestTask = (NSURLSessionUploadTask*)[uploadTasks objectAtIndex:i]; [uploadRequestTask resume]; NSLog(@"——– Upload Resumed ——- "); } } else […]

URLSessionDidFinishEventsForBackgroundURLSession不调用 – Objective-C

NSURLSession委托方法 URLSessionDidFinishEventsForBackgroundURLSession不是调用? 我已经在项目function设置中启用了背景模式 。 这是代码 AppDelegate.h方法 @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (nonatomic, copy) void(^backgroundTransferCompletionHandler)(); @end AppDelegate.m方法 -(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler{ self.backgroundTransferCompletionHandler = completionHandler; } ViewController.m方法 – (void)viewDidLoad { [super viewDidLoad]; //Urls [self initializeFileDownloadDataArray]; NSArray *URLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; self.docDirectoryURL = [URLs objectAtIndex:0]; NSURLSessionConfiguration *sessionConfiguration = […]

NSURLSessionDownloadTaskDelegate JSON响应

我正在运行一个NSURLSession会话的背景,我试图找出一个方法来获取NSURLDownloadTaskDelegatecallback之一的JSON响应。 我已经configuration我的会话接受JSON响应。 NSURLSessionConfiguration *backgroundSession = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.Att.Locker.BackgroundUpload"]; backgroundSession.HTTPAdditionalHeaders = @{ @"Accept":@"application/json"}; session = [NSURLSession sessionWithConfiguration:backgroundSession delegate:uploader delegateQueue:nil]; 我可以使用下面的callback来轻松parsingNSURLSessionDownloadTasks的JSON响应。 它以NSURL的forms将JSON响应写入沙箱。 – (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { //Reading the Json response from the sandbox using the NSURL parameter } 我的问题是,如果我遇到一个错误,上面的callback没有被调用,似乎只有在下载成功的情况下被调用。 由于我使用后台会话,我不能使用任何NSURLSessionDataDelegatecallback。 我只能使用NSURLSessionDownloadTaskDelegate和NSURLSessionTaskDelegate,而我可以使用下面的callback获得任务响应。 我在响应中看不到JSON。 – (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { NSHTTPURLResponse *response = (NSHTTPURLResponse […]

通过NSURLSession上传大video导致内存压力崩溃

我使用以下代码将video上传到服务器,这需要我将video从video格式转换为NSData 。 但是,当video很大(例如10分钟video)时,由于内存压力,应用程序崩溃。 我该如何解决这个问题? – (void)uploadVideo { NSDictionary *params = nil; NSString *NSURLSessionIdentifier = [NSString stringWithFormat:@"%@%@",@"my.bundle.identifier.",[self getTimeString]]; NSURLSessionConfiguration *sessionConfig; // SessionConfiguration With iOS Version if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:NSURLSessionIdentifier]; } else { sessionConfig = [NSURLSessionConfiguration backgroundSessionConfiguration:NSURLSessionIdentifier]; } sessionConfig.HTTPMaximumConnectionsPerHost = 1; NSURLSession *uploadSession = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:[NSOperationQueue new]]; […]

NSURLSession dataTaskForRequest:完成:发送给实例的无法识别的select器

当试图创build我自己的会话对象NSURLSession()和请求一个URL我得到一个无法识别的select器exception,但是当我使用共享会话NSURLSession.sharedSession()一切工作正常。 怎么来的? var url = NSURL(string: "http:/www.google.com") if url != nil { //throws unrecognized selector when dataTaskWithURL is called let session=NSURLSession() session.dataTaskWithURL(url!) //works let sharedSession=NSURLSession.sharedSession() sharedSession.dataTaskWithURL(url!) }

NSURLSession:handleEventsForBackgroundURLSession方法不会在后台会话中运行

application:handleEventsForBackgroundURLSession:completionHandler:当上传在后台完成时不运行。 当所有的上传/下载任务在后台完成时,iOS应该唤醒应用程序并调用上述方法。 但事实并非如此。 我已经通过终止从“xcode停止”button的应用程序,并从一个exception终止testing。 我已经跟随了后台转移考虑 。 我已经在苹果开发者指南上testing了这个:背景示例 ,它不工作。 我也testing了这个AppCoda:背景示例 ,它不工作 在2和3中给出的两个例子都不适用于iOS 9.0和xCode 7.0。 在升级到iOS9.0之前,我已经在iOS7.0和xcode 5.0上进行了完美的testing。 我假设它会在真实的设备上工作。 我在这里错过了什么? 任何人都可以确认handleEventsForBackgroundURLSession是否在iOS9.0模拟器中工作,或者我做错了什么? 由于它不适用于2和3中给出的例子,所以我想也许我testing它是错误的。

当快速按下取消button时如何取消下载请求

我想取消下载请求,当我按取消button。 现在当我按下面的代码下载button的作品 @IBAction func downloadButtonPressed(sender: UIButton) { var fileName = noticeAttacchment[0]["fileName"] as! String var fileUrl = noticeAttacchment[0]["fileUrl"] as! String if var URL = NSURL(string: fileUrl){ Api.load(URL, fileName: fileName) } } 而我的下载类是 class Api { class func load(URL: NSURL , fileName : String) { let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: […]

域= NSURLErrorDomain代码1202

嗨,我收到以下错误: 错误域= NSURLErrorDomain代码= -1202 \“此服务器的证书无效。您可能正在连接到假装为”server-prod.name-cloud.com“的服务器,这可能会使您的机密信息处于危险之中。 \“UserInfo = {NSErrorFailingURLStringKey = https://server-prod.name-cloud.com/v3/project/session/926B9E6BE31B/,NSLocalizedRecoverySuggestion =你想连接到服务器吗?,_kCFStreamErrorDomainKey = 3,NSErrorFailingURLKey = https ://server-prod.name-cloud.com/v3/project/session/926B9E6BE31B/,_kCFStreamErrorCodeKey = -9843,NSLocalizedDescription =该服务器的证书无效。 您可能正在连接到假装为“server-prod.name-cloud.com”的服务器,这可能会使您的机密信息处于危险之中。} 我阅读所有相关的文档 ,我们在“常见故障”一节中应用所有要求。 更多细节: 仅从德国收到的错误(过去2W来自意大利的4倍除外) 这是不可重现的内部 最终在经过多次重试之后,上传就会丢失 这是在iOS 10.xx和9.xx收到展位 我使用2016-08 SSL安全策略的亚马逊服务器,所以根据苹果应该是好的 在我使用的应用程序中: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 注意 – 在生产中,我总是使用HTTP,所以我离开了NSAllowsArbitraryLoads,因为有些离岸testing者可以把路由切换到HTTP进行debugging。

NSURLSession,上传任务 – 获取实际的字节传输

我得到了错误报告,说我的iOS应用程序在缓慢连接上无法上传图像。 虽然我的超时时间可能不够长,但还有一个问题。 我发现上传进度很快达到了100%,尽pipe我可以在Charles看到字节仍在传输。 我使用NSURLSession的以下方法: – (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler 并实现下面的委托方法来接收进度事件: – (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend 其实我使用AFNetworking 2.5.2,它使用这种方法。 我的理论是,这个委托方法报告从手机发送的字节,而不是实际的字节传输。 以非常低的连接发送300kb的数据包,将立即发送5-6个包,并在等待接收时报告100%的进度。 是否有可能获得已确认传输的实际字节数的进度事件?

NSURLSession:后台上传,然后调用服务api

我正在尝试使用新的ios7背景传输api上传一些照片到服务器。 现在发生的事情是1)我们上传字节到s3 2)调用一个服务API来“完成”上传 我看了这个文档,似乎背景NSURLSession不支持“数据”任务。 这是否意味着我不能在实际上传完成后在后台执行第2步?