NEHotspotHelper NetworkExtension API iOS9.0

我们尝试了新的NetworkExtention API。 我们成功地重新创build了我们的应用程序的所有步骤。 但是,我们有一个问题,我们仍然没有看到Wifi设置屏幕中的SSID名称下面的自定义注释。 我们正在使用ios 9 Beta 3,xcode 7 beta 3。

我们已经成功完成了这些步骤:

  • @note 1应用程序的Info.plist必须包含一个包含“network-authentication”的UIBackgroundModes数组*。

  • @note 2 *应用程序必须将“com.apple.developer.networking.HotspotHelper”*设置为其权利之一。 权利的值是布尔值* true。

这是我们的应用程序中的代码。 我们正在尝试通过“尝试在这里”文本的名称“互联网”注释一个SSID。 我们得到了SSID“Internet”调用setConfidence方法的日志。 但是,我们没有看到Wifiselect屏幕中的实际注释。

我们也尝试将'nil'作为允许显示App名称作为默认注释的选项对象。 但是我们也没有看到。 调用方法registerWithOptions()会返回“true”,当我们打开wifi设置屏幕时,我们会得到callback

NSMutableDictionary* options = [[NSMutableDictionary alloc] init]; [options setObject:@"Try Here" forKey:kNEHotspotHelperOptionDisplayName];  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:@"Internet"]){                [network setConfidence:kNEHotspotHelperConfidenceHigh];                             NSLog(@"Confidance set to high for ssid:%@",network.SSID);            }        }      } }]; 

=========================

请帮助我们了解我们错过了什么?

我已经实现了下面的代码,用于从应用程序内部为SSID“TP-LINK”的“Connect to MyWifi”validation和注释Wifi热点,它工作正常。

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@"Connect to MyWifi", kNEHotspotHelperOptionDisplayName, nil]; dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 0); BOOL isAvailable = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) { NSMutableArray *hotspotList = [NSMutableArray new]; if(cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) { for (NEHotspotNetwork* network in cmd.networkList) { NSLog(@"network name:%@", network.SSID); if ([network.SSID isEqualToString:@"TP-LINK"]) { [network setConfidence:kNEHotspotHelperConfidenceHigh]; [network setPassword:@"<wifi-password>"]; [hotspotList addObject:network]; } } NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess]; [response setNetworkList:hotspotList]; [response deliver]; } }]; 

注意:为了使上述代码正常工作,

  1. 您需要通过邮件networkextension@apple.com从苹果获得授权。
  2. 获得授权后,您需要创build新的供应configuration文件,您必须添加networking扩展授权(仅在您有权访问时才可用),并在xcode中使用该configuration文件以使其可用。
  3. 在您的xcode的授权文件中将授权com.apple.developer.networking.HotspotHelper添加到true 在这里输入图像说明
  4. 在Info.plist中添加networkingauthentication密钥到所需的背景模式数组 在这里输入图像说明 希望有所帮助。 谢谢

您首先需要通过电子邮件将您的应用程序注册为Hotspot Helper https://forums.developer.apple.com/thread/11807

看来这不正是这样。 一个NEHotspotHelperCommand对象实际上期望一个NEHotspotHelperResponse。 您不能直接修改networking。

您的代码中缺less的是NEHotspotHelperResponse的交付。

 NSMutableDictionary* options = [[NSMutableDictionary alloc] init]; [options setObject:@"Try Here" forKey:kNEHotspotHelperOptionDisplayName]; 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:@"Internet"]) { [network setConfidence:kNEHotspotHelperConfidenceHigh]; // This is required NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess]; [response setNetworkList:@[ network ]]; [response deliver]; NSLog(@"Confidance set to high for ssid:%@",network.SSID); } } } }]; 

希望有所帮助。 已经过了一个月了,但我刚刚获得这个权利。