iPhone получит список всех SSID без приватной библиотеки
Возможно ли получить список всех доступных SSID на iPhone без использования личной библиотеки?
Я прочитал, что iPhone получает SSID без частной библиотеки, которая касается получения информации о текущей сети.
Этот ответ упоминает:
Если вы сделали джейлбрейк своего устройства, вы можете использовать частную платформу Apple80211 для поиска доступных сетей Wi-Fi и уровня их сигнала. Но это также означает, что ваше приложение будет отклонено.
У Apple есть API-интерфейс CaptiveNetwork, но, похоже, не существует решения для получения списка всех доступных сетей. Кажется, что это возможно сделать только с помощью частной библиотеки Apple80211 или подключением ко всем из них.
Я что-то упустил или нет решения?
6 ответов
Без использования частной библиотеки (Apple80211
) вы можете получить только SSID сети, к которой в данный момент подключено ваше устройство.
Некоторые новые API были выпущены как часть Сетевого расширения в iOS 9 и iOS 11. Хотя ни один из них не позволяет сканировать сети во время работы приложения, они оба позволяют выполнять связанные задачи. Например, вы можете сканировать сети, когда страница настроек Wi-Fi работает с помощью Hotspot Helper, и вы можете упростить подключение пользователя к сети с помощью любого из них.
Вот сравнение двух рамок.
Hotspot Helper
NEHotspotHelper
(представлен в iOS 9, WWDC 2015).- Требуется специальное разрешение от Apple.
- Требуется
com.apple.developer.networking.HotspotHelper
право. - Для пошаговых инструкций, как это работает, смотрите этот ответ.
Позволяет участвовать в обнаружении / аутентификации в сети Wi-Fi через экран Wi-Fi в приложении "Настройки". Вы регистрируетесь, чтобы получать уведомления при сканировании сетей (например, когда пользователь запускает Wi-Fi в приложении "Настройки"), и вы можете автоматически предварительно заполнить пароль и отобразить аннотацию рядом с именем сети. Пользователю все еще нужно нажать на имя сети, чтобы подключиться, но он не будет запрашивать пароль, если вы предварительно заполнили его.
Конфигурация Hotspot
NEHotspotConfigurationManager
(представлен в iOS 11, WWDC 2017).- Не требует специального разрешения от Apple.
- Требуется
com.apple.developer.networking.HotspotConfiguration
право. Позволяет инициировать подключение к сети Wi-Fi. Вы даете ему список SSID / паролей, которые должны быть подключены во время работы вашего приложения. Появится диалоговое окно, спрашивающее пользователя, хотят ли они подключиться к сети.
Начиная с iOS 9, вы можете использовать NEHotspotHelper, чтобы получить список SSID. Но вы должны получить com.apple.developer.networking.HotspotHelper
право от Apple, отправив запрос.
Проверьте https://developer.apple.com/documentation/networkextension/nehotspothelper для получения дополнительной информации.
Шаг 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"
}
}
Прежде всего импортируйте выше двух системных заголовочных файлов
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";
}
#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;
}
}