└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # iOS-NetworkExtension-NEHotspotHelper 2 | 简书地址:http://www.jianshu.com/p/aa6219925c2e 3 | >NOTE 4 | - 应用程序的Info.plist必须添加一个包含“网络认证”的UIBackgroundModes数组 5 | - 应用程序必须设置“com.apple.developer.networking.HotspotHelper'作为它的权利之一。该权利的值是一个布尔值true 6 | - 要申请这个权利,请发送E-MAIL到networkextension@apple.com或点击申请链接[https://developer.apple.com/contact/network-extension/](https://developer.apple.com/contact/network-extension/) 7 | - 更多信息请参阅苹果的*[Hotspot Network Subsystem Programming Guide](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/Hotspot_Network_Subsystem_Guide/Contents/Introduction.html#//apple_ref/doc/uid/TP40016639)* 8 | 9 | --- 10 | >NEHotsportHelper Custom authentication for Wi-Fi Hotspots 11 | Register with the system as a Hotspot Helper 12 | From the backgroud 13 | - Claim Hotspots with a level of confidence 14 | - Perform the initial authentication 15 | - Maintain the authentication session 16 | - Annotate Wifi networks in the WiFi network scanner 17 | 18 | ### Register a Hotspot Helper 19 | 20 | ``` 21 | + (BOOL)registerWithOptions:(NSDictionary *)options 22 | queue:(dispatch_queue_t)queue 23 | handler:(NEHotspotHelperHandler)handler 24 | ``` 25 | ``` 26 | @param options 27 | kNEHotspotHelperOptionDisplayName 28 | WIFI的注释tag字符串 29 | 30 | @param queue 31 | dispatch_queue_t 用来调用handle的block 32 | 33 | @param handler 34 | NEHotspotHelperHandler block 用于执行处理 helper commands. 35 | 36 | @return 注册成功YES, 否则NO. 37 | 38 | @discussion 39 | 一旦这个API调用成功,应用程序有资格在后台启动,并参与各种热点相关的功能。 40 | 当应用程序启动此方法应该调用一次。再次调用它会不会产生影响,并返回NO。 41 | ``` 42 | --- 43 | ### Manage Hotspot Networks 44 | + (BOOL)logoff:(NEHotspotNetwork *)network 45 | 46 | ``` 47 | @param network 48 | 对应当前关联的WiFi网络NEHotspotNetwork 49 | 50 | @return 注销命令已成功进入队列YES, 否则NO. 51 | 52 | @discussion 53 | 调用此方法使kNEHotspotHelperCommandTypeLogoff型的NEHotspotHelperCommand向应用程序发出的“handler”模块 54 | 网络参数必须符合当前关联的WiFi网络,即它必须来自对NEHotspotHelperCommand网络属性或方法supportedInterfaces 55 | ``` 56 | 57 | + (NSArray *)supportedNetworkInterfaces 58 | 59 | ``` 60 | @return 61 | 如果没有网络接口被管理,返回nil。否则,返回NEHotspotNetwork对象数组。 62 | 63 | @discussion 64 | 每个网络接口由NEHotspotNetwork对象表示。当前返回的数组包含一个NEHotspotNetwork对象代表Wi-Fi接口。 65 | 这种方法的主要目的是当没有得到一个命令来处理它时,让一个热点助手偶尔提供在UI里其准确的状态。 66 | 此方法加上NEHotspotNetwork的isChosenHelper方法允许应用程序知道它是否是当前处理的网络。 67 | ``` 68 | --- 69 | ### Data Types 70 | typedef void (^NEHotspotHelperHandler)(NEHotspotHelperCommand * cmd) 71 | ``` 72 | @discussion 73 | 当调用方法registerWithOptions:queue:handler:时,Hotspot Helper app提供这种类型的blcok。 74 | 每次有要处理的命令时调用block。 75 | ``` 76 | --- 77 | ### 实现代码 78 | ``` 79 | NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"WI-FI TAG", kNEHotspotHelperOptionDisplayName, nil]; 80 | 81 | dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 0); 82 | 83 | BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) { 84 | 85 | if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || 86 | cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) 87 | { 88 | for (NEHotspotNetwork* network in cmd.networkList) 89 | { 90 | if ([network.SSID isEqualToString:@"WX_moses"]) 91 | { 92 | [network setConfidence:kNEHotspotHelperConfidenceHigh]; 93 | [network setPassword:@"mypassword"]; 94 | NSLog(@"Confidence set to high for ssid: %@ (%@)\n\n", network.SSID, network.BSSID); 95 | // NSMutableArray *hotspotList = [NSMutableArray new]; 96 | // [hotspotList addObject:network]; 97 | 98 | // This is required 99 | NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess]; 100 | [response setNetwork:network]; 101 | [response deliver]; 102 | } 103 | } 104 | } 105 | }]; 106 | 107 | ``` 108 | 109 | > 获得失败时可能需要以下设置 110 | - 创建项目 App id 时配置 App Services - Wireless Accessory Configuration 111 | - 在项目中配置 plist 文件 112 | ``` 113 | UIBackgroundModels 114 | 115 | network-authentication 116 | 117 | ``` 118 | - 在项目的 entitlements 后缀的文件中添加 com.apple.developer.networking.HotspotHelper 权利 119 | - 要进入到【无线局域网】设置页面才能获取 wifi 列表 120 | --------------------------------------------------------------------------------