一、简介

首先放上苹果官方文档:https://developer.apple.com/reference/networkextension/nehotspothelper

NEHotspotHelper 是 NetworkExtension.framework中与wifi连接相关的一个功能类。

1.+ supportedNetworkInterfaces

可以获取到当前扫描到的WIFI列表,包含SSID,加密方式,信号强度信息。

2.+ registerWithOptions:queue:handler:

注册当前app成为一个wifi辅助管理者,可以对指定的wifi,进行密码导入,并作字符串标记。

二、使用步骤

第一部分(权限申请)

1.向苹果官方邮箱发权限申请邮件,使用自己的开发者账号邮箱申请,即代表所在的开发团队申请

2.邮件内容需要简单介绍APP的使用场景,以及为什么要使用NEHotspotHelper。

英文水平渣,大概看看就好。

3.发送完,就会收到一封苹果的回复,这时候去访问提示的那个网址,填写对应的权限申请信息。

4.访问https://developer.apple.com/contact/network-extension/,登入自己开发账号,会有自己和所在开发团队的信息

5.填写对应的App信息,然后send。

6.邮箱会收到信息确认邮件,核实一下刚才填写的信息。如果没问题,就等大约三周时间,等苹果官方回复。

7.我这次 6月15申请,7月1号收到申请通过的邮件

8.去开发者中心配置开发证书,把Wireless Accessory Configuration,iCloud配置进去。

注意:配置文件,必须新建,在之前已存在的修改,后面工程运行会提示证书权限不匹配。

第二部分(项目工程配置)

1.Target - Capabilities  开启iCloud 和 Wireless Accessory Configuration

2.上述步骤完成,工程会自动生成一个 .entitlements 权限文件,需要手动添加一项:com.apple.developer.networking.HotspotHelper ,设置它的Bool值为YES

3.在项目中配置info.plist文件

UIBackgroundModels 数组中增加 network-authentication

4.使用NEHotspotHelper

程序后台运行,进入系统WIFI设置页时,就会走NEHotspotHelperHandler回调,对代码中设置的网络,会进行密码填充和标记。

接下来我们创建一个示例工程,演示如何获取 WiFi 列表。首先,将 Bundle ID 改为之前设置的 EFNEHotspotHelperDemo:

修改 Bundle ID

然后在 Info.plist 中添加后台模式权限数组:

添加后台模式代码

代码如下:

<key>UIBackgroundModes</key>
<array><string>network-authentication</string>
</array>

添加完成后可以在 Target -> Capabilities 中看到后台模式已处于开启状态:

后台模式已开启

接下来在 Capabilities 找到 Wireless Accessory Configuration 并将其打开:

打开 Wireless Accessory Configuration

在工程中找到后缀为 {工程名}.entitlements 的文件 EFNEHotspotHelperDemo.entitlements,在其中加入 HotspotHelper 权限代码:

添加 HotspotHelper 权限代码

代码如下:

<key>com.apple.developer.networking.HotspotHelper</key>
<true/>

好了,到这里已经完成了各种乱七八糟的配置工作,可以尝试进行 Build。如果没有提示错误信息的话,接下来就可以愉快地使用 HotspotHelper 了;如果有问题的话,请检查之前的步骤是否都已正确完成或者根据错误信息修改具体项目。

核心代码部分,首先在需要使用 HotspotHelper 的地方添加头文件引用,这里以 Objective-C 代码为例:

#import <NetworkExtension/NetworkExtension.h>

然后使用如下代码即可将 WiFi 列表信息打印到 XCode 控制台,注意:这里需要打开系统 设置 中的 无线局域网 页面才能获取相关信息,因为打开该页面系统刷新 WiFi 信息时才会触发该回调:

