Facebook.com和iOS7强制门户检测

时间:2013-09-27 16:13:49

标签: ios facebook captivenetwork

我创建了一个连接到Facebook的路由器,以便在用户访问互联网之前获取一些信息。

首先他们连接,获取强制网络门户页面,然后继续登录Facebook。自从升级到iOS7后,它无法加载facebook登录页面。在我的Mac上使用Captive Portal Assistant它没有任何问题,甚至在使用iOS版Safari的手机本身也没有问题。

这里出了什么问题?来自iOS7 Captive Portal Assistant的facebook过滤请求还是Apple在这里做了一些偷偷摸摸的东西?

似乎是problem is widespread,只与facebook有关。

更新:我与测试版合作过,几周前他们的工作正常。现在使用相同的测试版,它已经不再存在了。这是facebook解释的另一点。

问候,Cas

3 个答案:

答案 0 :(得分:5)

自IOS 8以来,Apple已解决此问题。但由于所有iPhone 4用户无法升级到IOS 8,因此问题仍然存在。

IOS 7设备会检查以下域名:

www.appleiphonecell.com
captive.apple.com
captive.apple.com
www.apple.com
www.itools.info
www.ibook.info
www.airport.us
www.thinkdifferent.us

将此域名列入白名单会阻止登录掩码出现,因为IOS设备认为互联网正在按预期工作。这样你可以控制发生的事情,因为如果你使用普通的浏览器登录,IOS设备不会中断任何事情。

如果您不对域列入白名单,则会发生以下情况。我在具有多个IOS设备的路由器上进行了调试,它们大致相同:

  1. 如果您连接到wifi,IOS设备会尝试连接到上面列出的其中一个域。如果它可以联系其中一个域,则尝试另一个域。如果不能,则启动重定向,由路由器控制。有时它在认为互联网正在运行之前会查询一个或多个域。
  2. 检查后,登录屏幕会重定向到您的路由器,然后重定向到您的强制网络门户的登录屏幕。此行为与IOS 6或之前的行为保持一致。
  3. 现在,您开始向Facebook,Google或Twitter等第三方提供商登录oauth。现在差异出现了。如果在调试模式下运行,可以在路由器上进行检查。随着IOS设备进入其他域进行oauth登录(如www.facebook.com),iPhone认为,某些内容发生了变化,并开始查询上面列出的苹果域名之一。用户只能看到白色屏幕,而在后台,IOS设备会尝试重复联系其中一个域。对于用户来说,这似乎是一个错误,因为屏幕保持白色或需要很长时间才能显示第三方提供商的登录信息。有时候它会停止装载而且永远不会发生任何事情。
  4. 要避免此行为,您必须将上面列出的域列入白名单。对于IOS用户来说,这不是一种常见的行为,但是这样,您的浏览器可以控制登录会话,而IOS设备不会像登录屏幕那样中断它。

    以下网站报告了一些浅层信息:

    我找不到问题的详细描述,并通过使用某些路由器和IOS设备(如iPhone和iPad)调试所有部件,找到了上面的问题。

答案 1 :(得分:0)

我刚刚测试了各种路由器设置,发现当路由器的DOMAIN字段为空

时, iOS 7并未尝试联系上述网站/网址

我的猜测是,空白域指向消费者类型的网络设置,Apple并不期望在此类网络上使用强制网络门户。如果您有权管理路由器,请查看是否可以清除DOMAIN字段(并重新启动/重新测试)。

答案 2 :(得分:0)

我找到了解决问题的方法。 (前一段时间,但我又发现了这篇文章)

首先我发现,iOS进行3次调用,首先检查,第二次获取需要显示的页面,第三次在页面加载后再次检查。然后我发现,对于页面发出的每个POST或GET操作,关于源页面的刷新,iOS会检查是否有活动的Internet连接。由于facebook api进行了大量调用,浏览器开始停止(可能与路由器上的QoS结合使用)并冻结页面。

我的解决方案:

由于我控制着我使用的路由器的DNS记录,因此我将所有域重定向到我自己的服务器。

首先我保存了检查请求,以便稍后在第3次请求回来时识别用户。

当第二个请求到来时,我只显示一个信息窗口,表明每件事情都是正确的,用户必须点击"完成"按钮。

页面已加载,因此iOS会再次检查,但我会识别用户,因此我会显示OK代码Apple也会显示。 "完成"按钮我们显示,用户有"互联网",根据iOS ..

在我显示的页面上,我指示用户打开webbrowser。当他这样做时,他打开一个页面,我的门户网站显示正确的页面(我可以根据浏览器代理检测到这个)。然后我的facebook api开始做它的工作,我们去: - )

如果有必要,如果有人需要更多关于如何检测甚至是代码示例的信息,请告诉我。

额外信息 要在您自己的服务器上捕获用户,请使用例如.htaccess将每个请求重定向到您的处理页面。请求是带有子文件的域,例如: http://captive.apple.com/getrT09Nx7G/YNrnUOulnDj/3cfrq3M40iR.html

要保持多个用户分开,请使用设备在检查互联网时尝试联系的唯一网址,在这种情况下:/getYT09Nx7G/YN1nUOulnDj/3cfMq3M40iR.html