The first mistake I made in the code above: I was expecting the command type Evaluate to enumerate through the network list. However, the Evaluate command is actually looking to be delivered the connected network. I get the current network with the following code:
NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];
NEHotspotNetwork *connectedNetwork = [array lastObject];
NSLog(@"supported Network Interface: %@", connectedNetwork);
Then check to see if the connected list matches my SSID, if so I set the confidence level of this network and deliver the response to Evaluate:
[connectedNetwork setConfidence:kNEHotspotHelperConfidenceLow];
//[response setNetworkList:@[network]];
[response setNetwork:connectedNetwork];
[response deliver];
The next command the handler is given is Authenticate. My complete code looks as following, I am still working on processing the commands after authenticate. The complete code line is:
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);
}
}];