CaptiveNetwork弃用后,如何在iOS9中获取Wifi SSID,并且呼叫Wifi名称已被阻止
直到今天,我使用CaptiveNetwork接口来显示当前连接的Wifi的名称。 iOS 9预发布参考文件已经提到,CaptiveNetwork方法现在已经被剥夺了,但是它们仍然在开始工作。
苹果似乎已经阻止了这个电话的最新版本(也许是由于隐私问题?)。
有没有其他的方式来获得当前的Wifi的名称?
这是我直到今天获得SSID的方式,但现在你只能得到零:
#import <SystemConfiguration/CaptiveNetwork.h> NSString *wifiName = nil; NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *name in interFaceNames) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); if (info[@"SSID"]) { wifiName = info[@"SSID"]; } } 在通用的iOS 9,似乎这是再次启用。 事实上,它甚至没有在联机文档中被列为弃用,但CaptiveNetwork头文件确实具有以下内容:
 CNCopySupportedInterfaces (void) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_8, __MAC_NA, __IPHONE_4_1, __IPHONE_9_0, CN_DEPRECATION_NOTICE); 
所以,它是在iOS 9通用汽车,但不知道多久:)
将您的应用程序注册为热点帮手。
 #import <NetworkExtension/NetworkExtension.h> NSArray * networkInterfaces = [NEHotspotHelper supportedNetworkInterfaces]; NSLog(@"Networks %@",networkInterfaces); 
更新(2015年9月11日)
下面的CaptivenetworkingAPI已经在最新版本的iOS 9中重新启用。
- CNCopySupportedInterfaces
- CNCopyCurrentNetworkInfo
更新(2015年9月16日)
 如果您仍然喜欢使用NetworkExtension并且Apple授予您添加权利的权限,则可以通过以下方式获取WiFi信息: 
 for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) { NSString *ssid = hotspotNetwork.SSID; NSString *bssid = hotspotNetwork.BSSID; BOOL secure = hotspotNetwork.secure; BOOL autoJoined = hotspotNetwork.autoJoined; double signalStrength = hotspotNetwork.signalStrength; } 
  NetworkExtension为您提供一些额外的信息,如安全,自动join或信号强度。 而且它还允许您在用户扫描wifis时在后台模式下将凭据设置为wifis。 
 在2017年4月27日确认,Captive Network仍在为Swift 3.1 , XCode 8.3 
对于Swift> 3.0
 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"]); } 
CaptiveNetwork仍在工作。 由于许多请求苹果可能已经恢复了API的。
使用CaptiveNetwork,我们可以获得WiFinetworking的SSID。 它甚至可以在iOS 10中运行。
 #import <SystemConfiguration/CaptiveNetwork.h> NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); 
这是输出:
 Printing description of info: { BSSID = "5*:**:**:**:**:**"; SSID = Cisco12814; SSIDDATA = <43697363 6f313238 3134>; }