我正在更新旧的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的缺陷吗?
@@ JoGoFo您能解决这个问题吗?