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连接“循环。这可能不是最优美的,但它的工作原理。