Для Soap NSURLConnection убедитесь, что ваше приложение поддерживает сети IPv6, поскольку требуется совместимость с IPv6.

Я отправил свое приложение в AppStore, они отклоняют его по следующей причине.

Hello,

        Thank you for providing this information. Upon further review, we were still unable to login to the app.

        Please note that apps are reviewed on an IPv6 network. Please ensure that your app supports IPv6 networks, as IPv6 compatibility is required.

        For information about supporting IPv6 Networks, refer to Supporting iPv6 DNS64/NAT64 Networks.

        For a networking overview, please see About Networking.

        Best regards,

        App Store Review

Я использую службу SOAP Envelope, чтобы использовать ее,

Вот мой код

@property(retain,nonatomic)NSString *xmlString;

@property(nonatomic,retain)NSMutableData *webResponseData;


-(void)method_GetUpcomingLotteries
{

    NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                             "<env:Envelope xmlns:env=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns1=\"urn:Lottery.Intf-ILottery\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:enc=\"http://www.w3.org/2003/05/soap-encoding\">\n"
                             "<env:Body>\n"
                             "<ns1:GetUpcomingLotteries env:encodingStyle=\"http://www.w3.org/2003/05/soap-encoding\">\n"
                             "<EntityID xsi:type=\"xsd:int\">2</EntityID>\n"
                             "<Password xsi:type=\"xsd:string\">Smart@Winners</Password>\n"
                             "<SortBy xsi:type=\"xsd:int\">0</SortBy>\n"
                             "<limit xsi:type=\"xsd:int\">0</limit>\n"
                             "</ns1:GetUpcomingLotteries>\n"
                             "</env:Body>\n"
                             "</env:Envelope>"];


    NSURL *sRequestURL = [NSURL URLWithString:@"http://isapi.mekashron.com/soapclient/soapclient.php?"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:sRequestURL];
    NSString *sMessageLength = [NSString stringWithFormat:@"%d", [soapMessage length]];

    [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request addValue: @"urn:Lottery.Intf-ILottery/GetUpcomingLotteries" forHTTPHeaderField:@"SOAPAction"];
    [request addValue: sMessageLength forHTTPHeaderField:@"Content-Length"];

    [request setHTTPMethod:@"POST"];



    [request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

    NSLog(@"soapMessage===\n %@",soapMessage);

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if( theConnection ) {
        NSLog(@"hiii");
        self.webResponseData = [NSMutableData data];
    }else {
        NSLog(@"Some error occurred in Connection");

    }
}



- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"Received Bytes from server: %lu", (unsigned long)[self.webResponseData length]);

    NSString * strXml = [[NSString alloc] initWithBytes: [self.webResponseData mutableBytes] length:[self.webResponseData length] encoding:NSUTF8StringEncoding];

    NSLog(@"---- %@" ,strXml);



}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    [self.webResponseData  setLength:0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.webResponseData  appendData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Some error in your Connection. Please try again.");


}

Мой вопрос:

1) Скажите, пожалуйста, мне нужно изменить свой метод или мне нужно изменить серверную часть, чтобы перевести мой API с IPv4 на IPv6?

2) Код для IpV6 с использованием метода SOAP под ios9, который работает вместо NSURLConnection


person 9to5ios    schedule 27.06.2016    source источник
comment
Другие возможные дубликаты.   -  person halfer    schedule 27.06.2016
comment
Я не совсем au fait с IPv6, но я предполагаю, что это связано с тем, разрешает ли система DNS для isapi.mekashron.com дополнительно адреса IPv6. Может быть, вы могли бы изучить это?   -  person halfer    schedule 27.06.2016
comment
полумер ты можешь объяснить? я должен настроить свой сервер на IPV6 на стороне сервера?   -  person 9to5ios    schedule 27.06.2016
comment
Я не тот человек, чтобы объяснять. Однако да, я думаю, что ваш веб-сервер должен прослушивать IPv6, а ваш DNS-сервер должен отвечать IPv6-адресами по запросу. Я уверен, что эти вещи можно исследовать с помощью поисковой системы.   -  person halfer    schedule 27.06.2016
comment
В любом случае, у вас есть ответ ниже, поэтому я предлагаю вам изучить предоставленную ссылку :-)   -  person halfer    schedule 27.06.2016
comment
@iphonemaclover: Нет, вам не нужно вносить какие-либо изменения на стороне сервера.   -  person user102008    schedule 28.06.2016
comment
Возможный дубликат использования метода NSURLConnection с IPv6   -  person Antzi    schedule 01.07.2016


Ответы (1)


На WWDC 2015 Apple объявила о переходе на сетевые сервисы только с IPV6 в iOS 9. Теперь, с 1 июня 2016 года, Apple сделала обязательным, чтобы приложение поддерживало iPV6.

Если разработчики используют стандартные сетевые API, такие как NSURLSession и CFNetwork API, предоставляемые Apple, у них не должно возникнуть никаких проблем. В противном случае вам придется переместить свой код в API, поддерживающие IPV6.

Если вы хотите использовать стандартную сетевую библиотеку, например AFNetworking. Согласно этому сайту AFNetworking 3.0 поддерживает IPV6.

У Apple есть документация по как протестировать поддержку IPV6< /а>.

person skJosh    schedule 27.06.2016
comment
пожалуйста, проверьте, что я делаю, используя API мыла? я должен изменить API в конце сервера на ipV6? - person 9to5ios; 27.06.2016
comment
Они не требуют изменений на сайте сервера, только на стороне клиента. Согласно их документации NSURLConnection, он подпадает под API CFNetwork, так что все должно быть в порядке. Но поскольку в iOS 9 большинство API-интерфейсов NSURLConnection устарели, возможно, они поощряют использование NSURLSession. Но NSURLConnection не должен вызывать проблем в соответствии с их документацией. Если вы использовали жестко заданный IP-адрес, например 10.0.1.121, используйте DNS. Прямо сейчас я могу только предложить вам протестировать поддержку IPV6 в соответствии с документацией и посмотреть, сможете ли вы найти какие-либо журналы ошибок. - person skJosh; 27.06.2016