iOS大咖说

iOS获取Wifi列表详解

2021-01-06  本文已影响0人  手中的风信子

转载:https://majing.io/posts/10000049911218

iOS 申请获取 Wifi 列表权限

iOS 上获取 Wifi 列表其实也有很大限制,在 iOS 9 以前是不能获取Wifi列表的,只能获取当前连接的 Wifi 信息,也就表示只有连接了 Wifi 才能定位,刚才文章说到的场景是,我在一个陌生的原理,拿出手机扫描 Wifi ,也就是我并没连接那里的 Wifi(我不知道密码我怎么连啊)。Apple 在 iOS 9 以后,提供了获取Wifi列表的API,但是获取Wifi列表是有门槛的,主要步骤有:

  • 1、向 Apple 申请开发 Network Extension 权限
  • 2、申请包含 Network Extension 的描述文件
  • 3、配置 Info.plist
  • 4、配置 entitlements
  • 5、iOS 获取 Wifi 列表代码实现
  • 6、获取Wifi列表回调

1、向 Apple 申请开发 Network Extension 权限

首先要先写封邮件给 networkextension@apple.com ,问苹果要开发 Network Extension 的权限。
苹果收到邮件后会自动回复邮件,在 https://developer.apple.com/contact/network-extension/ 里面填写申请表格,内容包括:

Organization:               

Company / Product URL:             

What's your product's target market?              

What's your company's primary function?             

Describe your application and how it will use the Network Extension framework.            

What type of entitlement are you requesting?                     

。。。

申请后大概两周左右能收到 Aplle的 确认信,如:

Hi,

Thanks for your interest in the Network Extension APIs.

We added a new template containing the Network Extension entitlements to your team.

。。。。

2、申请包含 Network Extension 的描述文件

image

选择包含 Network Extension 的描述文件,后点击下载,下载完成双击描述文件。

3、配置 Info.plist

Xcode Info.plist 里 Required background modes 添加 一个 network-authentication(item)

image

4、配置 entitlements

Demo.entitlements(Demo是项目名称) 里添加 Key-Value: com.apple.developer.networking.HotspotHelper -> YES

[图片上传中...(image-bd7f52-1609926532897-2)]

5、iOS 获取 Wifi 列表代码实现

导入头文件

#import <NetworkExtension/NetworkExtension.h>  

代码实现

- (void)getWifiList {

    if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {return;}
    dispatch_queue_t queue = dispatch_queue_create("com.leopardpan.HotspotHelper", 0);
    [NEHotspotHelper registerWithOptions:nil queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
        if(cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) {
            for (NEHotspotNetwork* network  in cmd.networkList) {
                NSLog(@"network.SSID = %@",network.SSID);
            }
        }
    }];
}

kNEHotspotHelperCommandTypeFilterScanList: 表示扫描到 Wifi 列表信息。

NEHotspotNetwork 里有如下信息:

  • SSID:Wifi 名称
  • BSSID:站点的 MAC 地址
  • signalStrength: Wifi信号强度,该值在0.0-1.0之间
  • secure:网络是否安全 (不需要密码的 Wifi,该值为 false)
  • autoJoined: 设备是否自动连接该 Wifi,目前测试自动连接以前连过的 Wifi 的也为 false 。
  • justJoined:网络是否刚刚加入
  • chosenHelper:HotspotHelper是否为网络的所选助手

官方文档连接

6、获取Wifi列表回调

当你把上面的代码写完,并成功运行项目后,发现并没有Wifi列表的回调。因为你还没刷新Wifi列表,你需要:

[图片上传中...(image-a06afb-1609926532896-1)]

这个时候你就能看到控制台源源不断的Log。

注意事项

下面付一张来自 TalkingData 对iOS操作系统的统计报表,时间:2017-01-03

[图片上传中...(image-481307-1609926532896-0)]

参考资源:NEHotspotHelper NetworkExtension API iOS9.0

上一篇 下一篇

猜你喜欢

热点阅读