应用程序拒绝 NSUrlConnection IPv6 网络问题 iOS
Posted
技术标签:
【中文标题】应用程序拒绝 NSUrlConnection IPv6 网络问题 iOS【英文标题】:App rejected NSUrlConnection IPv6 network issue iOS 【发布时间】:2016-08-10 11:55:57 【问题描述】:iTunes 应用被拒绝。
原因:
在 iPhone 上审核时,我们在您的应用中发现了一个或多个错误 在连接到 IPv6 网络的 Wi-Fi 上运行 ios 9.3.4。
具体来说,应用内容加载失败。
我们在 NAT64 网络(从 mac 设置)中对其进行了测试,它运行良好,但 Apple 审核团队遇到了 IPv6 网络问题。
我们使用 NSURLConnection 来调用 web 服务,但得到 nil 响应。
NSURLConnection:connectionDidFinishLoading:
被调用,但在 IPv6 网络中得到 nil NSData 响应,它在 IPv4 网络中工作正常
json解析代码
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions | NSJSONReadingAllowFragments | NSJSONReadingMutableContainers error:&error];
由于nil receivedData 导致解析错误:数据无法读取,因为它的格式不正确
在 IPv4 网络中一切正常,在 IPv6 connectionDidFinishLoading: 中也可以正常工作,但为什么得到 nil 响应?
【问题讨论】:
【参考方案1】:更改您的应用程序 NSURLSession。使用此委托方法获取响应
service url = "你在这里解析你的 url";
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:serviceurl];
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:urlRequest];
[dataTask resume];
在此委托方法中,您只需复制并粘贴您的 connectionDidFinishLoading
、connectionDidReceiveResponse
、connectionDidReceiveData
、connectionDidFailWithError
应该在 (NSURLSession *) 会话任务的 else 中:
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
NSLog(@"### handler 1");
[self.responseData setLength:0];
completionHandler(NSURLSessionResponseAllow);
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
if(error == nil)
NSLog(@"Download is Succesfull");
else
NSLog(@"Error %@",[error userInfo]);
我认为这对你有帮助。
【讨论】:
以上是关于应用程序拒绝 NSUrlConnection IPv6 网络问题 iOS的主要内容,如果未能解决你的问题,请参考以下文章
dial tcp <REMOTE-IP>:6379: connect: 连接被拒绝
IOS:多个 NSUrlConnection 以及多个 UIProgressBar
拒绝来自不是服务器 IP 的 UP 的 nodejs 连接 [重复]