我正在使用AFNetworking的可达性管理器来监视特定域的可达性,如下所示:
reachabilityManager = [AFNetworkReachabilityManager managerForDomain:@"www.xyz.com"];
[reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
DLog(@"***became reachable***");
break;
case AFNetworkReachabilityStatusNotReachable:
default:
DLog(@"***became UNreachable***");
break;
}
}];
[reachabilityManager startMonitoring];
它工作良好,除非设备连接到强制门户/网络并禁用所有其他数据。由于某种原因,管理员认为设备处于可访问状态,尽管事实上域是不可访问的(如果要在浏览器中输入相应的URL,它将重定向到强制门户的登录页面)。
我做错了什么吗?如果不是,有没有别的办法?
谢谢!
不幸的是,可达性只是检查一个特定的主机或dns名称是否响应。正如您在浏览器中看到的那样,强制门户的工作方式是响应所有请求,以便无论用户试图访问哪个站点都能显示登录页面。可达性表示这个域是可达的,因为它得到了响应。它无法区分"真实"响应和捕获门户之间的区别。
你需要让你的代码尝试从你的网站上检索一个已知的信息片段,当它是"可访问的"——像"http://example.com/signature.txt",其中签名。txt包含你可以检查的文本。如果你得到了适当的值,那么你就知道你真的在和你的网站说话。如果不是,那么它可能是一个强制门户