2015-07-22 10 views
29

Do dzisiaj używałem interfejsu CaptiveNetwork do wyświetlania nazwy aktualnie podłączonego Wi-Fi. Wstępne wydanie iOS 9 już wskazało, że metody CaptiveNetwork są teraz odłożone, ale nadal działały na początku.Jak uzyskać identyfikator SSID Wifi w iOS9 po tym, jak usługa CaptiveNetwork jest nieaktualna, a połączenia z nazwami Wi-Fi są już zablokowane?

W najnowszej wersji Apple prawdopodobnie zablokował już te połączenia (być może z powodu obaw dotyczących prywatności?).

Czy istnieje inny sposób na sprawdzenie nazwy bieżącego Wi-Fi?

ten sposób uzyskałam SSID aż do dzisiaj, ale można dostać tylko nil teraz:

#import <SystemConfiguration/CaptiveNetwork.h> 

NSString *wifiName = nil; 
NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); 

for (NSString *name in interFaceNames) { 
    NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); 

    if (info[@"SSID"]) { 
     wifiName = info[@"SSID"]; 
    } 
} 

Odpowiedz

10

W wersji GM na iOS 9 wygląda na to, że jest włączona ponownie. W rzeczywistości, to nie jest nawet wymienione jako przestarzałe w dokumentacji online, jednak plik header CaptiveNetwork ma następujący:

CNCopySupportedInterfaces (void) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_8, __MAC_NA, __IPHONE_4_1, __IPHONE_9_0, CN_DEPRECATION_NOTICE); 

Tak, to działa w iOS 9 GM, ale nie wiem, na jak długo :)

+0

To jest właśnie sprawdzane za pomocą naszej aplikacji. W wersji beta została wyłączona. Uff. – bk138

+0

Tak, otrzymałem odpowiedź od firmy Apple na moje pytanie, że ponownie je włączyli w najnowszej wersji. :) – Thyraz

+0

To * jest * wymieniony jako przestarzałe w dokumentacji online: https://developer.apple.com/library/prerelease/ios/documentation/SystemConfiguration/Reference/CaptiveNetworkRef/index.html – user102008

28

Zarejestruj swoją aplikację jako Hotspot pomocnika.

#import <NetworkExtension/NetworkExtension.h> 

NSArray * networkInterfaces = [NEHotspotHelper supportedNetworkInterfaces]; 
NSLog(@"Networks %@",networkInterfaces); 

UPDATE (wrzesień 11th, 2015)

Poniższe Captive API sieci zostały ponownie włączone w najnowszej wersji iOS 9 zamiast.

  • CNCopySupportedInterfaces
  • CNCopyCurrentNetworkInfo

UPDATE (wrzesień 16-ta, 2015)

Jeśli nadal wolą używać NetworkExtension i Apple ci pozwolił dodać uprawnienia, a następnie można to zrobić, aby uzyskać informacje o wifi:

for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) { 
    NSString *ssid = hotspotNetwork.SSID; 
    NSString *bssid = hotspotNetwork.BSSID; 
    BOOL secure = hotspotNetwork.secure; 
    BOOL autoJoined = hotspotNetwork.autoJoined; 
    double signalStrength = hotspotNetwork.signalStrength; 
} 

NetworkExtension zapewnia dodatkowe informacje jako bezpieczne, automatycznie połączone lub siłę sygnału. Umożliwia także ustawienie poświadczeń dla żon w trybie tła, gdy użytkownik skanuje żony.

+0

Ok, wydaje się sposób, że może być możliwe. Jest jednak wątpliwe, czy możemy uzyskać dostęp do uprawnień pomocnika hotspot tylko po to, aby wyświetlić bieżący identyfikator SSID sieci Wi-Fi, ponieważ te uprawnienia należy żądać od firmy Apple pocztą e-mail. Użyłeś już tego w ten sposób? – Thyraz

+2

Nie działa ... powraca NIL jako CNCopySupportedInterfaces() też –

+0

Najpierw musisz zarejestrować swoją aplikację jako Hotspot Helper przez e-mail https://forums.developer.apple.com/message/30657#30657 –

1

CaptiveNetwork nadal działa. Z powodu wielu próśb Apple mogło przywrócić interfejs API.

Za pomocą usługi CaptiveNetwork możemy uzyskać identyfikator SSID sieci Wi-Fi. Działa to nawet w iOS 10.

#import <SystemConfiguration/CaptiveNetwork.h> 

NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); 

Oto wynik:

Printing description of info: 
{ 
    BSSID = "5*:**:**:**:**:**"; 
    SSID = Cisco12814; 
    SSIDDATA = <43697363 6f313238 3134>; 
} 
+0

witam, chcę wiedzieć, co znaczy SSIDDATA. Dziękuję^_^ – beautifulcode

+0

SSIDDATA jest reprezentacją szesnastkową SSID. – Ranjith

5

Potwierdź na 2017-kwiecień-27 Captive Network nadal pracuje dla Swift 3.1, XCode 8.3

Dla Swift> 3.0

func printCurrentWifiInfo() { 
    if let interface = CNCopySupportedInterfaces() { 
    for i in 0..<CFArrayGetCount(interface) { 
     let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interface, i) 
     let rec = unsafeBitCast(interfaceName, to: AnyObject.self) 
     if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString), let interfaceData = unsafeInterfaceData as? [String : AnyObject] { 
     // connected wifi 
     print("BSSID: \(interfaceData["BSSID"]), SSID: \(interfaceData["SSID"]), SSIDDATA: \(interfaceData["SSIDDATA"])") 
     } else { 
     // not connected wifi 
     } 
    } 
    } 
} 

Dla Objective-C

NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); 

for (NSString *name in interFaceNames) { 
    NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); 

    NSLog(@"wifi info: bssid: %@, ssid:%@, ssidData: %@", info[@"BSSID"], info[@"SSID"], info[@"SSIDDATA"]); 
}