2012-10-14 38 views
0

我的應用程序需要用戶的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,這將通常是正確的,儘管被顯示的警報視圖更新的文本字段。

我的問題是:有沒有更可靠的手段來達到我的目標?我是否錯誤地處理了這個問題?爲了獲得更可靠的結果,是否可以更改我的方法的某些部分?

謝謝!如果需要任何其他信息,請不要猶豫,問!

回答

0

我的解決方案是再次運行該方法,直到計數器命中20.如果計數器命中20並且SSID仍然不匹配,則假定用戶未連接到硬件設備並輸入「等待WiFi連接「循環。這可能不是最優美的,但它的工作原理。