NSURLSession重定向处理程序在WatchOS上的不同行为

问题描述 投票:2回答:1

我正在更新旧的WatchOS应用程序以支持WatchOS 4.0。该应用程序发出一些网络请求,其中之一以302重定向状态代码和相应的Location标头响应。我不想遵循重定向,并且302响应标头包含此特定请求所需的所有信息。

我正在使用NSURLSession,并已实现委托方法- URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:

委托方法按预期方式调用,在其中调用completionHandler(nil)告诉操作系统不要遵循重定向。到目前为止,一切都很好。

[NSURLSessionTask完成处理程序通常在此之后立即被调用,并且请求取消错误,这也很好。

这是奇怪的部分。当Apple Watch与iPhone配对时,出现上述现象。但是,当我将iPhone置于飞行模式以模拟Watch超出范围,并且直接通过wifi或蜂窝网络发出网络请求时,我会得到不同的行为。

重定向委托方法仍然按预期方式被调用,但是NSURLSessionTask完成处理程序不会立即被调用。相反,它会在一段时间后因-1001请求超时错误而被调用。

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];

NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    // Odd behaviour described above here
}];

[task resume];

委托重定向方法:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler {
    completionHandler(nil);
}

到目前为止,调试非常困难,因为我无法通过Xcode进行调试,也无法找到代理监视网络请求的方法。

有人有没有经历过这种行为,或者有任何线索可以理解为什么行为不同?这是WatchOS的缺陷吗?

ios watchkit nsurlsession
1个回答
0
投票

@@ JoGoFo您能解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.