Est-il possible d'obtenir une liste de tous les SSID disponibles sur l'iPhone sans utiliser de bibliothèque privée?
J'ai lu l'iPhone obtient le SSID sans bibliothèque privée qui consiste à obtenir des détails sur le réseau actuel .
Cette réponse mentionne:
Si vous jailbreaker votre appareil, vous pouvez utiliser le cadre privé Apple80211 pour rechercher les réseaux Wi-Fi disponibles et la force de leur signal. Mais cela signifie également que votre application sera rejetée.
Apple a CaptiveNetwork API mais il ne semble pas y avoir de solution pour obtenir une liste de tous les réseaux disponibles. Il semble que cela ne soit possible qu'en utilisant la bibliothèque privée Apple80211 , ou en se connectant à tous.
Suis-je en train de manquer quelque chose ou n'y a-t-il pas de solution?
Sans utilisation de bibliothèque privée (Apple80211
), vous ne pouvez obtenir que le SSID du réseau auquel votre appareil est actuellement connecté.
Depuis iOS 9, vous pouvez utiliser NEHotspotHelper pour obtenir une liste des SSID. Mais vous devez obtenir le com.Apple.developer.networking.HotspotHelper
droit de Apple en envoyant une demande.
Vérifiez https://developer.Apple.com/documentation/networkextension/nehotspothelper pour plus d'informations.
Certaines nouvelles API ont été publiées dans le cadre de l'extension réseau dans iOS 9 et iOS 11. Bien qu'aucune ne vous permette de rechercher des réseaux pendant que votre application est en cours d'exécution, elles vous permettent toutes deux d'effectuer des tâches connexes. Par exemple. vous pouvez rechercher des réseaux pendant que la page Paramètres Wi-Fi est en cours d'exécution à l'aide de Hotspot Helper, et vous pouvez faciliter la connexion d'un utilisateur à un réseau à l'aide de l'une ou l'autre de ces options.
Voici une comparaison des deux cadres.
NEHotspotHelper
(introduit dans iOS 9, WWDC 2015 ).com.Apple.developer.networking.HotspotHelper
droit.Vous permet de participer à la découverte/authentification sur un réseau Wi-Fi via l'écran Wi-Fi de l'application Paramètres. Vous vous inscrivez pour être averti lorsque les réseaux sont en cours d'analyse (par exemple lorsque l'utilisateur lance le Wi-Fi dans l'application Paramètres), et vous pouvez pré-remplir automatiquement le mot de passe et afficher une annotation près du nom du réseau. L'utilisateur doit toujours taper sur le nom du réseau pour se connecter, mais il ne demandera pas de mot de passe si vous l'avez pré-rempli.
NEHotspotConfigurationManager
(introduit dans iOS 11, WWDC 2017 ).com.Apple.developer.networking.HotspotConfiguration
droit.Vous permet d'établir une connexion à un réseau Wi-Fi. Vous lui donnez une liste de SSID/mots de passe auxquels vous devez vous connecter pendant que votre application est en cours d'exécution . Il présentera une boîte de dialogue demandant à l'utilisateur s'il souhaite se connecter au réseau.
Tout d'abord, importez au-dessus de deux fichiers d'en-tête système
import SystemConfiguration/SystemConfiguration.h
import SystemConfiguration/CaptiveNetwork.h
ci-dessous Fonction/Méthode Retour 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";
}
Étape 1: ajouter le framework SystemConfiguration.framework
Étape 2: importer le fichier d'en-tête suivant
import SystemConfiguration
import SystemConfiguration.CaptiveNetwork
Étape 3: Utilisez maintenant le code:
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"
}
}