ios13 获取wifi信息
iOS13获取Wi-Fi信息步骤
-
首先开启定位权限
定位.png -
Xcode开启WIFi权限
image.png
- 手动请求定位权限
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
CGFloat version = [phoneVersion floatValue];
// 如果是iOS13 未开启地理位置权限 需要提示一下
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined && version >= 13) {
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager requestWhenInUseAuthorization];
}
- 最后获取Wi-Fi信息
首先导入系统框架#import <SystemConfiguration/CaptiveNetwork.h>
- (void)getWifi {
id info = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSString *str = info[@"SSID"];
NSString *str2 = info[@"BSSID"];
NSString *str3 = [[ NSString alloc] initWithData:info[@"SSIDDATA"] encoding:NSUTF8StringEncoding];
NSLog(@"%@",info);
}
}
总结:
从 iOS 4.1 开始,Apple 就提供了「CNCopyCurrentNetworkInfo」这项函数,调用时将会得到 SSID 与 BSSID; iOS 12 开始,调用该函数将默认返回 nil,需要在 Xcode 项目中开启「Access WiFi Information」后才会返回正确的值。这个功能需要在开发者页面的 App IDs 中激活才能使用。
而在 iOS 13 中,使用这项函数的条件将变得更为严格。根据 WWDC19 Session 713(https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo)的说明,在 iOS 13 中除了开启「Access WiFi Information」以外,App 还需要符合下列三项条件中的至少一项才会返回正确的 CNCopyCurrentNetworkInfo 函数值,否则仍然会返回 nil :
- The app uses Core Location, and has the user’s authorization to use location information.
- The app uses the NEHotspotConfiguration API to configure the current Wi-Fi network.
- The app has active VPN configurations installed.
即:
1、使用定位功能,并且获得了定位服务权限的应用;
2、使用NEHotspotConfiguration配置过的Wi-Fi;
3、应用程序已安装有效的VPN配置;
这里的 NEHotspotConfiguration 是在 iOS 11 中新加入的一个 class,它的特性简单来说是App 将已知 Wi-Fi 的 SSID、密码等信息加入到 App 内的配置文件后,这个 App 可以直接在应用内完成连接至该 Wi-Fi 网路的操作,不需要再跳转至系统偏好设置。简单理解就是:如果当前设备所连接的Wi-Fi不是通过我们的app使用NEHotspotConfiguration来配置的,那么也同样没法使用NEHotspotConfiguration来获取当前Wi-Fi的信息;
原文链接:https://blog.csdn.net/xuanweihong_ios/article/details/98947025