我们在网络上遇到iOS设备问题(ipads,iphone等):连接到SSID后,iphone/ipad立即打开强制网络助手(CNA) - 它就像一个没有导航按钮等的缩小浏览器 - 显示我们的欢迎页面(准备让用户在网络中验证他的MAC以给他上网).这个CNA是iOS的功能,自动发生.
我在这个论坛上四处寻找如何让用户通过点击链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(这是我希望他的地方).
我搜索了一些短语,例如:"如何设置一个在safari中打开的链接",但我得到的结果是关于使用phonegap做这种事情的人...
一个用户谈到使用window.open(myURL,'_ system`)但是我不知道这是否解决了我的问题.
基本上我的计划是: - 让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器类型.我的欢迎页面托管在我的控制器的Walled Garden中的一个站点,因此每个设备都可以看到欢迎页面(无论他们是否具有完全的互联网访问权限). - 如果用户有iOS设备,则CNA浏览器会自动打开.我的控制器检测到设备有一个CNA浏览器,并加载一个带有消息的简单页面(如):"点击此处开始导航" - 在接下来的几秒钟内(当用户消化消息时),我的控制器给用户MAC完全互联网访问 - 当用户在CNA浏览器中点击该链接时,CNA关闭然后打开Safari,并强制Safari打开目标欢迎页面(我希望我的用户在哪里,具体取决于他所使用的天线)连接的).
我真的希望一切都有道理......
我在这个论坛中找到了关于CNA浏览器的链接: Bypasses Apple Captive Network Assistant在iOS 7中登录
但它会让用户从一开始就打开Safari(禁用CNA功能),"希望"用户打开Safari(而不是直接转到他的某个应用程序).我更喜欢用户必须"点击继续",这使Safari打开,他看到我的欢迎页面.
我使用我的Android设备作为移动Web服务器.我想将通过我的便携式Android热点连接的每个用户定向到特定的wellcome页面.
有人知道如何在我的设备中实现这种技术(我相信这被称为强制门户技术)?
在Android设备上,我们的强制门户网站在Android的强制门户浏览器中启动.在身份验证之后,我们将用户重定向到状态页面,在那里他们可以看到他们的会话信息,剩余时间和数据等.大多数用户选择保持此页面打开.
问题是状态页面重定向发生在Captive Portal浏览器中,最终将关闭.有没有什么办法可以在Captive Portal浏览器中的"完整"浏览器中打开状态页面?
大多数相关的Android代码似乎都在CaptivePortalLoginActivity.java中.mBrowserBailOutToken变量看起来很有趣,但我看不出我们如何获得令牌.
关于如何处理这种情况的任何其他想法也将受到赞赏.
Apple更改了有关iOS 13中WiFi的一些内容。如果要使用CNCopyCurrentNetworkInfo,则您的应用程序需要具有以下任一功能
资料来源:WWDC 19会议713
我正在使用NEHotspotConfiguration配置网络,但这样做后无法再获取当前的SSID。
以下代码在iOS 12上运行良好:
/// retrieve the current SSID from a connected Wifi network
private func retrieveCurrentSSID() -> String? {
let interfaces = CNCopySupportedInterfaces() as? [String]
let interface = interfaces?
.compactMap { [weak self] in self?.retrieveInterfaceInfo(from: $0) }
.first
return interface
}
/// Retrieve information about a specific network interface
private func retrieveInterfaceInfo(from interface: String) -> String? {
guard let interfaceInfo = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: AnyObject],
let ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] …Run Code Online (Sandbox Code Playgroud) 我知道可以使用官方Apple SDK中的CaptiveNetwork API在iPhone上列出可用的Wifi网络.
我想知道是否有办法以编程方式自动连接到特定的SSID,只要我能在CaptiveNetwork返回的列表中找到它?
所以简单的想法是我们有一个RADIUS服务器设置,允许用户通过用户凭证与我们的Ruckus控制器进行身份验证.在身份验证时,应将用户重定向到允许他们管理MAC身份验证设备的页面.
在我们迄今为止测试的所有内容中,包括"较旧"的Android设备,这似乎没有问题,而且事情按照应有的方式运行.然而,对于Lollipop(5.0+)版本的Android,强制门户网站已经发生了很大变化,其中一部分变化是自动关闭加入网络时启动的强制网络门户.因为我们希望在身份验证后将它们重定向到MAC设备管理页面,以便他们可以添加他们当前登录的设备并避免再次登录,这很糟糕.
我尝试过的:
检测浏览器是否正在移动设备中启动,并在onbeforeunload中弹出一个尝试保持浏览器打开的警报.
检测到成功验证后,打开一个指向重定向URL的新浏览器窗口(基本上是自己管理重定向).
在重定向的URL上执行选项2,然后执行选项1
什么行不通:
要求用户在其设备上禁用强制网络门户选项.不要试图将一般用户指向高级控件.
创建一个开放的网络来访问MAC管理器,它必须落后于某些身份验证.
解决方案现在:
我们对此解决方案不满意,但现在我们只是要求用户通过网络进行身份验证,然后打开浏览器并转到用户用来手动添加设备的基本登录门户页面(非网络身份验证)连接(如打印机,游戏设备等).虽然这有效,但用户必须登录,打开浏览器,手动输入URL并再次登录才是一种痛苦.
这不是人们没有碰到的问题,看到这里,我只是找不到任何遇到问题的人的解决方案.当然有一些方法可以利用javascript或其他东西来保持浏览器在这种情况下打开.如果没有,任何人都有更好的想法来管理事物?
我尝试使用CaptiveNetwork来替换用于网络用户身份验证的网页.该方法是CNSetSupportedSSIDs.
我试图在我的应用程序的AppDelegate中添加此方法,但是当我想使用具有上述方法注册的SSID的热点时,没有任何事情发生.网页不显示,但我的应用程序未打开.
这是我的代码:
CFStringRef ssids[2] = { CFSTR("Wifi 1"), CFSTR("Wifi 2") };
CFArrayRef arr_ssids = CFArrayCreate(NULL, (const void **)ssids, 2, &kCFTypeArrayCallBacks);
if( CNSetSupportedSSIDs((CFArrayRef)array))
{
NSLog(@"Successfully registered supported network SSIDs");
}
else
{
NSLog(@"Error: Failed to register supported network SSIDs");
}
CFRelease(arr_ssids);
Run Code Online (Sandbox Code Playgroud)
PS:我还为我的应用添加了一个URL方案.
谢谢你的回答!
当您尝试连接到无线网络时,强制网络门户有一个浏览器有时会打开.
有谁知道我怎么调试它?
我已经尝试过的:
我知道有办法通过检查类似的响应,找出WiFi网络是否是一个强大的门户网站"http://clients3.google.com/generate_204".
但我的问题有些不同.我们都知道,在Android上,当我们连接到WiFi网络的连接周期经历了许多在课堂上提到的状态NetworkInfo.DetailedState,像AUTHENTICATING,OBTAINING_IPADDR,VERIFYING_POOR_LINK等等.另外,美国的一个是CAPTIVE_PORTAL_CHECK和android系统检查是否网络,被连接是否被俘.对于这个Android,使用CaptivePortalTracker#isCaptivePortal(InetAddress服务器),结果是boolean.因此,我们确信Android知道连接是否受限制(俘虏)
所以,我的问题是Android系统是否提供了一些回调或某种状态,通过这种状态,我们可以了解网络是强制网络门户而无需手动检查?由于Android系统已经检查了网络的强制门户,我们是否需要再次做同样的事情?
PS我只针对API 19(KitKat 4.4.2).
我正在运行一个强制网络门户,目标受众只是移动设备.我想在CNA中进行身份验证后向用户打开"欢迎页面" .此页面应在(移动)Safari中打开,而不是在CNA中打开,因为它包含在有限的CNA环境中不起作用的交互式元素.
我以前见过这个在其他门户网站工作,但我不知道他们是怎么做的,也不知道经过长时间的研究后甚至是多少.
我有的是:
我想要的是:
要么
到目前为止我找不到任何东西(例如使用target ="_ system").有谁知道这些酒店和其他门户网站如何设法做到这一点,做到了吗?
captivenetwork ×10
ios ×5
wifi ×5
android ×4
iphone ×3
debugging ×1
ios13 ×1
javascript ×1
macos ×1
mobile ×1
networking ×1
objective-c ×1
ssid ×1
swift ×1
tethering ×1
webserver ×1