问题
升级到iOS13以后,发现之前获取WiFi名称的接口失效了,返回的都是固定值"WLAN"或者"Wi-Fi"。
原因
苹果对用户隐私保护问题,因为通过wifi信息可以定位到用户地理位置。所以iOS13以后如果想要继续获取WiFi名称,需要在调用接口前判断用户是否同意app使用地理位置信息。
适配代码
在适当位置调用代码做响应判断即可
//判断是否开启了地理位置信息
+ (BOOL)checkOpenLocationOrNot
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status || kCLAuthorizationStatusNotDetermined == status) {
return NO;
}
return YES;
}
//判断iOS13根据地理位置返回能否返回WiFiSSid
+ (BOOL)canGetWifiSSid {
if (@available(iOS 13.0, *)) {
return [self checkOpenLocationOrNot];
}
return YES;
}
获取WiFiSSid
#import <SystemConfiguration/CaptiveNetwork.h>
+ (NSString *)currentWifiSSID {
NSString *ssid = nil;
CFArrayRef arrRef = CNCopySupportedInterfaces();
NSArray *ifs = (__bridge id)arrRef;
for (NSString *ifnam in ifs) {
CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSDictionary *info = (__bridge id)dicRef;
if (info[@"BSSID"]) {
ssid = info[@"SSID"];
}
if (dicRef != nil) {
CFRelease(dicRef);
}
}
if (arrRef != nil) {
CFRelease(arrRef);
}
return ssid;
}