iOS 9 發佈以後,蘋果推出了 NetworkExtension,利用這個框架能夠實現不少和網絡相關的操做。本文主要介紹怎樣使用其中的 NEHotspotHelper 進行設備 WiFi 列表的獲取。ios
Demo 地址:github.com/EyreFree/EF…git
打開蘋果開發者中心,登錄而後找到 App IDs 選項,點擊右上角按鈕建立一個 App ID 用於接下來建立 Provisioning Profile,地址爲: developer.apple.com/account/ios… ,如圖所示:github
首先,填寫 Name 以及 Bundle ID,這裏統一填寫爲 EFNEHotspotHelperDemo,如圖所示:數組
接下來這一步注意須要勾選 Wireless Accessory Configuration 這一選項,如圖所示:bash
而後觀察到如圖所示狀態代表已成功打開:網絡
在 App IDs 列表中查看剛建立完成的 App ID:app
找到 Provisioning Profiles 選項,點擊右上角按鈕建立一個 Provisioning Profile 用於接下來建立示例工程,地址爲: developer.apple.com/account/ios… ,如圖所示:框架
首先選擇 Profile 類型,這裏我選擇的是 iOS App Development,能夠根據本身的具體須要自由選擇:less
接下來選擇咱們在第二步建立好的 App ID,如圖所示:ide
而後選擇證書和設備,全選便可:
在額外權限這一步須要選中咱們申請到的 Network Extension 權限,能夠看到其中包含咱們須要使用的 NEHotspotHelper 權限,如圖所示:
填寫完 Profile Name 以後,便可成功建立咱們須要的 Profile:
點擊 Download 將它下載到本地:
雙擊打開,便可將 Profile 添加到本機:
能夠到 XCode 的帳戶設置裏查看已安裝的 Profile,若未安裝成功能夠嘗試點擊 Action 中的 Download 按鈕從新下載:
接下來咱們建立一個示例工程,演示如何獲取 WiFi 列表。首先,將 Bundle ID 改成以前設置的 EFNEHotspotHelperDemo:
而後在 Info.plist 中添加後臺模式權限數組:
代碼以下:
<key>UIBackgroundModes</key>
<array>
<string>network-authentication</string>
</array>
複製代碼
添加完成後能夠在 Target -> Capabilities 中看到後臺模式已處於開啓狀態:
接下來在 Capabilities 找到 Wireless Accessory Configuration 並將其打開:
在工程中找到名爲 {工程名}.entitlements 的文件,例如 Demo 中的應爲 EFNEHotspotHelperDemo.entitlements,在其中加入 HotspotHelper 權限代碼:
代碼以下:
<key>com.apple.developer.networking.HotspotHelper</key>
<true/>
複製代碼
好了,到這裏已經完成了各類亂七八糟的配置工做,能夠嘗試進行 Build。若是沒有提示錯誤信息的話,接下來就能夠愉快地使用 HotspotHelper 了;若是有問題的話,請檢查以前的步驟是否都已正確完成或者根據錯誤信息修改具體項目。
首先,在須要使用 HotspotHelper 的地方添加頭文件引用,這裏以 Objective-C 代碼爲例:
#import <NetworkExtension/NetworkExtension.h>
複製代碼
而後使用以下代碼便可將 WiFi 列表信息打印到 XCode 控制檯,注意:這裏須要打開系統 設置
中的 無線局域網
頁面才能獲取相關信息,由於打開該頁面系統刷新 WiFi 信息時纔會觸發該回調:
- (void)scanWifiInfos{
NSLog(@"1.Start");
NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
[options setObject:@"EFNEHotspotHelperDemo" forKey: kNEHotspotHelperOptionDisplayName];
dispatch_queue_t queue = dispatch_queue_create("EFNEHotspotHelperDemo", NULL);
NSLog(@"2.Try");
BOOL returnType = [NEHotspotHelper registerWithOptions: options queue: queue handler: ^(NEHotspotHelperCommand * cmd) {
NSLog(@"4.Finish");
NEHotspotNetwork* network;
if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) {
// 遍歷 WiFi 列表,打印基本信息
for (network in cmd.networkList) {
NSString* wifiInfoString = [[NSString alloc] initWithFormat: @"---------------------------\nSSID: %@\nMac地址: %@\n信號強度: %f\nCommandType:%ld\n---------------------------\n\n", network.SSID, network.BSSID, network.signalStrength, (long)cmd.commandType];
NSLog(@"%@", wifiInfoString);
// 檢測到指定 WiFi 可設定密碼直接鏈接
if ([network.SSID isEqualToString: @"測試 WiFi"]) {
[network setConfidence: kNEHotspotHelperConfidenceHigh];
[network setPassword: @"123456789"];
NEHotspotHelperResponse *response = [cmd createResponse: kNEHotspotHelperResultSuccess];
NSLog(@"Response CMD: %@", response);
[response setNetworkList: @[network]];
[response setNetwork: network];
[response deliver];
}
}
}
}];
// 註冊成功 returnType 會返回一個 Yes 值,不然 No
NSLog(@"3.Result: %@", returnType == YES ? @"Yes" : @"No");
}
複製代碼
唔,Demo 運行效果以下,點擊 Open WiFi Setting
按鈕可直接打開 無線局域網
頁面:
具體可嘗試下載 Demo 並完成相應配置後體驗:github.com/EyreFree/EF…
參考如下資料完成本 Demo,在此表示感謝:
iOS 9.0 搜索附近Wi-Fi熱點
IOS NetworkExtension 框架使用筆記
iOS NEHotspotHelper使用
iOS-NetworkExtension-NEHotspotHelper
API Reference - NetworkExtension
本文連接:lpd-ios.github.io/2017/03/09/…
若有任何知識產權、版權問題或理論錯誤,還請指正。
轉載請註明原做者及以上信息。