J'ai une application commerciale qui a une raison tout à fait légitime de voir le SSID du réseau auquel elle est connectée: si elle est connectée à un réseau Adhoc pour un périphérique matériel tiers, elle doit fonctionner d'une manière différente que si elle est connecté à Internet.
Tout ce que j'ai vu sur l'obtention du SSID me dit que je dois utiliser Apple80211, qui, je crois, est une bibliothèque privée. J'ai également lu que si j'utilise une bibliothèque privée, Apple n'approuvera pas l'application.
Suis-je coincé entre une pomme et un endroit difficile, ou y a-t-il quelque chose qui me manque ici?
Réponses:
À partir d'iOS 7 ou 8, vous pouvez le faire (vous devez avoir droit à iOS 12+ comme indiqué ci-dessous):
Exemple de sortie:
Notez qu'aucun if n'est pris en charge sur le simulateur. Testez sur votre appareil.
iOS 12
Vous devez activer l'accès aux informations wifi à partir des fonctionnalités.
Swift 4.2
la source
@import
plutôt que#import
). Clang se liera automatiquement dans le cadre nécessaire lorsqu'un module, plutôt qu'un simple en-tête, est importé.CNCopyCurrentNetworkInfo
de renvoyer des informations utiles; sinon, il revientnil
. Voir: stackoverflow.com/questions/56583650/…Voici la version ARC nettoyée, basée sur le code de @ elsurudo:
la source
MISE À JOUR POUR iOS 10 et plus
CNCopySupportedInterfaces n'est plus obsolète dans iOS 10. ( Référence API )
Vous devez importer SystemConfiguration / CaptiveNetwork.h et ajouter SystemConfiguration.framework aux bibliothèques liées de votre cible (sous les phases de construction).
Voici un extrait de code en swift (réponse de RikiRiocma) :
( Important: CNCopySupportedInterfaces renvoie nul sur le simulateur.)
Pour Objective-c, voir la réponse d'Esad ici et ci-dessous
MISE À JOUR POUR iOS 9
À partir d'iOS 9, le réseau captif est obsolète *. ( source )
* N'est plus obsolète dans iOS 10, voir ci-dessus.
Il est recommandé d'utiliser NEHotspotHelper ( source )
Vous devrez envoyer un e-mail à apple à [email protected] et demander des droits. ( source )
Exemple de code ( pas mon code. Voir la réponse de Pablo A ):
Note latérale: Oui, ils ont désapprouvé CNCopySupportedInterfaces dans iOS 9 et ont inversé leur position dans iOS 10. J'ai parlé avec un ingénieur réseau Apple et l'inversion est survenue après que tant de personnes ont déposé des radars et ont parlé du problème sur les forums des développeurs Apple.
la source
Cela fonctionne pour moi sur l'appareil (pas sur le simulateur). Assurez-vous d'ajouter le cadre de configuration du système.
la source
Ce code fonctionne bien pour obtenir le SSID.
Et voici les résultats:
}
la source
Si vous utilisez iOS 12, vous devrez effectuer une étape supplémentaire. J'ai eu du mal à faire fonctionner ce code et j'ai finalement trouvé ceci sur le site d'Apple: "Important Pour utiliser cette fonction dans iOS 12 et versions ultérieures, activez la fonctionnalité Accéder aux informations WiFi pour votre application dans Xcode. Lorsque vous activez cette fonctionnalité, Xcode automatiquement ajoute le droit d'accès aux informations WiFi à votre fichier de droits et à votre ID d'application. " https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo
la source
Voir CNCopyCurrentNetworkInfo dans CaptiveNetwork: http://developer.apple.com/library/ios/#documentation/SystemConfiguration/Reference/CaptiveNetworkRef/Reference/reference.html .
la source
Voici la version courte et douce de Swift.
N'oubliez pas de lier et d'importer le Framework:
Définissez la méthode:
Appelez la méthode quand vous en avez besoin:
Comme mentionné ailleurs, cela ne fonctionne que sur votre iDevice. Lorsqu'elle n'est pas sur WiFi, la méthode retournera nil - d'où l'option.
la source
Pour iOS 13
À partir d'iOS 13, votre application a également besoin d'un accès Core Location pour utiliser la
CNCopyCurrentNetworkInfo
fonction, sauf si elle a configuré le réseau actuel ou dispose de configurations VPN:Voici donc ce dont vous avez besoin (voir la documentation Apple ):
- Lier la
CoreLocation.framework
bibliothèque- Ajouter en
location-services
tant queUIRequiredDeviceCapabilities
clé / valeur dans Info.plist- Ajouter une
NSLocationWhenInUseUsageDescription
clé / valeur dans Info.plist décrivant pourquoi votre application nécessite un emplacement principal- Ajouter le "Accès WiFi Droit aux informations "pour votre application
Maintenant, à titre d'exemple Objective-C, vérifiez d'abord si l'accès à la localisation a été accepté avant de lire les informations réseau en utilisant
CNCopyCurrentNetworkInfo
:la source