Проверка SSID iPhone ненадежна

Мое приложение требует, чтобы iPhone пользователя был подключен к стороннему аппаратному устройству, которое передает SSID, содержащий имя продукта (всегда одно и то же), за которым следует номер устройства (например, ProductName_123); по сути Captive Network. Прежде чем позволить пользователям взаимодействовать с моим приложением, я проверяю, что iPhone в настоящее время подключен к соответствующему SSID. Я делаю это следующим способом (я замаскировал название продукта из соображений конфиденциальности):

- (BOOL) connectedToHardwareDevice
{

    /* Retrieve Interface Information */
    CFArrayRef myArray = CNCopySupportedInterfaces();
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));

    /* Put network information into an iterable dictionary */
    NSDictionary *dict = ( NSDictionary*) captiveNtwrkDict;
    NSString* ssid = [dict objectForKey:@"SSID"];

    /* Look for the Hardware Device name in the SSID */
    rangeOfString:@"ProductName"].location == NSNotFound || ssid == NULL)
    {      
        return false;
    }
   else
    {        
        return true;
    }    
}

В настройках беспроводной сети iPhone я объявил статический IP-адрес для своего тестового устройства, что ускоряет процедуру подключения, поскольку не используется DHCP. Однако часто я открываю приложение и получаю предупреждение «Not Connected», которое запускается вышеупомянутым методом, возвращающим false. Я считаю это исключительно странным, учитывая, что я обновляю текстовое поле в представлении с текущим идентификатором SSID, который обычно будет правильным, несмотря на отображение предупреждения.

У меня следующие вопросы: есть ли более надежные средства для достижения моей цели? Я неправильно это делаю? Могу ли я изменить какую-то часть моего метода, чтобы получить более надежные результаты?

Спасибо! Если вам потребуется дополнительная информация, не стесняйтесь спрашивать!


person John Hall    schedule 14.10.2012    source источник


Ответы (1)


Мое решение состоит в том, чтобы запустить метод снова, пока счетчик не достигнет 20. Если счетчик достигает 20, а SSID все еще не совпадает, предположим, что пользователь не подключен к аппаратному устройству, и войдите в цикл «ждать подключения Wi-Fi». . Возможно, это не самый изящный вариант, но он работает.

person John Hall    schedule 14.10.2012