iOS 13适配--获取手机WiFi名称(SSID)问题

问题

升级到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 
+ (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;
}

你可能感兴趣的:(iOS 13适配--获取手机WiFi名称(SSID)问题)