App拒绝了NSUrlConnection IPv6网络问题iOS

时间:2016-08-10 11:55:58

标签: ios iphone networking nsurlconnection ipv6

iTunes App被拒绝。

原因:

  

我们在iPhone上查看了您应用中的一个或多个错误   在连接到IPv6网络的Wi-Fi上运行iOS 9.3.4。

具体而言,应用内容无法加载。

我们在NAT64网络(从mac设置)中进行了测试,它运行正常,但Apple审核小组对IPv6网络存在问题。

我们使用NSURLConnection来调用Web服务,但是获得了无响应。

调用

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 个答案:

答案 0 :(得分:3)

更改您的应用NSURLSession。使用此委托方法获取响应

service 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];

在此委托方法中,您只需复制并粘贴connectionDidFinishLoadingconnectionDidReceiveResponseconnectionDidReceiveDataconnectionDidFailWithError应该是(NSURLSession *)会话任务的其他部分:< / p>

- (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]);

        }
    }

我认为这对你有帮助。