IOS5のobjective-cで現在接続されているWLANネットワークの情報(少なくとも名前)を取得する方法を探しています。
現在、特定のネットワークで動作しないアプリケーションを開発しているため、これが必要です。このネットワーク(私たちの大学)では、サーバーに接続するために必要なポートが閉じられています。ただし、別のネットワークも利用可能であり、前述のネットワークに接続している場合は、ネットワークを切り替える必要があることをユーザーに伝えたいと思います。
どこから始めればいいのかわからない。誰かアイデアやヒントはありますか?
よろしくお願いします
IOS> = 4.1から、デバイスが現在接続されているワイヤレスネットワークのSSIDを取得することができます。
このためには、関数を使用します CNCopyCurrentNetworkInfo
実装の詳細はSOで入手できます: iPhoneはプライベートライブラリなしでSSIDを取得します
キャプティブネットワークから現在のwifi情報を取得することが可能です。過去、Appleは実際にしばらくの間これを無効にしましたが、強い要求のために再び有効にしたようです。将来これを閉じることを決定する可能性もあります。
取得できる情報はBSSID
、SSID
、SSIDDATA
です。 BSSID
はwifiの一意のアドレス、SSID
は現在のwifi名、SSIDDATA
はSSID
の16進表現です。
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
}
}
}
}
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"]];
}
IOS 12以降、機能でWi-Fi情報アクセスを許可する必要があります。
から Apple :
IOS 12以降でこの機能を使用するには、XcodeでアプリのWiFi情報へのアクセス機能を有効にします。この機能を有効にすると、XcodeはAccessWiFi情報の資格を資格ファイルとアプリIDに自動的に追加します。