4

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

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

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

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

这是我们在应用程序中的代码。我们正在尝试通过文本“Try Here”来注释名称为“Internet”的 SSID。我们得到了为 SSID“Internet”调用 setConfidence 方法的日志。然而,我们在 Wifi 选择屏幕中看不到实际的注释。

我们还尝试将“nil”传递给承诺将 App 名称显示为默认注释的选项对象。但我们也没有看到。我们为方法 registerWithOptions() 的调用返回“true”,当我们打开 wifi 设置屏幕时,我们确实得到了回调

 

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); 
            }  
        }    
    } 
}];

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

请帮助我们了解我们缺少什么?

4

3 回答 3

7

我已经实现了以下代码,用于在应用程序内使用“连接到 MyWifi”为 SSID“TP-LINK”验证和注释 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. 获得授权后,您需要创建新的配置文件,您必须在其中添加网络扩展授权(仅当您有权访问时才可用)并在您的 xcode 中使用该配置文件才能使其工作。
  3. 在 xcode 的权利文件中将 权利com.apple.developer.networking.HotspotHelper添加为 true在此处输入图像描述
  4. 在 Info.plist 中,将network-authentication密钥添加到所需的背景模式数组 在此处输入图像描述 希望有所帮助。谢谢
于 2016-08-28T07:44:24.703 回答
1

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

于 2015-08-05T11:15:42.683 回答
1

似乎它并不完全那样工作。NEHotspotHelperCommand 对象实际上需要一个 NEHotspotHelperResponse。您不能直接修改网络。

您的代码中缺少的只是 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); 
           }  
       }    
   } 
}];

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

于 2015-09-14T21:26:58.650 回答