IOS получить текущее имя сети wlan
Я ищу способ получить информацию (по крайней мере, имя) текущей подключенной wlan-сети в objective-c для iOS5.
Мне нужно это, потому что мы в настоящее время разрабатываем приложение, которое не работает в определенной сети. В этой сети (в нашем университете) порт закрыт, и нам нужно подключиться к серверу. Но есть и другая сеть, и мы хотим сообщить пользователю, что он должен переключить сеть, если он подключен к вышеупомянутой.
Я даже не знаю, с чего начать. У кого-нибудь есть идея или какие-то намеки?
Спасибо и приветствую
Ответы
Ответ 1
Из iOS >= 4.1 можно получить SSID беспроводной сети, с которой устройство временно связано.
Для этого вы должны использовать функцию CNCopyCurrentNetworkInfo
Подробности о реализации доступны на SO: iPhone получит SSID без частной библиотеки
Ответ 2
Можно получить текущую информацию Wi-Fi от Captive Network. Раньше apple фактически отключил это некоторое время, но, похоже, он снова включил его из-за сильного запроса. Также возможно, что они решат закрыть это в будущем.
Информация, которую мы можем получить, это BSSID
, SSID
, SSIDDATA
. BSSID
- это уникальный адрес для wifi, SSID
- это текущее имя wifi, SSIDDATA
- шестнадцатеричное представление для SSID
.
Для Swift 3.1:
func printCurrentWifiInfo() {
if let interface = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interface) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interface, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString), let interfaceData = unsafeInterfaceData as? [String : AnyObject] {
// connected wifi
print("BSSID: \(interfaceData["BSSID"]), SSID: \(interfaceData["SSID"]), SSIDDATA: \(interfaceData["SSIDDATA"])")
} else {
// not connected wifi
}
}
}
}
Для Objective-C
NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *name in interFaceNames) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name);
NSLog[@"wifi info: bssid: %@, ssid:%@, ssidData: %@", info[@"BSSID"], info[@"SSID"], info[@"SSIDDATA"]];
}