iPhone SSID检查不可靠

时间:2012-10-14 19:15:24

标签: iphone ios nsstream cfnetwork

我的应用程序要求用户的iPhone连接到第三方硬件设备,该设备广播包含产品名称(始终相同)的SSID,后跟单元号(即ProductName_123);本质上是一个强制网络。在允许用户与我的应用程序进行交互之前,我确保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更新视图中的文本字段,尽管显示了警报,通常也是正确的。

我的问题如下:是否有更可靠的方法来实现我的目标?我错了吗?为了获得更可靠的结果,我的方法中是否有一部分可以改变?

谢谢!如果需要任何其他信息,请不要犹豫!

1 个答案:

答案 0 :(得分:0)

我的解决方案是再次运行该方法,直到计数器达到20.如果计数器命中20并且SSID仍不匹配,则假设用户未连接到硬件设备并输入“等待WiFi”连接“循环。这可能不是最优雅的,但它确实有效。