我们的 iOS 设备(ipad、iphone 等)网络出现问题:连接到 SSID 后,iphone/ipad 立即打开强制网络助手 (CNA) - 它就像一个缩小版的浏览器,没有导航按钮等- 显示我们的欢迎页面(准备好让用户在网络中验证他的 MAC,以便为他提供互联网)。此 CNA 是 iOS 的一项功能,并且会自动发生。
我在这个论坛上四处寻找如何让用户通过单击链接(在 CNA 中)打开他的 Safari 浏览器,从而将他从 CNA 转到 Safari(这是我希望他所在的位置)。
我搜索了诸如“如何设置在 safari 中打开的链接”之类的短语,但我得到了关于人们使用phonegap 来做这样的事情的结果......
一位用户谈到使用
window.open(myURL, '_system')
但我不知道这是否能解决我的问题。
基本上我的计划是:
- 让我的欢迎页面(用户连接到我的 SSID 后显示的页面)检测用户设备的浏览器类型。我的欢迎页面托管在我的控制器的围墙花园中的一个站点上,因此每个设备都可以看到该欢迎页面(无论它们是否具有完整的互联网访问权限)。
- 如果用户拥有 iOS 设备,CNA 浏览器会自动打开。我的控制器检测到设备有 CNA 浏览器,并加载一个简单的页面,其中包含以下消息(例如):“单击此处开始导航”
- 在接下来的几秒钟内(当用户正在消化消息时),我的控制器为用户的 MAC 提供完整的互联网访问权限
- 当用户单击 CNA 浏览器中的该链接时,CNA 将关闭然后打开 Safari,并且还会强制 Safari 打开目标欢迎页面(我希望用户所在的位置,具体取决于他连接的天线)。
我真的希望一切都有意义......
我在此论坛中找到了有关 CNA 浏览器的链接:在 iOS 7 中绕过 Apple Captive Network Assistant 登录 https://stackoverflow.com/questions/19682624/bypasses-apple-captive-network-assistant-login-in-ios-7
但它谈到让用户从一开始就打开 Safari(禁用 CNA 功能),“希望”用户打开 Safari(而不是直接进入他的应用程序之一)。我更喜欢用户必须“单击继续”,这会使 Safari 打开并看到我的欢迎页面。
EDIT:此解决方案在 iOS 10.3 之后不起作用。不确定这是一个功能还是一个错误:https://forums.developer.apple.com/thread/75498 https://forums.developer.apple.com/thread/75498
EDIT2:显然它在 iOS 11 上又可以工作了
如果您可以控制强制门户服务器,则有一种简单的方法可以做到这一点。
当连接到 wifi 网络时,iOS 设备会向一堆预定义的 url 发送 GET 请求(http://www.apple.com/library/test/success.html
, ...) ,查看是否有 Internet 连接(wispr 请求)。 iOS 设备期待答案<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>
。如果请求成功,但答案不同(例如您的强制门户页面),则会触发 CNA 打开。
在此阶段,CNA 认为您未连接,并会显示Cancel
按钮在顶部。无论您做什么,每个链接都将在 CNA 内部打开,而不是在 Safari 窗口中打开。 CNA 已完成,以便您可以让您的用户完成登录过程。为了查看登录过程是否完成并最终建立连接,iOS 设备会时不时地发送另一个 wispr 请求。这种情况每 40 秒发生一次,或者每当发出 HTTP 请求时发生(在 CNA 内导航)。
当你的服务器最终回答时Success
对于 wispr 请求,CNA 将标记为connected
,顶部的按钮将变为Done
。在此阶段,任何指向外部 URL 的链接都将关闭 CNA 并在 Safari 中打开:)
总而言之,您可以通过以下连接步骤来实现您想要的目的:
- 服务器使用您的 CNA 页面应答初始 wispr 请求。
- 该页面在 CNA 中打开。在该页面中,有一些 JavaScript 可以立即触发 CNA 内的导航,例如:
<script>window.location.reload(true)</script>
这将触发 iOS 设备立即发送另一个 wispr 请求
- 服务器回答第二个 wispr 请求
<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>
,这将触发 CNA 将其标记为已连接
- 让您的 CNA 页面显示指向外部 url 的链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)