iOS获取当前的wlan网络名称

Chr*_*ris 15 iphone networking objective-c wlan ios

我正在寻找一种方法来获取iOS5的objective-c中当前连接的wlan网络的信息(至少名称).

我需要这个,因为我们正在开发一个在特定网络中不起作用的应用程序.在这个网络(在我们大学),我们需要连接到服务器的端口关闭.但是还有另一个网络可用,我们想告诉用户如果他连接到上述网络,他必须切换网络.

我甚至不知道从哪里开始.有没有人有想法或任何提示?

感谢致敬

Rok*_*arc 15

从iOS> = 4.1,可以获得设备当前连接的无线网络的SSID.

为此,您将使用函数CNCopyCurrentNetworkInfo

SO上提供了有关实施的详细信息:iPhone无需私有库即可获得SSID

  • 谢谢.我没想过要搜索"SSID"......完美无缺! (2认同)
  • iOS 9.0 中已弃用此功能。有新办法吗? (2认同)

nuy*_*ait 7

可以从强制网络获取当前的wifi信息.在过去,苹果实际上已经禁用了一段时间,但由于强烈要求,他们似乎重新启用了它.也有可能他们决定将来关闭它.

我们可以得到的信息是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
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

对于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"]];
}
Run Code Online (Sandbox Code Playgroud)


小智 6

从iOS 12开始,您需要在功能中允许Wifi信息访问。

苹果

要在iOS 12及更高版本中使用此功能,请在Xcode中为您的应用启用访问WiFi信息功能。启用此功能后,Xcode会自动将Access WiFi Information授权添加到您的授权文件和App ID中。