現在接続されているWi-Fiホットスポットの名前を取得する必要があります。 「BT OpenZone」
CaptiveNetwork 、具体的にはCNCopyCurrentNetworkInfoで実行できると言われています
これまでの私のコード:
#import <SystemConfiguration/CaptiveNetwork.h>
...
// Get the dictionary containing the captive network infomation
CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(kCNNetworkInfoKeySSID);
// Get the count of the key value pairs to test if it has worked
int count = CFDictionaryGetCount(captiveNtwrkDict);
NSLog(@"Count of dict:%d",count);
コードがWiFiホットスポットのデバイスで実行される場合、captiveNtwrkDict
はnilです。
誰かがそれをうまく動かすことができましたか? CaptiveNetworksで多くのドキュメントやサンプルコードの例を見つけることができません...助けていただければ幸いです。
利用可能なネットワークを見つけて、CNCopyCurrentNetworkInfoに渡す必要があります。例えば:
CFArrayRef myArray = CNCopySupportedInterfaces();
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
...そして、返された辞書(myDict)のkCNNetworkInfoKeySSIDを使用して、SSIDを確認できます。メモリを適切に解放/管理することを忘れないでください。
iOS 12
機能からWiFi情報にアクセスできるようにする必要があります。
重要iOS 12以降でこの機能を使用するには、XcodeでアプリのWiFi情報へのアクセス機能を有効にします。この機能を有効にすると、Xcodeは自動的にWiFiアクセス情報の資格を資格ファイルとアプリIDに追加します。 ドキュメントリンク
Swift4.2
public class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
if let interfaceData = unsafeInterfaceData as? [String: AnyObject] {
currentSSID = interfaceData["SSID"] as! String
let BSSID = interfaceData["BSSID"] as! String
let SSIDDATA = interfaceData["SSIDDATA"]
debugPrint("ssid=\(currentSSID), BSSID=\(BSSID), SSIDDATA=\(SSIDDATA)")
}
}
}
return currentSSID
}
}
CNCopySupportedInterfacesはiOS 10で非推奨ではなくなりました( APIリファレンス )
SystemConfiguration/CaptiveNetwork.hをインポートしてSystemConfiguration.frameworkを追加する必要がありますターゲットのリンクライブラリに(ビルド段階で)。
これがSwiftのコードスニペットです ((RikiRiocma's Answer) :
import Foundation
import SystemConfiguration.CaptiveNetwork
public class SSID {
class func fetchSSIDInfo() -> String {
var currentSSID = ""
if let interfaces:CFArray! = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces){
let interfaceName: UnsafePointer<Void> = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, AnyObject.self)
let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)")
if unsafeInterfaceData != nil {
let interfaceData = unsafeInterfaceData! as Dictionary!
currentSSID = interfaceData["SSID"] as! String
}
}
}
return currentSSID
}
}
(重要:CNCopySupportedInterfacesはシミュレータでnilを返します。)
Objective-cについては Esadの回答をここと以下に を参照してください
+ (NSString *)GetCurrentWifiHotSpotName {
NSString *wifiName = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info[@"SSID"]) {
wifiName = info[@"SSID"];
}
}
return wifiName;
}
IOS 9以降、Captive Networkは非推奨です*。 ( ソース )
* iOS 10では廃止されなくなりました。上記を参照してください。
NEHotspotHelper( source )を使用することをお勧めします
Appleに[email protected]宛てにメールを送信し、資格をリクエストする必要があります。 ( ソース )
サンプルコード( 私のコードではありません。PabloAの回答を参照してください ):
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;
}
補足:はい、彼らはiOS 9でのCNCopySupportedInterfacesを廃止し、iOS 10での立場を逆にしました。私はAppleネットワーキングエンジニアと話しました。その反対は、非常に多くの人々がレーダーを提出し、Apple開発者フォーラム。
追加SystemConfiguration.framework
インポート<SystemConfiguration/CaptiveNetwork.h>
以下の方法を使用してください
+ (NSString *)GetCurrentWifiHotSpotName {
NSString *wifiName = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSLog(@"info:%@",info);
if (info[@"SSID"]) {
wifiName = info[@"SSID"];
}
}
return wifiName;
}
Xcode 10およびiOS 12では、「Access Wifi Information」機能を有効にする必要があることに注意してください。