您的位置:首页 > 移动开发 > IOS开发

iOS9 NetworkExtension使用

2016-05-16 12:05 645 查看
        iOS 9 发布之后,推出NetworkExtension, 它可给系统WiFi列表列表里边的WiFi设置密码 、标签(副标题)  来直接点击连接。 还可获取整个WiFi列表。

       首先,向苹果("networkextension@apple.com")发邮件申请使用权限(为什么申请之类的)。 之后苹果会回复一份邮件 类似调查问卷吧,全是单选 ,回答即可  通过之后会有邮件通知。

指导文档<https://developer.apple.com/library/ios/technotes/tn2415/_index.html#//apple_ref/doc/uid/DTS40016427>

<https://forums.developer.apple.com/message/75928#75928>

// 配置

 








结果:


应用程序的Info.plist必须添加一个包含“remote-notification”的UIBackgroundModes数组应用程序必须设置“com.apple.developer.networking.HotspotHelper'作为它的权利之一。

该权利的值是一个布尔值true要申请这个权利,请发送E-MAIL到networkextension@apple.com更多信息请参阅苹果的Hotspot Network Subsystem Programming Guide

.plist 配置



<key>UIBackgroundModes</key>

<array>

        <string>network-authentication</string>

</array>

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。

Manage Hotspot Networks

+ (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方法允许应用程序知道它是否是当前处理的网络。

 

:代码  
    NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
    [options setObject:@"���������� forKey:kNEHotspotHelperOptionDisplayName];

    
    dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 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:@"WISPr Hotspot"]) {

                    
                    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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息