我的应用程序要求用户的 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 更新视图中的文本字段,我觉得这非常奇怪,尽管显示了警报,但这通常是正确的。
我的问题如下:有没有更可靠的方法来实现我的目标?我做错了吗?为了获得更可靠的结果,我可以更改我的方法的某些部分吗?
谢谢!如果需要任何其他信息,请随时询问!