我一直在将 NEHotspotHelper 整合到我管理强制网络的应用程序中,但我遇到了多个问题。在设置为高置信度的网络处于评估状态后,我没有收到身份验证命令 (kNEHotspotHelperCommandTypeAuthenticate)。此外,当在设置的 Wi-Fi 列表中选择 SSID 时,我的 WISPr 网络永远不会收到评估命令(kNEHotspotHelperCommandTypeEvaluate)。我对 WISPr 热点的目标是发送一个需要用户操作的 UINotification。任何人都知道我在这两种情况下没有收到 kNEHotspotHelperCommandTypeAuthenticate 和 kNEHotspotHelperCommandTypeEvaluate 时遗漏了什么?
我在我的应用委托(delegate)中这样设置了 HotspotHelper registerWithOptions:
NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
[options setObject:@"Hotspot" forKey:kNEHotspotHelperOptionDisplayName];/
dispatch_queue_t queue = dispatch_queue_create("com.myapp.ex", 0);
BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
NEHotspotNetwork* network;
NSLog(@"COMMAND TYPE: %ld", (long)cmd.commandType);
if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) {
for (network in cmd.networkList) {
NSLog(@"COMMAND TYPE After: %ld", (long)cmd.commandType);
if ([network.SSID isEqualToString:@"test-WPA-2"]|| [network.SSID isEqualToString:@"WISPr Hotspot"]) {
double signalStrength = network.signalStrength;
NSLog(@"Signal Strength: %f", signalStrength);
[network setConfidence:kNEHotspotHelperConfidenceHigh];
[network setPassword:@"myPassword"];
NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
NSLog(@"Response CMD %@", response);
[response setNetworkList:@[network]];
[response setNetwork:network];
[response deliver];
}
}
}
}];
最佳答案
我在上面的代码中犯的第一个错误:我期望命令类型 Evaluate 枚举网络列表。但是,Evaluate 命令实际上是在寻找传递给连接的网络。我使用以下代码获取当前网络:
NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];
NEHotspotNetwork *connectedNetwork = [array lastObject];
NSLog(@"supported Network Interface: %@", connectedNetwork);
然后检查连接列表是否与我的 SSID 匹配,如果匹配,我设置该网络的置信度并将响应传递给 Evaluate:
[connectedNetwork setConfidence:kNEHotspotHelperConfidenceLow];
//[response setNetworkList:@[network]];
[response setNetwork:connectedNetwork];
[response deliver];
处理程序给出的下一个命令是身份验证。我的完整代码如下所示,我仍在处理身份验证后的命令。完整的代码行是:
BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
NEHotspotNetwork* network;
if (cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) {
for (network in cmd.networkList) {
//need to check against list of directories
if ([network.SSID isEqualToString:@"test-WPA-2"]) {
NSLog(@"%@", network.SSID);
NSLog(@"SSID is in Directory: %@", network.SSID);
double signalStrength = network.signalStrength;
NSLog(@"Signal Strength: %f", signalStrength);
[network setConfidence:kNEHotspotHelperConfidenceLow];
[network setPassword:@"password"];
NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
NSLog(@"Response CMD %@", response);
[response setNetworkList:@[network]];
[response setNetwork:network];
[response deliver];
}
}
}
if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate) {
/* * When a network is joined initially, the state machine enters
* the Evaluating state. In that state, each HotspotHelper receives a
* command of type Evaluate. If one or more helpers indicates that it
* is able to handle the network, the one with the highest confidence
* level is chosen before entering the Authenticating state. As an
* optimization, the first helper to assert a high confidence wins and
* the state machine ignores the other helpers.
*
* If no helpers claim the network, the state machine enters the
* Authenticated state.
*/
NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];
NEHotspotNetwork *connectedNetwork = [array lastObject];
NSLog(@"supported Network Interface: %@", connectedNetwork);
NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
NSLog(@"Response CMD %@", response);
[connectedNetwork setConfidence:kNEHotspotHelperConfidenceLow];
//[response setNetworkList:@[network]];
[response setNetwork:connectedNetwork];
[response deliver];
}
if (cmd.commandType == kNEHotspotHelperCommandTypeAuthenticate) {
NSLog(@"COMMAND TYPE In Auth ***********: %ld \n\n\n\n\n\n", (long)cmd.commandType);
/*
* In the Authenticating state, the chosen helper is given a command of type
* Authenticate. The helper is expected to perform whatever network
* processing is required to make the network available for general
* network traffic. If the authentication is successful, the helper
* indicates that with a Success result. The state machine enters the
* Authenticated state.
*
* On a network that has been authenticated by a helper, the state machine
* enters the Maintaining state when the network is joined again, and also
* periodically while the system remains associated with the network. In the
* Maintaining state, the helper is expected to perform whatever network
* operations are required to determine if the network is still able to
* carry general network traffic. If that is the case, the helper returns
* Success. If not, and authentication is again required, it returns
* AuthenticationRequired to cause the state machine to re-enter the
* Authenticating state.
*
* In the Authenticating state, if the helper determines that it requires
* user interaction to proceed, the helper first arranges to alert
* the user via a UserLocalNotification, then returns a result of
* UIRequired. The state machine enters the PresentingUI state.*/
}
if (cmd.commandType == kNEHotspotHelperCommandTypePresentUI) {
NSLog(@"COMMAND TYPE In Present UI ***********: %ld \n\n\n\n\n\n", (long)cmd.commandType);
}
}];
关于ios - NEHotspotHelper 未获得 Authenication/Evaulate 命令 NetworkExtension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975104/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最