美文网首页
iOS 获取网络WiFi信息

iOS 获取网络WiFi信息

作者: Mi_Manchi_ | 来源:发表于2023-03-21 11:40 被阅读0次

    获取当前设备连接WiFi:

    ios5之前可以通过读取配置文件获取,ios5以后苹果修改wifi列表文件位置,只有root权限才可以读取.

    ios4:/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager

    ios5:/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration

    iOS4.1之后 : CNCopySupportedInterfaces()

    1.引用头文件

    2.通过CNCopySupportedInterfaces获取wifi列表,实际测试中返回数组中只有一个值,即当前连接的wifi。

    +(NSString)getWifiSSID{NSStringssid=nil;NSArrayifs=(__bridge_transfer id)CNCopySupportedInterfaces();for(NSStringifnaminifs){NSDictionary*info=(__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);if(info[@"SSID"]){ssid=info[@"SSID"];}}returnssid;}

    出现问题 :

    Xcode10正式版在9月17号发布, 使用最新版的Xcode编译某项目发现App在iOS 12中无法获取WiFi的SSID.

    发现 : 在iOS 12中,经断点调试发现info为nil。猜测是CNCopyCurrentNetworkInfo方法在iOS 12中有了变化。通过查看官方文档,发现文档中增加了Important字样的描述:

    image

    Impotant.png

    解决方法:

    注意 : WiFi信息只有在真机上才能获取下来,在模拟器上为NULL

    1.开发者证书上配置ID支持Access WiFi Information的能力

    2.Xcode配置 : Xcode -> [Project Name] -> Targets -> [Target Name] -> Capabilities -> Access WiFi Information -> ON

    3.出现.entitlements文件,修改为Access WiFi Information为YES

    image

    Snip20181219_2.png

    image

    Snip20181219_3.png

    至此,就能在iOS 12+中正常获取到WiFi的SSID了.

    更新: 在iOS13之后WiFi的SSID的获取

    在iOS13中, CNCopyCurrentNetworkInfo进行了更新, 不仅要在Access WiFi Information设置为YES的情况下, 还需要符合下列三项条件中的至少一项才会返回正确的 CNCopyCurrentNetworkInfo 函数值,否则仍然会返回 nil.

    -The app uses Core Location,andhas the user’s authorization touselocationinformation.-The app uses the NEHotspotConfigurationAPIto configure the current Wi-Fi network.-The app has activeVPNconfigurations installed.

    即::

    • 使用定位功能,并且获得了定位服务权限的应用;- 使用NEHotspotConfiguration配置过的Wi-Fi;- 应用程序已安装有效的VPN配置

    至少要满足其一, 接下来以开启定位功能为例:

    首先, 开启WiFi权限的界面稍有改动:

    image

    image.png

    设置可获取WiFi信息:

    image

    image.png

    info.plist文件中添加定位服务权限:

    image

    image.png

    获取地理位置信息:

    image

    image.png

    最后通过上文提到的getWifiSSID方法就可以获取到WiFi的SSID了.

    其实, 在想要获取WiFi的相关信息之前, 如果APP已经满足以上三点中的任意一点的话, 其实就能正常获取到info的信息了.

    .End

    作者:下班不写程序

    链接:https://www.jianshu.com/p/1e10b927c2ca

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:iOS 获取网络WiFi信息

          本文链接:https://www.haomeiwen.com/subject/tdqprdtx.html