【问题标题】:Captive Network Usage强制网络使用
【发布时间】:2012-04-17 17:20:59
【问题描述】:

我正在研究以找到在 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" ]);

【问题讨论】:

    标签: iphone objective-c ios wifi


    【解决方案1】:

    “强制网络”类似于您在酒店或星巴克中找到的网络,其中 WiFi 连接已打开,但您需要通过登录或“我接受条件”页面才能连接到任何网站。

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

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

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

    【讨论】:

    • 很好的答案。在您的应用中使用 CaptiveNetwork Reference 时,您的应用用户是否需要先在 Settings 中选择 wifi ?我希望你只需要启动应用程序,如果 StarbuckWifi 例如已被 iOS 检测到,我可以验证并加入...无需触摸设置。
    • 我相信用户需要选择具体的wifi网络,然后让已经注册的应用完成认证。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2020-11-14
      相关资源
      最近更新 更多