9

我正在研究以找到在 iOS 上使用强制网络的最佳方式。如果我错了,请纠正我,这似乎是允许用户输入不同的 ssid 和密码,当该网络可用时,这些密码可用于自动登录。如果是这样,完成以下操作的最佳方法是什么,从用户那里读取 ssid 和密码并将他连接到该 wifi 网络,或者甚至可能。

到目前为止,我所做的只是用这个拉出当前连接的网络:

NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
id info = nil;

for (NSString *ifnam in ifs) {

    NSLog(@"ifnam = %@", ifnam);

    info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge_retained CFStringRef)ifnam);

    if (info && [info count]) {
        break;
    }
}

NSLog (@"SSID: %@", [ info objectForKey"@"SSID" ]);
4

2 回答 2

13

“强制网络”就像您在酒店或星巴克中找到的那样,其中 WiFi 连接是开放的,但您需要通过登录或“我接受条件”页面才能连接到任何网站。

通常,当您连接到这样的网络时,IOS 设置应用程序会放置一个 Web 表单来完成登录。CN API 的目的是允许您的应用程序进行身份验证,而不是建立一个 Web 表单。

您的问题是关于从用户那里读取 SSID:这似乎不太有用,因为“设置”应用程序已经允许用户指定任意 SSID,然后使用密码登录。Captive Network API 仅在您的应用程序确切知道如何登录网络时才有用,在这种情况下,它也可以知道 SSID。您可以使用通常的 NSTextField 从用户那里获取密码。

另请注意,只要网络连接,IOS 就不会启动您的应用程序:此 API 仅在您的应用程序已经运行时才有效。

于 2012-09-12T20:45:33.747 回答
1

我一般用两步过程来处理这个问题。第一个测试是一般的可达性测试,如果没有网络存在则失败。失败时,我会提醒用户需要网络。如果网络存在,作为第二步,我向我的服务器发送请求。如果超时,我会提醒用户检查需要注意的网络连接。

于 2012-09-17T21:34:24.690 回答