web-dev-qa-db-ja.com

iOSは現在のWLANネットワーク名を取得します

IOS5のobjective-cで現在接続されているWLANネットワークの情報(少なくとも名前)を取得する方法を探しています。

現在、特定のネットワークで動作しないアプリケーションを開発しているため、これが必要です。このネットワーク(私たちの大学)では、サーバーに接続するために必要なポートが閉じられています。ただし、別のネットワークも利用可能であり、前述のネットワークに接続している場合は、ネットワークを切り替える必要があることをユーザーに伝えたいと思います。

どこから始めればいいのかわからない。誰かアイデアやヒントはありますか?

よろしくお願いします

16
Chris

IOS> = 4.1から、デバイスが現在接続されているワイヤレスネットワークのSSIDを取得することができます。

このためには、関数を使用します CNCopyCurrentNetworkInfo

実装の詳細はSOで入手できます: iPhoneはプライベートライブラリなしでSSIDを取得します

15
Rok Jarc

キャプティブネットワークから現在のwifi情報を取得することが可能です。過去、Appleは実際にしばらくの間これを無効にしましたが、強い要求のために再び有効にしたようです。将来これを閉じることを決定する可能性もあります。

取得できる情報はBSSIDSSIDSSIDDATAです。 BSSIDはwifiの一意のアドレス、SSIDは現在のwifi名、SSIDDATASSIDの16進表現です。

Swift 3.1:

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
      }
    }
  }
}

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"]];
}
9
nuynait

IOS 12以降、機能でWi-Fi情報アクセスを許可する必要があります。

から Apple

IOS 12以降でこの機能を使用するには、XcodeでアプリのWiFi情報へのアクセス機能を有効にします。この機能を有効にすると、XcodeはAccessWiFi情報の資格を資格ファイルとアプリIDに自動的に追加します。

8
Derek