web-dev-qa-db-fra.com

CNCopyCurrentNetworkInfo avec iOS 13

Apple a changé certaines choses concernant le WiFi avec iOS 13. Si vous souhaitez utiliser CNCopyCurrentNetworkInfo, votre application doit avoir l'un des éléments suivants

  • Applications autorisées à accéder à l'emplacement
  • Votre application est l'application VPN actuellement activée
  • Votre application a configuré le réseau WiFi que l'appareil utilise actuellement via NEHotspotConfiguration

Source: WWDC 19 session 713

Je configure un réseau à l'aide de NEHotspotConfiguration mais je ne peux plus obtenir le SSID actuel après l'avoir fait.

Le code suivant a bien fonctionné avec 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] as? String  
        else {  
            return nil  
    }  
    return ssid  
} 

Avec iOS 13 CNCopyCurrentNetworkInfo renvoie toujours nil.

Mon application dispose de la capacité d'accès aux informations WiFi.

Merci de votre aide!

20
MikeB

semble idiot, mais dans certains appareils, le redémarrage des appareils défaillants est toujours corrigé (au cas où le même code fonctionnerait avant les mises à jour ...)

voir aussi sur:

https://forums.developer.Apple.com/thread/123244

0
ingconti

Pour moi, TryCopyCurrentNetworkInfo renvoie toujours zéro même avec un réseau configuré avec NEHotspotConfiguration. J'ai essayé la recommandation de Mateusz en définissant l'option JoinOne sur false ou true mais cela n'a pas résolu le problème.

Le système d'exploitation du téléphone est 13.1.3 L'accès aux informations WiFi est activé dans mon profil Cela fonctionnait dans iOS 12

0
AlexP

J'ai eu le même problème avec iOS 13.0 mais il semble que Apple corrigé dans 13.3 L'exigence dans le document que ce soit un réseau ajouté par l'application ou que cet emplacement soit activé ou que cette application ait un VPN actif ne fonctionnait pas pour 13.1 13.1 13.2

0
AlexP

J'ai passé des heures à essayer de trouver un moyen de laisser CNCopyCurrentNetworkInfo fonctionner sur iOS 13 sans aucun résultat, quel que soit l'état des autorisations de localisation ou le fait que mon application ait configuré le réseau Wi-Fi actuel que l'appareil utilise actuellement. via NEHotspotConfiguration. Il suffit ne fonctionne pas.

Je suis finalement sorti avec la solution fiable pour obtenir le SSID par getConfiguredSSIDsWithCompletionHandler: méthode de NEHotspotConfigurationManager.

Voici un exemple simple:

static func retrieveCurrentSSID(  callback: @escaping ( String? ) -> Void ){
    NEHotspotConfigurationManager.shared.getConfiguredSSIDs { ( networkSSIDs ) in
        callback( networkSSIDs.first )
    }
}

0
Garba

Doit vérifier que

<key>com.Apple.developer.networking.wifi-info</key>
<true/>

est ajouté à Entitlements-Release.plist, la plupart du temps il vient d'être ajouté à Entitlements-Debug.plist uniquement

0
Tabish Sohail

À partir d'iOS 13, l'API CNCopyCurrentNetworkInfo ne renverra plus d'informations SSID et BSSID Wi-Fi valides. Au lieu de cela, les informations retournées par défaut seront:

SSID: "Wi-Fi" ou "WLAN" ("WLAN" sera retourné pour la référence chinoise) BSSID: "00: 00: 00: 00: 00: 00"

Si votre application utilise cette API, Apple vous encourage maintenant à adopter des approches alternatives qui ne nécessitent pas d'informations Wi-Fi ou réseau. Les informations SSID et BSSID valides de CNCopyCurrentNetworkInfo seront toujours fournies au VPN les applications, les applications qui ont utilisé NEHotspotConfiguration pour configurer le réseau Wi-Fi actuel et les applications qui ont obtenu l'autorisation d'accéder à l'emplacement de l'utilisateur via les services de localisation.

Vous pouvez tester votre application sur la dernière version bêta d'iOS 13 pour vous assurer qu'elle fonctionne correctement. Si votre application nécessite des informations Wi-Fi SSID et BSSID valides pour fonctionner, vous pouvez effectuer les opérations suivantes: Pour les applications de configuration d'accessoires, utilisez l'API NEHotSpotConfiguration, qui a désormais la possibilité de transmettre un préfixe du point d'accès SSID auquel votre application s'attend à se connecter. . Pour d'autres types d'applications, utilisez l'API CoreLocation pour demander le consentement de l'utilisateur pour accéder aux informations de localisation.

0
Lakshay Sharma