我们的iOS设备(ipad,iphone等)网络存在问题:连接到SSID之后,iphone/ipad会立即打开Captive Network Assistant(CNA)-就像没有导航按钮的缩小浏览器等-显示我们的欢迎页面(供用户在网络中验证其MAC地址以使其具有互联网权限)。此CNA是iOS的一个功能,并且会自动发生。

我在这个论坛上四处寻找如何通过单击链接(在CNA中)使用户打开他的Safari浏览器,从而使他离开CNA进入Safari(我希望他在其中)。

我搜索了诸如“如何设置在safari中打开链接”之类的短语,但是我得到了有关人们使用phonegap进行此类操作的结果...
一位用户谈论使用
window.open(myURL,'_system')
但我不知道这是否能解决我的问题。

基本上我的计划是:
-让我的欢迎页面(用户连接到我的SSID之后显示的页面)检测用户设备具有的浏览器类型。我的欢迎页面托管在我的 Controller 的围墙花园中的某个站点上,因此每个设备都可以看到该欢迎页面(无论他们是否具有完整的Internet访问权限)。
-如果用户使用iOS设备,则CNA浏览器会自动打开。我的 Controller 检测到该设备具有CNA浏览器,并加载了一个带有以下消息的简单页面(例如):“单击此处开始导航”
-在接下来的几秒钟内(当用户正在消化消息时),我的 Controller 为用户的MAC提供了完全的Internet访问权限
-当用户单击CNA浏览器中的链接时,CNA关闭然后打开Safari,并强制Safari打开目标“欢迎页面”(我希望用户位于该页面,具体取决于他所连接的天线)。

我真的希望一切都有意义...

我在以下论坛中找到了有关CNA浏览器的链接:
Bypasses Apple Captive Network Assistant Login in iOS 7

但是它说的是让用户从一开始就打开Safari(禁用CNA功能),“希望”用户打开Safari(而不是直接进入他的一个应用程序)。我更喜欢用户必须“单击以继续”,这使Safari打开并且他看到了我的“欢迎页面”。

最佳答案

编辑:此解决方案在iOS 10.3之后不起作用。不确定是功能还是错误:https://forums.developer.apple.com/thread/75498

EDIT2 :显然,它可以在iOS 11上再次使用

如果您可以控制强制门户网站服务器,则有一种简单的方法。

连接到wifi网络时,iOS设备将GET请求发送到一堆预定义的url(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中导航)时发生。

当您的服务器最终对wispr请求回答Success时,CNA将标记为connected,顶部的按钮将变为Done。在此阶段,任何指向外部URL的链接都将关闭CNA并在Safari中打开:)

综上所述,您可以通过以下连接步骤实现所需的目标:

  • 服务器使用您的CNA页面回答初始wispr请求。
  • 该页面在CNA中打开。在该页面中,有一些JavaScript可以立即触发CNA内的导航,例如:<script>window.location.reload(true)</script>这将触发iOS设备立即发送另一个wispr请求
  • 服务器使用<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>回答第二个wispr请求,这将触发CNA将其标记为已连接
  • 在CNA页面上显示指向外部URL的链接
  • 关于ios - 专属WiFi弹出式视窗: Click a link to open Safari,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23281552/

    10-09 02:20