是否可以在不使用私有库的情况下获取iPhone上所有可用SSID的列表?
我读了iPhone get SSID without private library,其中包含有关当前网络的详细信息。
This answer提及:
如果您越狱设备,可以使用Apple80211私有框架查找可用的Wi-Fi网络及其信号强度。但这也意味着您的应用会被拒绝。
Apple拥有CaptiveNetwork API,但似乎没有获得所有可用网络列表的解决方案。似乎只能使用the Apple80211 private library或连接所有这些来实现。
我错过了什么,或者没有解决方案?
答案 0 :(得分:29)
如果不使用私人图书馆(Apple80211
),您只能获得设备当前所连接的网络的SSID。
答案 1 :(得分:4)
从iOS 9开始,您可以使用 NEHotspotHelper 来获取SSID列表。但您必须通过发送请求从Apple获得 #install ConEmu
windows_package 'ConEmu' do
installer_type :custom
retries 2
options " /S /D=D:\\Home\\Apps\\ConEmu"
source ""
action :install
end
权利。
查看https://developer.apple.com/documentation/networkextension/nehotspothelper了解详情。
答案 2 :(得分:1)
首先导入以上两个系统头文件
import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h
下面的函数/方法返回SSIDName
-(NSString *)getNetworkId{
NSString *string = CFBridgingRelease(CNCopySupportedInterfaces());
NSArray *interfacesArray = CFBridgingRelease(CFBridgingRetain(string));
if(interfacesArray.count > 0){
NSString *networkName = [interfacesArray objectAtIndex:0];
CFStringRef yourFriendlyCFString = (__bridge CFStringRef)networkName;
NSDictionary *unsafeInterfaceData = CFBridgingRelease(CNCopyCurrentNetworkInfo(yourFriendlyCFString));
NSString *ssidName = unsafeInterfaceData[@"SSID"];
return ssidName;
}
return @"No network Found";
}
答案 3 :(得分:1)
一些新API已作为iOS 9和iOS 11中网络扩展的一部分发布。虽然两者都不允许您在应用程序运行时扫描网络,但它们都允许您执行相关任务。例如。您可以使用Hotspot Helper在“设置Wi-Fi”页面运行时扫描网络,并且可以使用户更容易使用这两种方法加入网络。
这里是两个框架的比较。
NEHotspotHelper
(在iOS 9 WWDC 2015中引入)。com.apple.developer.networking.HotspotHelper
权利。允许您通过“设置”应用中的“ Wi-Fi”屏幕参与对Wi-Fi网络的发现/认证。您进行注册以在扫描网络时收到通知(例如,当用户在“设置”应用中启动Wi-Fi时),您可以自动预填密码并在网络名称附近显示注释。用户仍然需要点击网络名称以进行连接,但是如果您预先填写,它不会提示输入密码。
NEHotspotConfigurationManager
(在iOS 11 WWDC 2017中引入)。com.apple.developer.networking.HotspotConfiguration
权利。允许您启动与Wi-Fi网络的连接。您为它提供了一个列表,其中列出了您的应用运行时应连接的SSID /密码。它将显示一个对话框,询问用户是否要连接到网络。
答案 4 :(得分:0)
第1步:添加框架 SystemConfiguration.framework
第2步:导入以下头文件
import SystemConfiguration
import SystemConfiguration.CaptiveNetwork
第3步:现在使用代码:
func getUsedSSID()->String {
let interfaces = CNCopySupportedInterfaces()
if interfaces != nil {
let interfacesArray = CFBridgingRetain(interfaces) as! NSArray
if interfacesArray.count > 0 {
let interfaceName = interfacesArray[0] as! String
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName)! as Dictionary
let SSIDName = unsafeInterfaceData["SSID"] as! String
print(SSIDName)/* here print recentally used wifi name*/
return SSIDName
}else{
return "0"
}
}else{
return "0"
}
}
答案 5 :(得分:-1)
#import SystemConfiguration#
##import SystemConfiguration.CaptiveNetwork##
//create variable
var SSIDNameArray = NSMutableArray()
var nameArray : NSArray = [];
// Here function to return all SSIDName
func getUsedSSID()->NSArray{
let interfaces = CNCopySupportedInterfaces()
if interfaces != nil {
let interfacesArray = CFBridgingRetain(interfaces) as! NSArray
if interfacesArray.count > 0 {
for interfaceName in interfacesArray {
let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName as! CFString)! as NSDictionary
let SSIDName = unsafeInterfaceData["SSID"] as! String
self.SSIDNameArray .add(SSIDName)
}
nameArray = self.SSIDNameArray .copy() as! NSArray
return nameArray;
}else{
return nameArray;
}
}else{
return nameArray;
}
}