Мое приложение требует, чтобы 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, который обычно будет правильным, несмотря на отображение предупреждения.
У меня следующие вопросы: есть ли более надежные средства для достижения моей цели? Я неправильно это делаю? Могу ли я изменить какую-то часть моего метода, чтобы получить более надежные результаты?
Спасибо! Если вам потребуется дополнительная информация, не стесняйтесь спрашивать!