iOS NetworkExtension/NEHotspotHe

作者: 42vio | 来源:发表于2016-04-21 17:24 被阅读6351次

github地址:
https://github.com/42vio/iOS-NetworkExtension-NEHotspotHelper

�NOTE


NEHotsportHelper Custom authentication for Wi-Fi Hotspots
Register with the system as a Hotspot Helper
From the backgroud

  • Claim Hotspots with a level of confidence
  • Perform the initial authentication
  • Maintain the authentication session
  • Annotate Wifi networks in the WiFi network scanner

Register a Hotspot Helper

+ (BOOL)registerWithOptions:(NSDictionary<NSString *, NSObject *> *)options 
                    queue:(dispatch_queue_t)queue 
                    handler:(NEHotspotHelperHandler)handler
@param options
    <key>kNEHotspotHelperOptionDisplayName</key>
    <string>WIFI的注释tag字符串</string>

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

Data Types

typedef void (^NEHotspotHelperHandler)(NEHotspotHelperCommand * cmd)
@discussion
    当调用方法registerWithOptions:queue:handler:时,Hotspot Helper app提供这种类型的blcok。
    每次有要处理的命令时调用block。

实现代码

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"WI-FI TAG", kNEHotspotHelperOptionDisplayName, nil];
    
    dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 0); 
    
    BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {

        if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || 
           cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) 
        {
            for (NEHotspotNetwork* network  in cmd.networkList) 
            {
                if ([network.SSID isEqualToString:@"WX_moses"]) 
                {
                    [network setConfidence:kNEHotspotHelperConfidenceHigh];
                    [network setPassword:@"mypassword"];
                    NSLog(@"Confidence set to high for ssid: %@ (%@)\n\n", network.SSID, network.BSSID);
//                    NSMutableArray *hotspotList = [NSMutableArray new];     
//                    [hotspotList addObject:network];

                    // This is required
                    NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
                    [response setNetwork:network];
                    [response deliver];
                }
            }
        }
    }];

� 获得失败时可能需要以下设置

  • 创建项目 App id 时配置 App Services - Wireless Accessory Configuration
  • 在项目中配置 plist 文件
<key>UIBackgroundModels</key>
<array> 
      <string>network-authentication</string>
</array>
  • 在项目的 entitlements 后缀的文件中添加
    com.apple.developer.networking.HotspotHelper 权利
  • 要进入到【无线局域网】设置页面才能获取 wifi 列表

相关文章

网友评论

  • 蜗牛1992:多个ssid需要打副标题,每次运行都会有一些ssid同样符合要求,缺没有打上副标题
  • ihere洋:我每次需要进到我的app中,系统wifi列表才会出现我设置的信息,当我把App杀死后重新打开系统wifi列表时我之前设置的信息都没有了,怎么才能让系统记住我设置的wifi信息呢?
  • Stubborn_强:楼主问下,如果我仅仅是想获取wifi列表也需要申请么?我获取wifi列表传过来是nil、
  • 2c68a794e6c3:楼主 你有自己尝试过些demo写成功了吗
  • Darren_xu:申请的那个连接地址好像不能用了啊,https://developer.apple.com/contact/network-extension/
    Darren_xu:@zlcode 对的啊,要付费账户才可以
    zlcode:@Darren_xu 只有开发者才可以申请
  • 石丘:这个申请是怎么申请的 发送使用理由和bundleid?
    雪中夜归人:请问你具体用过这个方法吗? 我申请成功了这个权利 而且都按照步骤配置好了,可是注册方法一直返回NO.
    石丘:@zlcode 明白了 多谢
    zlcode:@石丘 http://blog.zlcode.com/2016/04/28/network-extension-framework-right-apply/

本文标题:iOS NetworkExtension/NEHotspotHe

本文链接:https://www.haomeiwen.com/subject/lqvtrttx.html