iOS开发 详细描述如何做一个 WiFi 项目

Posted iOSer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发 详细描述如何做一个 WiFi 项目相关的知识,希望对你有一定的参考价值。


欢迎点击上方蓝字ioser”关注我们
再点击右上角“...”菜单,选择“设为星标
我们一起精进、成长!

作者 | Jack1105
来源 | 掘金

关键词: wifi , AP , STA , SSID , BSSID , Hotspot

概述

一个偶然的机会接触到一个WiFi应用,主要是对接一个wifi摄像头。
摄像头设备开机创建一个无线网络(相当于热点),手机/iPad 打开App连接到设备的wifi,通过App界面上的操作来控制摄像头的拍照、录制,同时也有些文件的下载等功能。

一、WiFi的STA和AP模式是什么?

1):AP
也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就一个AP。


iOS开发 详细描述如何做一个 WiFi 项目

2):STA站点
每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。


iOS开发 详细描述如何做一个 WiFi 项目

站点(STA,Station)在无线局域网(WLAN,WirelessLocalAreaNetworks)中一般为客户端,可以是装有无线网卡的计算机,也可以是有WiFi模块的智能手机,可以是移动的,也可以是固定的。在无线环境中STA接入的过程包括:认证STA有没有权限和接入点(AP,AccessPoint)建立链路;STA能不能接入WLAN;以及STA接入WLAN网络之后,认证STA能不能访问网络的权限。

在STA和AP建立链路的过程中,当STA通过信标(Beacon)帧或探测响应(Proberesponse)帧扫描到可接入的服务集标识符(SSID,ServiceSetIdentifier)后,会根据已接收到的Beacon帧或Proberesponse帧的信号强度指示(RSSI,ReceivedSignalStrengthIndication)来选择合适的SSID进行接入。

AP(Access Point):
无线接入点,这个概念特别广,在这里,用大白话说,你可以把CC3200当做一个无线路由器,这个路由器的特点不能插入网线,没有接入Internet,只能等待其他设备的链接,并且智能接入一个设备。
类似于点对点模式啦。STA(Station):任何一个接入无线AP的设备都可以称为一个站点。大白话说也就是平时接入路由器的设备
SSID(Service Set Identifier):
SSID,每个无线AP都应该有一个标示用于用户识别,SSID就是这个用于用户识别的的名字,也就是我们经常说到的wifi名。
BSSID:
每一个网络设备都有其用于识别的物理地址,这个东西呢就叫MAC地址,这个东西一般情况下出厂会有一个默认值,可更改,也有其固定的命名格式,也是设备识别的标识符。这个BSSID呢是针对设备说的,对于STA的设备来说,拿到AP接入点的MAC地址就是这个BSSID。
ESSID:
是一个比较抽象的概念,它实际上就和ssid相同(本质也是一串字符),只是能如果有好几个无线路由器都叫这个名字,那么我们就相当于把这个ssid扩大了,所以这几个无线路由器共同的这个名字就叫ESSID。(也就是如果在一台路由器上释放的wifi信号叫某个名字如“China_CMCC”,这个名字“China_CMCC”就称为SSID;如果在好几个路由器上都释放了这个wifi信号,那么大家都叫“China_CMCC”,这个时候大家都遵循的这个名字就是ESSID
举个例子,一家公司面积比较大,安装了若干台无线接入点(AP或者无线路由器),公司员工只需要知道一个SSID就可以在公司范围内任意地方接入无线网络。BSSID其实就是每个无线接入点的MAC地址。当员工在公司内部移动的时候,SSID是不变的。但BSSID随着你切换到不同的无线接入点,是在不停变化的。
用戏称来说,bssid就是具体的某个连锁店编号(001)或地址,ssid就是连锁店的名字或者照片,essid就是连锁店的总公司或者招牌or品牌。一般ssid和essid都是相同的。
RSSI:
这个理解起来更简单,就是通过STA扫描到AP站点的信号强度。

二、iOS自动连接WiFi

通过Wi-Fi来控制设备,iOS11前只能跳转到系统设置界面手动连接Wi-Fi,iOS11之后苹果提供 NEHotspotConfiguration ,NEHotspotConfigurationManager 类直连周边Wi-Fi。

1)权限配置


iOS开发 详细描述如何做一个 WiFi 项目
iOS开发 详细描述如何做一个 WiFi 项目
iOS开发 详细描述如何做一个 WiFi 项目

简单的三步,便开启了Hotspot权限。
并且,在Build Phase -> link Binary With Libraries 中,也已经自动添加了NetworkExtension.framework。

2)加入WiFi

 
   
   
 
#import <NetworkExtension/NetworkExtension.h>

// 获取加入过的wifi列表
- (void)getJoinedWifiList{
if (@available(iOS 11.0, *)) {
[[NEHotspotConfigurationManager sharedManager] getConfiguredSSIDsWithCompletionHandler:^(NSArray<NSString *> * array) {
if (array && array.count > 0) {
UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"连接设备" message:@"请选择要连接的设备" preferredStyle:(UIAlertControllerStyleActionSheet)];
for (NSString * str in array) {
UIAlertAction *action = [UIAlertAction actionWithTitle:str style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
[self joinWifiWithSSID:str pwd:@"123456"];
}];
[alertC addAction:action];
}
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {

}];
[alertC addAction:cancel];
[self presentViewController:alertC animated:YES completion:nil];
}
}];
} else {
// Fallback on earlier versions
}
}
// 加入WiFi
- (void)joinWifiWithSSID:(NSString *)ssid pwd:(NSString *)pwd {
if (@available(iOS 11.0, *)) {
NEHotspotConfiguration *hotspotConfig = [[NEHotspotConfiguration alloc] initWithSSID:ssid passphrase:pwd isWEP:NO];
hotspotConfig.joinOnce = YES; // 默认是NO,会保留配置过的wifi,YES即是不保存
// 开始连接 (调用此方法后系统会自动弹窗确认)
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {
NSLog(@"%@",error);
if (error && error.code != 13 && error.code != 7) {
NSLog(@"连接失败");
}else if(error.code ==7){//error code = 7 :用户点击了弹框取消按钮
NSLog(@"用户点击了弹框取消按钮");
}else{// error code = 13 :已连接
NSLog(@"已连接");
}
}];
} else {
// Fallback on earlier versions
}
}
复制代码

相关参考
  1. WiFi的STA和AP模式指什么?

  2. iOS App无需跳转系统设置自动连接Wi-Fi



作者 | Jack1105
链接 | https://juejin.im/post/5ef1bfa151882565cc296e33

文章来源于网络,已尽可能标明作者以及来源,文章内容为作者独立观点,不代表本公众号立场,因文章侵权本公众号不承担任何法律及连带责任,如有侵权,请联系我们删除。

觉得不错的话,别忘了点个''在看'' 哦~ 

以上是关于iOS开发 详细描述如何做一个 WiFi 项目的主要内容,如果未能解决你的问题,请参考以下文章

ios开发 如何修改正确tabBar的高度?

如何挂钩 ios 连接更改

如何在 iOS 应用程序上接收连接的 WiFi 模块/路由器发送的数据?

如何通过wifi iOS和android之间进行通信?

如何在IOS中获取wifi网络的RSSI值? [关闭]

Android WiFi Direct 设备详细信息