問題
升級(jí)到iOS13以后,發(fā)現(xiàn)之前獲取WiFi名稱的接口失效了,返回的都是固定值"WLAN"或者"Wi-Fi"。
原因
蘋果對(duì)用戶隱私保護(hù)問題,因?yàn)橥ㄟ^wifi信息可以定位到用戶地理位置。所以iOS13以后如果想要繼續(xù)獲取WiFi名稱,需要在調(diào)用接口前判斷用戶是否同意app使用地理位置信息。
適配代碼
在適當(dāng)位置調(diào)用代碼做響應(yīng)判斷即可
//判斷是否開啟了地理位置信息
+ (BOOL)checkOpenLocationOrNot
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status || kCLAuthorizationStatusNotDetermined == status) {
return NO;
}
return YES;
}
//判斷iOS13根據(jù)地理位置返回能否返回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;
}