iOS之Wifi开发探究

栏目: IOS · 发布时间: 7年前

内容简介:好久没有写博客了,最近在做iOSWIFi开发的部分,这里我们主要用到的API以及FrameWork有以下:准备条件:申请步骤: 申请网址

好久没有写博客了,最近在做iOSWIFi开发的部分,这里我们主要用到的API以及FrameWork有以下:

  • NetworkExtension.framework
  • NEHotspotHelper

一 申请

准备条件:

  • 1 付费的开发者账号
  • 2 公司的WebSite
  • 3 明确你的Wifi开发需求

申请步骤: 申请网址 developer.apple.com//contact/ne… 填写申请的相关资料

iOS之Wifi开发探究

根据你项目中的具体情况,在相对应的地方打钩

iOS之Wifi开发探究
  • 上述表填写完毕之后,发送之后,没多久会受到一封邮件,邮件的大致内容为
iOS之Wifi开发探究

大致意思就是从16年11月10日开始 可以在开发者账户的account页面创建APPID的时候添加网络扩展

iOS之Wifi开发探究
  • Note:NetWork Extensions能做的有限,可以获取WiFi名字和mac地址,但是注册改变Wifi设置页面子title 设置密码 并可以进行连接 这仍需我们申请并获取HotsPotHelperApi的使用权限 过两周或者更久可以收到Apple回复的是否通过的Email,如果失败了不要气馁,据很多小伙伴反应,比追姑娘都要麻烦:joy:

二 使用

在这里我就不多加赘述,WIFi开发的相关资料虽然很少,但是申请成功后,如何在项目中配置,这部分的文章网上有很多,具体配置给你们推荐两篇文章好吧

一些相关属性

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

部分使用代码

Register a Hotspot Helper

+ (BOOL)registerWithOptions:(NSDictionary*)options queue:(dispatch_queue_t)queue handler:(NEHotspotHelperHandler)handler

@param options 

 kNEHotspotHelperOptionDisplayName :WIFI的注释tag字符串// 此处设置的内容会在WiFi列表中每个WiFi下边展示出来 

@param queue dispatch_queue_t 用来调用handle的block 

@param handler NEHotspotHelperHandler block 用于执行处理 helper commands.

 @return 注册成功YES, 否则NO. 

@discussion 一旦这个API调用成功,应用程序有资格在后台启动,并参与各种热点相关的功能。 当应用程序启动此方法应该调用一次。再次调用它不会产生影响,并返回NO。

这个方法是主要的.
复制代码
+ (BOOL)logoff:(NEHotspotNetwork *)network

@param network 对应当前关联的WiFi网络NEHotspotNetwork

 @return 注销命令已成功进入队列YES, 否则NO. 

@discussion 调用此方法使kNEHotspotHelperCommandTypeLogoff型的NEHotspotHelperCommand向应用程序发出的“handler”模块 网络参数必须符合当前关联的WiFi网络,即它必须来自对NEHotspotHelperCommand网络属性或方法supportedInterfaces

+ (NSArray *)supportedNetworkInterfaces

@return 如果没有网络接口被管理,返回nil。否则,返回NEHotspotNetwork对象数组。 

@discussion 每个网络接口由NEHotspotNetwork对象表示。当前返回的数组包含一个NEHotspotNetwork对象代表Wi-Fi接口。

 这种方法的主要目的是当没有得到一个命令来处理它时,让一个热点助手偶尔提供在UI里其准确的状态。 此方法加上NEHotspotNetwork的isChosenHelper方法允许应用程序知道它是否是当前处理的网络。
复制代码
  • 获取wifi列表,并给系统设置页面Wifi设置子标题 可以获得wifi名称,信号强度,mac地址等等
+(void)getWifiList{

    NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
    [options setObject:@":key:Wifi子标题:key:" forKey:kNEHotspotHelperOptionDisplayName];

    dispatch_queue_t queue = dispatch_queue_create("com.pronetwayXY", NULL);
    BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
        NEHotspotNetwork* network;
        NSLog(@"COMMAND TYPE:   %ld", (long)cmd.commandType);
        [cmd createResponse:kNEHotspotHelperResultAuthenticationRequired];
        if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) {
            NSLog(@"WIFILIST:   %@", cmd.networkList);
            for (network  in cmd.networkList) {
                // NSLog(@"COMMAND TYPE After:   %ld", (long)cmd.commandType);
                if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"proict_test"]) {

                    double signalStrength = network.signalStrength;
                    NSLog(@"Signal Strength: %f", signalStrength);
                    [network setConfidence:kNEHotspotHelperConfidenceHigh];
                    [network setPassword:@"password"];

                    NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
                    NSLog(@"Response CMD %@", response);

                    [response setNetworkList:@[network]];
                    [response setNetwork:network];
                    [response deliver];
                }
            }
        }
    }];
    NSLog(@"result :%d", returnType);
    NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];
    NSLog(@"wifiArray:%@", array);
    NEHotspotNetwork *connectedNetwork = [array lastObject];
    NSLog(@"supported Network Interface: %@", connectedNetwork);

}
复制代码

三 思考

  • 1 必须进入到系统WIFI设置页面才可以获取到WIFI列表(包括强度 WIFI名称)参考WIFI万能助手 可能都是通过LBS一些方法告诉你附近可能存在的WIFI,然后通过点击推荐的WIFI 进入下一步
iOS之Wifi开发探究
  • 2 点击上方任意一个可能存在的WIFI,因为Apple政策原因 无法再APP内直接连接WIFI!!! 所以万能钥匙的策略是 如下图,提供你个连接教程,将可以连接的WIFI名称进行更改,在下方加上提示文字 比如 :key:万能WIFI - 点击一键上网:key: 
    iOS之Wifi开发探究

通过这样的方式进行连接

iOS之Wifi开发探究

这里万能钥匙的做法是帮助用户跳到wifi系统设置页面,市面上还有很多需要用户自己手动进入WIFI设置页面的App,比如360免费wifi,这样虽然牺牲了一部分用户体验,但是在审核方面可以通过率大大增加,还是比较值得倡导的

  • 3 不能主动通过代码的方式断开WIFI 比如 有一个按钮叫做断开WIFI 这样是不允许的 只能通过用户手动关闭WIFI或者WIFI本身无法连接网络只能通过判断当前网络状态的方式进行连接

四 总结

iOS wifi开发相关资料较少,Apple对这方面的审核也较为严格 希望这篇文章可以帮助到正在做wifi开发相关的小伙伴们,加油!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Implementing Responsive Design

Implementing Responsive Design

Tim Kadlec / New Riders / 2012-7-31 / GBP 27.99

New devices and platforms emerge daily. Browsers iterate at a remarkable pace. Faced with this volatile landscape we can either struggle for control or we can embrace the inherent flexibility of the w......一起来看看 《Implementing Responsive Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具