我的應用程序需要用戶的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,這將通常是正確的,儘管被顯示的警報視圖更新的文本字段。
我的問題是:有沒有更可靠的手段來達到我的目標?我是否錯誤地處理了這個問題?爲了獲得更可靠的結果,是否可以更改我的方法的某些部分?
謝謝!如果需要任何其他信息,請不要猶豫,問!