4

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

首先他们连接,获取 Captive Portal 页面,然后继续登录 facebook。由于升级到 iOS7,它无法加载 facebook 登录页面。在我的带有 Captive Portal Assistant 的 Mac 上,它没有问题,甚至在使用 iOS 版本的 safari 的手机本身上也没有问题。

这里出了什么问题?是来自 iOS7 Captive Portal Assistant 的 Facebook 过滤请求,还是 Apple 在这里做了一些鬼鬼祟祟的事情?

似乎问题很普遍,并且仅与 facebook 有关。

更新:我使用测试版,几周前他们工作得很好。现在有了相同的 beta 版本,它不再存在了。所以facebook解释的另一点。

问候, 卡斯

4

3 回答 3

5

这个问题是苹果从 IOS 8 开始修复的。但是由于所有的 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 设备在后台尝试重复联系其中一个域。对于用户来说,这似乎是一个错误,因为屏幕保持白色或需要很长时间才能显示第 3 方提供商的登录信息。有时它会停止加载,并且永远不会发生任何事情。

为避免此行为,您必须将上面列出的域列入白名单。这对于 IOS 用户来说不是一种常见的行为,但是这样一来,您的浏览器就可以控制登录会话,并且 IOS 设备不会像登录屏幕那样中断它。

以下网站报道了一些浅薄的信息:

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

于 2013-10-05T09:00:12.040 回答
0

我刚刚测试了各种路由器设置,并注意到当路由器的 DOMAIN 字段为空白时, iOS 7 不会尝试联系上述站点/URL 。

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

于 2013-11-20T19:59:04.080 回答
0

我找到了解决问题的方法。(前段时间,但我又找到了这个帖子)

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

我的解决方案:

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

首先,我保存了检查请求,以便稍后在他返回第三个请求时识别用户。

当第二个请求到来时,我只显示一个信息窗口,表明一切都是正确的,用户必须单击“完成”按钮。

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

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

让我知道是否有人需要更多关于如何检测的信息,或者在必要时甚至可能需要代码示例。

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

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

于 2014-08-19T11:13:04.653 回答