- (void)scanWifiInfos{NSLog(@"1.Start");NSMutableDictionary* options = [[NSMutableDictionary alloc] init];[options setObject:@"EFNEHotspotHelperDemo" forKey: kNEHotspotHelperOptionDisplayName];dispatch_queue_t queue = dispatch_queue_create("EFNEHotspotHelperDemo", NULL);NSLog(@"2.Try");BOOL returnType = [NEHotspotHelper registerWithOptions: options queue: queue handler: ^(NEHotspotHelperCommand * cmd) {NSLog(@"4.Finish");NEHotspotNetwork* network;if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) {// 遍历 WiFi 列表,打印基本信息for (network in cmd.networkList) {NSString* wifiInfoString = [[NSString alloc] initWithFormat: @"---------------------------\nSSID: %@\nMac地址: %@\n信号强度: %f\nCommandType:%ld\n---------------------------\n\n", network.SSID, network.BSSID, network.signalStrength, (long)cmd.commandType];NSLog(@"%@", wifiInfoString);// 检测到指定 WiFi 可设定密码直接连接if ([network.SSID isEqualToString: @"测试 WiFi"]) {[network setConfidence: kNEHotspotHelperConfidenceHigh];[network setPassword: @"123456789"];NEHotspotHelperResponse *response = [cmd createResponse: kNEHotspotHelperResultSuccess];NSLog(@"Response CMD: %@", response);[response setNetworkList: @[network]];[response setNetwork: network];[response deliver];}}}}];// 注册成功 returnType 会返回一个 Yes 值,否则 NoNSLog(@"3.Result: %@", returnType == YES ? @"Yes" : @"No");
}

代码演示,唔,Demo 运行效果如下,点击 Open WiFi Setting 按钮可直接打开 无线局域网 页面:

iOS wifi开发相关推荐

  1. iOS应用开发入门(1)——第一个iOS应用

    最近因为工作的原因,需要学习iOS应用开发. 本人现在在公司负责的是智能设备联网模块,所谓的智能设备联网,就是让一些智能设备(多半是没用屏幕的设备)连上wifi,因为没有屏幕,所以无法像手机和平板那样 ...

  2. 收集各种 iOS App 开发可以用到的代码示例

    code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例  cocoacontrols.com/ 英文版本的lib收集  objclibs.com/ 精品lib的收集网站 ...

  3. iPad应用开发实践指南:菜鸟如何用ios 5开发ipad上的复杂应用程序

    <iPad应用开发实践指南>前言 2011年10月,苹果公司首席执行官Tim Cook公布了有关iPad的一些有趣数据,包括: 财富500强公司有92%在测试或部署iPad: 美国本土80 ...

  4. ios实现wifi搜索连接_Wifi 定位原理及 iOS Wifi 列表获取

    Wifi 定位原理及 iOS Wifi 列表获取 对于大家来说,Wifi 应该是一个很熟悉的词了,我们每天都可能在使用 Wifi 热点.Wifi 除了能给我们提供热点之外同时还有定位的作用, 现在移动 ...

  5. iOS应用开发之权限说明

    在iOS应用开发的过程中,需要配置info.plist文件给应用添加权限,该文件是键值对的形式.下面对info.plist文件中的部分权限进行说明,详细内容请以苹果开发者官网为准:https://de ...

  6. 物联网APP开源框架教程(二)—— iOS APP开发

    如何使用核心模块开发设备控制功能(iOS APP开发) 导读:本次教程我们在开源框架代码基础上做一个控制gokit红灯开的App,Wi-Fi设备接入机智云客户端调试工具包括 iOS Demo 和And ...

  7. 《iOS移动开发从入门到精通》图书连载一:如果你也想开发一款自己的APP,可以看一下这篇文

    前言:互联网+时代给自己多一个选择的机会,尝试开发一款属于自己的APP,绝对是件激动人心的事情!<iOS移动开发从入门到精通>已经上市并和大家见面.从今天起,我会将把图书的部分内容以连载的 ...

  8. 在Win7上用VMWare搭建iOS/iPad开发环境

    本文记录了在Win7上用VMWare 9安装Mac OS X Lion 10.7.5的过程,如果你想学习观摩一下iOS的开发,并且和我一样是无MAC的码农屌丝,可以参考一下. 1.物理机配置及操作系统 ...

  9. 如何用ios 5开发ipad上的复杂应用程序

    2011年10月,苹果公司首席执行官Tim Cook公布了有关iPad的一些有趣数据,包括: 财富500强公司有92%在测试或部署iPad: 美国本土80%的医院在测试或用iPad控制流程: 美国的每 ...

  10. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

最新文章

  1. poj3624 Charm Bracelet DP 01背包问题
  2. Java中sc在哪里关闭_node 中设置的session,在javasc 怎么获取
  3. PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)
  4. 在Centos上编译安装nginx
  5. PAT (Basic Level) 1044 火星数字(模拟)
  6. php private方法,php如何调用private方法
  7. python网络编程知识点_python 网络编程要点
  8. C++学习心得总结【20181128】
  9. redis bitmap存储入门
  10. python验证码校验代码_python 图片验证码代码
  11. js 多维数组 应用
  12. 友图自动排料引擎 V1.0 开发指南
  13. 杰控连接mysql_杰控FameView在数据库连接和查询方面的应用
  14. Edraw Office Viewer Component Crack
  15. 如何调整硬盘分区大小
  16. C语言 修改JPEG图片属性
  17. Numpy:数组(Ndarray)操作之数组的转换
  18. ubuntu网络无法连接
  19. Thunder for Mac: 迅雷下载记录保存文件etm_task_store.dat.mac的解析 【更新】
  20. STC51和STM32使用串口输出中文乱码问题解决

热门文章

  1. 帮你举例说明什么是Python鸭子类型
  2. 汽车零部件行业需求分析及解决方案
  3. 【Rust 日报】2021-10-14 Rust是一种让你首先得到宿醉的语言
  4. 微信小程序——发送模板消息
  5. PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据...
  6. css圣杯模式的HTML代码,三种方式实现圣杯布局
  7. 基于opencv求直线方程
  8. Cocos2d-Html5--打怪升级之路
  9. 源中瑞区块链baas服务平台搭建系统
  10. MTK6577+Android之按键(key)修改