最近在做測速SDK開發(fā),對iOS端wifi進行了調(diào)研,分享一下調(diào)研成果
從 iOS 4.1 開始,Apple 就提供了「CNCopyCurrentNetworkInfo」這項函數(shù),調(diào)用時將會得到 SSID 與 BSSID等信息。 iOS 12 開始開發(fā)者必須在Xcode開啟Access WiFi Information才能返回wifi信息。而在 iOS 13后,條件將變得更為嚴格,又增加了開啟定位權(quán)限。
iOS13獲取Wi-Fi信息步驟(必須真機調(diào)式)
-
info.plist中添加
<key>NSLocationWhenInUseUsageDescription</key>
<string>獲取wifi信息需要開啟定位權(quán)限</string>
-
Xcode開啟Access WiFi Information權(quán)限
截屏2021-10-10 下午12.18.52.png - 引用SystemConfiguration.framework
//導入頭文件
#import <SystemConfiguration/SystemConfiguration.h>
#import <SystemConfiguration/CaptiveNetwork.h>
#import <CoreLocation/CoreLocation.h>
- (NSDictionary *)getWifiInfo{
// if (@available(iOS 13.0, *)) {
// 檢查定位權(quán)限
// if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
// }
// CLLocationManager* cllocation = [[CLLocationManager alloc] init];
// if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
// [cllocation requestWhenInUseAuthorization];
// }
// }
NSDictionary *info = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
if (ifs.count == 0) {
return nil;
}
for (NSString *ifnam in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
}
return info;
}
輸出
{
BSSID = "";
SSID = "";
SSIDDATA = {length = , bytes = };
}
