Подтвердить что ты не робот

IOS получить текущее имя сети wlan

Я ищу способ получить информацию (по крайней мере, имя) текущей подключенной wlan-сети в objective-c для iOS5.

Мне нужно это, потому что мы в настоящее время разрабатываем приложение, которое не работает в определенной сети. В этой сети (в нашем университете) порт закрыт, и нам нужно подключиться к серверу. Но есть и другая сеть, и мы хотим сообщить пользователю, что он должен переключить сеть, если он подключен к вышеупомянутой.

Я даже не знаю, с чего начать. У кого-нибудь есть идея или какие-то намеки?

Спасибо и приветствую

4b9b3361

Ответ 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"]];
}