iphone медленно распознает смену точки доступа wifi - PullRequest
4 голосов
/ 29 марта 2012

У меня есть приложение, которое необходимо подключить к определенной точке доступа. Этот AP не подключен к Интернету. когда я изменяю сети в «настройках» на эту новую точку доступа, я вижу, что получил IP-адрес в течение нескольких секунд, но для появления символа wifi в строке состояния требуется 60–70 секунд. Вернувшись в свое приложение, я не могу подключиться к точке доступа, пока не появится этот символ. как только оно появляется, соединение работает отлично, но 60 секунд - это долгое время для ожидания пользователя. Я использую NSStreamManager для связи с AP.

Я не понимаю, почему я не могу подключиться, как только настройки показывают IP-адрес. Я знаю, что Apple не позволяет контролировать настройки сети в приложении. любые предложения будут оценены.

Дополнительная информация:

Чтобы понять проблему, я добавил цикл таймера, который запускается, как только я открываю приложение, после перехода на новую сеть Wi-Fi. он сообщает о состоянии доступности (через класс доступности Apple) и пытается получить SSID. если эти два метода завершаются успешно, то он отправляет сообщение JSON на точку доступа с помощью streamManager, если нет, он снова вызывает себя через одну секунду. Разъем доступен и SSID читается, в самом первом цикле (менее 1 секунды), НО все еще требуется диспетчеру потоков баланс 60 секунд для завершения. Я не верю, что проблема на стороне AP, так как версия приложения для Android не имеет проблем с подключением.

-(BOOL)didConnect{
   NSString *ssidString=[self.serverCommManager fetchSSIDInfo];
   NSString *ssidStart=[ssidString substringToIndex:5];
   NSLog(@"****:didConnect ssidStart=%@ ",ssidStart);
   if([ssidStart isEqualToString:@"Ppppp"]){
       NSLog(@"****:didConnect isEqual=TRUE");
       self.streamManager = [[NSStreamManager alloc] initWithDelegate:self];
       [self.streamManager connectToHost:PlugHostName onPort:PlugPort withMessage:  [JSONQuery queryIsPlug]];
       [self removeWaitView];
        return YES;
    }else{

        NSLog(@"****:PlugSetupTVC didConnect isEqual=FALSE");
        [self startTimingWithInterval:1];
        return NO; 
    }
}

1 Ответ

0 голосов
/ 14 января 2014

Поскольку iOS (iOS7.0 ниже) автоматически попытается пропинговать (своего рода) случайный яблочный адрес, чтобы увидеть, подключено ли ваше устройство к ИНТЕРНЕТУ, вот почему происходят явления, описанные вами.

В iOS 7.0 выше есть новая функция, которая позволяет автоматически останавливать процедуру проверки связи с адресами.

Есть решение, потому что iOS пытается получить html-файл результата, тогда он покажет символ wifi, поэтому мне удалось изменить конфигурацию DNS и сделать html-файл, который содержит результат, такой же, как и то, что он хочет получить .... Но я не думаю, что это поможет решить вашу проблему, потому что вы пишете приложение, поэтому вы не можете управлять DNS, не так ли.

...