【发布时间】:2012-10-04 20:04:50
【问题描述】:
我的应用程序要求用户的 iPhone 连接到第 3 方硬件设备,该设备会广播一个 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 更新视图中的文本字段,这通常是正确的,尽管显示了警报。
我的问题如下:有没有更可靠的方法来实现我的目标?我做错了吗?是否可以更改我的方法的某些部分以获得更可靠的结果?
谢谢!如果需要任何其他信息,请随时询问!
【问题讨论】:
标签: iphone ios nsstream cfnetwork