iOS開發(fā) 獲取wifi信息

最近在做測速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 = };
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容