iPhone SSID检查是不可靠的
问题描述:
我的应用程序需要用户的iPhone连接到广播包含后跟一个单元号(即ProductName_123)产品名称(总是相同)的SSID的第三方硬件设备;本质上是一个圈养网络。在允许用户与我的应用程序交互之前,我确保iPhone当前连接到适当的SSID。我用下面的方法做到这一点(我的隐私的原因混淆的产品名称):iPhone SSID检查是不可靠的
- (BOOL) connectedToHardwareDevice
{
/* Retrieve Interface Information */
CFArrayRef myArray = CNCopySupportedInterfaces();
CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
/* Put network information into an iterable dictionary */
NSDictionary *dict = (NSDictionary*) captiveNtwrkDict;
NSString* ssid = [dict objectForKey:@"SSID"];
/* Look for the Hardware Device name in the SSID */
rangeOfString:@"ProductName"].location == NSNotFound || ssid == NULL)
{
return false;
}
else
{
return true;
}
}
在我的iPhone的无线网络设置,我已经声明了一个静态IP为我的测试设备,这会加速连接过程为DHCP被避免。但是,通常我会打开应用程序,并提示我的“未连接”警报,这是由上述方法返回false引发的。我觉得这是非常奇怪的,考虑到我在与当前的SSID,这将通常是正确的,尽管被显示的警报视图更新的文本字段。
我的问题是:有没有更可靠的手段来达到我的目标?我是否错误地处理了这个问题?为了获得更可靠的结果,是否可以更改我的方法的某些部分?
谢谢!如果需要任何其他信息,请不要犹豫,问!
答
我的解决方案是再次运行该方法,直到计数器命中20.如果计数器命中20并且SSID仍然不匹配,则假定用户未连接到硬件设备并输入“等待WiFi连接“循环。这可能不是最优美的,但它的工作原理。