iOS 12之前:
id info = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSString *str = info[@"SSID"];//name
}
iOS 12之后以上方法獲取不到,需要在Xcode中TARGET-->Capabilities打開Access WiFi Information選項

1A9BB7FD-1FC9-4EBA-BD0A-7438F3F86624.png
iOS 13之后以上方法獲取Wi-Fi名返回的都是固定值"WLAN",這里可能是因為蘋果保護用戶隱私而產(chǎn)生的問題,因為通過wifi信息可以定位到用戶地理位置。所以iOS13以后如果想要繼續(xù)獲取WiFi名稱,需要在調(diào)用接口前判斷用戶是否同意App使用地理位置信息??梢栽诔绦蛞粏訒r請求用戶權(quán)限,調(diào)用的方法如下:
#import <CoreLocation/CoreLocation.h>
@property (strong, nonatomic) CLLocationManager *locationManager;
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
CGFloat version = [phoneVersion floatValue];
// 如果是iOS13 未開啟地理位置權(quán)限 需要提示一下
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined && version >= 13) {
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager requestWhenInUseAuthorization];
}
如果用戶拒絕了授權(quán),在需要獲取Wi-Fi名的界面加上提示:
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
CGFloat version = [phoneVersion floatValue];
//如果開啟地理位置權(quán)限未開啟 需要提示一下
if (([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusRestricted || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied )&& version >= 13) {
[PracticalTools showAlertViewWithTitle:@"提示" message:@"您的位置權(quán)限尚未授權(quán),將無法獲取當前Wi-Fi進行配置網(wǎng)絡(luò),請前往“設(shè)置”-“Photoegg”-“位置”進行授權(quán)!" doneText:@"確定" cancelText:nil doneHandle:nil cancelHandle:nil vc:self];
}