日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架

發布時間:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS 9 發布之后,蘋果推出了 NetworkExtension,利用這個框架可以實現很多和網絡相關的操作。本文主要介紹怎樣使用其中的 NEHotspotHelper 進行設備 WiFi 列表的獲取。如果你只是想獲取當前設備正在連接的 WiFi 信息,有更加便捷的方法,可參考我的另一篇文章:iOS 獲取當前已連接 WiFi 信息。

Demo 地址:github.com/EyreFree/EF…

一. 注意事項

  • 首先,NEHotspotHelper 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持該功能;
  • 然后,你需要有一個開發者賬號;
  • 最后,該框架目前還沒有大規模開放使用,所以需要向蘋果發送申請并且審核通過才能夠獲得使用該框架的權限,大致內容就是描述一下你需要使用該框架的原因之類的,然后我是用的英文進行描述(感謝百度以及谷歌翻譯),不過據說中文也行。提交申請后大概一周內會收到反饋郵件,申請地址為: developer.apple.com/contact/net… 。
  • 我申請的時候就描述了一個 VPN 應用的大概功能就給過了,具體流程見 Network Extension 申請表格填寫及郵件往來 這篇博文;
  • 如果如果已知 SSID 及密碼的情況下,可以直接調用 NEHotspotConfigurationManager API 來進行 WiFi 連接,不需要向蘋果申請 NEHotspotHelper 權限,不過需要注意的是該方法僅在 iOS 11 及以上系統有效,可參考 iOS NEHotspotConfigurationManager 使用 一文。
  • 二. 創建 App ID

    打開蘋果開發者中心,登陸然后找到 App IDs 選項,點擊右上角按鈕創建一個 App ID 用于接下來創建 Provisioning Profile,地址為: developer.apple.com/account/ios… ,如圖所示:

    首先,填寫 Name 以及 Bundle ID,這里統一填寫為 EFNEHotspotHelperDemo,如圖所示:

    接下來這一步注意需要勾選 Wireless Accessory Configuration 這一選項,如圖所示:

    然后觀察到如圖所示狀態表明已成功打開:

    在 App IDs 列表中查看剛創建完成的 App ID:

    三. 創建 Provisioning Profile

    找到 Provisioning Profiles 選項,點擊右上角按鈕創建一個 Provisioning Profile 用于接下來創建示例工程,地址為: developer.apple.com/account/ios… ,如圖所示:

    首先選擇 Profile 類型,這里我選擇的是 iOS App Development,可以根據自己的具體需要自由選擇:

    接下來選擇我們在第二步創建好的 App ID,如圖所示:

    然后選擇證書和設備,全選即可:

    在額外權限這一步需要選中我們申請到的 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 值,否則 NoNSLog(@"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

    八. 附錄

    Network Extension 申請表格填寫及郵件往來


    如有任何知識產權、版權問題或理論錯誤,還請指正。
    https://juejin.im/post/5a3214cd51882506fd589047
    轉載請注明原作者及以上信息。

    總結

    以上是生活随笔為你收集整理的iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。