程序员iOS技术收藏

iOS之Wifi开发探究

2019-03-07  本文已影响22人  iOS开发之家

最近在做iOSWIFi开发的部分,这里我们主要用到的API以及FrameWork有以下:

一 申请

准备条件:

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

image

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

image image

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

image

二 使用

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

一些相关属性

部分使用代码

<pre class="prettyprint hljs groovy" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Register a Hotspot Helper

@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。

这个方法是主要的.
复制代码</pre>

<pre class="prettyprint hljs ruby" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">+ (BOOL)logoff:(NEHotspotNetwork *)network

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

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

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

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

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

这种方法的主要目的是当没有得到一个命令来处理它时,让一个热点助手偶尔提供在UI里其准确的状态。 此方法加上NEHotspotNetwork的isChosenHelper方法允许应用程序知道它是否是当前处理的网络。
复制代码</pre>

<pre class="prettyprint hljs dockerfile" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">+(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);

}
复制代码</pre>

三 思考

image

通过这样的方式进行连接

image

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

四 总结

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

喜欢的话可以点个赞:+1:或关注。

小编给大家推荐一个iOS技术交流群:458839238!群内提供数据结构与算法、底层进阶、swift、逆向、整合面试题等免费资料
另外附上一份收集的各大厂面试题(附答案) ! 群文件直接获取

各大厂面试题

文章来源网络 如有侵权请联系小编删除

上一篇下一篇

猜你喜欢

热点阅读