我的应用程序要求用户的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更新视图中的文本字段,尽管显示了警报,通常也是正确的。
我的问题如下:是否有更可靠的方法来实现我的目标?我错了吗?为了获得更可靠的结果,我的方法中是否有一部分可以改变?
谢谢!如果需要任何其他信息,请不要犹豫!
答案 0 :(得分:0)
我的解决方案是再次运行该方法,直到计数器达到20.如果计数器命中20并且SSID仍不匹配,则假设用户未连接到硬件设备并输入“等待WiFi”连接“循环。这可能不是最优雅的,但它确实有效。