iOS之Wifi開發探究

很久沒有寫博客了,最近在作iOSWIFi開發的部分,這裏咱們主要用到的API以及FrameWork有如下:ios

  • NetworkExtension.framework
  • NEHotspotHelper

一 申請

準備條件:git

  • 1 付費的開發者帳號
  • 2 公司的WebSite
  • 3 明確你的Wifi開發需求

申請步驟: 申請網址 developer.apple.com//contact/ne… 填寫申請的相關資料 github

image.png
根據你項目中的具體狀況,在相對應的地方打鉤

image.png

  • 上述表填寫完畢以後,發送以後,沒多久會受到一封郵件,郵件的大體內容爲

image.png

大體意思就是從16年11月10日開始 能夠在開發者帳戶的account頁面建立APPID的時候添加網絡擴展數組

image.png

  • Note:NetWork Extensions能作的有限,能夠獲取WiFi名字和mac地址,可是註冊改變Wifi設置頁面子title 設置密碼 並能夠進行鏈接 這仍需咱們申請並獲取HotsPotHelperApi的使用權限 過兩週或者更久能夠收到Apple回覆的是否經過的Email,若是失敗了不要氣餒,據不少小夥伴反應,比追姑娘都要麻煩😂

二 使用

在這裏我就很少加贅述,WIFi開發的相關資料雖然不多,可是申請成功後,如何在項目中配置,這部分的文章網上有不少,具體配置給大家推薦兩篇文章好吧安全

一些相關屬性
  • SSID:Wifi 名稱
  • BSSID:站點的 MAC 地址
  • signalStrength: Wifi信號強度,該值在0.0-1.0之間
  • secure:網絡是否安全 (不須要密碼的 Wifi,該值爲 false)
  • autoJoined: 設備是否自動鏈接該 Wifi,目前測試自動鏈接之前連過的 Wifi 的也爲 false
  • justJoined:網絡是否剛剛加入
  • chosenHelper:HotspotHelper是否爲網絡的所選助手

部分使用代碼bash

Register a Hotspot Helper

+ (BOOL)registerWithOptions:(NSDictionary*)options queue:(dispatch_queue_t)queue handler:(NEHotspotHelperHandler)handler

@param options 

 kNEHotspotHelperOptionDisplayName :WIFI的註釋tag字符串// 此處設置的內容會在WiFi列表中每一個WiFi下邊展現出來 

@param queue dispatch_queue_t 用來調用handle的block 

@param handler NEHotspotHelperHandler block 用於執行處理 helper commands.

 @return 註冊成功YES, 不然NO. 

@discussion 一旦這個API調用成功,應用程序有資格在後臺啓動,並參與各類熱點相關的功能。 當應用程序啓動此方法應該調用一次。再次調用它不會產生影響,並返回NO。

這個方法是主要的.
複製代碼
+ (BOOL)logoff:(NEHotspotNetwork *)network

@param network 對應當前關聯的WiFi網絡NEHotspotNetwork

 @return 註銷命令已成功進入隊列YES, 不然NO. 

@discussion 調用此方法使kNEHotspotHelperCommandTypeLogoff型的NEHotspotHelperCommand嚮應用程序發出的「handler」模塊 網絡參數必須符合當前關聯的WiFi網絡,即它必須來自對NEHotspotHelperCommand網絡屬性或方法supportedInterfaces

+ (NSArray *)supportedNetworkInterfaces

@return 若是沒有網絡接口被管理,返回nil。不然,返回NEHotspotNetwork對象數組。 

@discussion 每一個網絡接口由NEHotspotNetwork對象表示。當前返回的數組包含一個NEHotspotNetwork對象表明Wi-Fi接口。

 這種方法的主要目的是當沒有獲得一個命令來處理它時,讓一個熱點助手偶爾提供在UI裏其準確的狀態。 此方法加上NEHotspotNetwork的isChosenHelper方法容許應用程序知道它是不是當前處理的網絡。
複製代碼
  • 獲取wifi列表,並給系統設置頁面Wifi設置子標題 能夠得到wifi名稱,信號強度,mac地址等等
+(void)getWifiList{

    NSMutableDictionary* options = [[NSMutableDictionary alloc] init];
    [options setObject:@"🔑Wifi子標題🔑" forKey:kNEHotspotHelperOptionDisplayName];

    dispatch_queue_t queue = dispatch_queue_create("com.pronetwayXY", NULL);
    BOOL returnType = [NEHotspotHelper registerWithOptions:options queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
        NEHotspotNetwork* network;
        NSLog(@"COMMAND TYPE: %ld", (long)cmd.commandType);
        [cmd createResponse:kNEHotspotHelperResultAuthenticationRequired];
        if (cmd.commandType == kNEHotspotHelperCommandTypeEvaluate || cmd.commandType ==kNEHotspotHelperCommandTypeFilterScanList) {
            NSLog(@"WIFILIST: %@", cmd.networkList);
            for (network  in cmd.networkList) {
                // NSLog(@"COMMAND TYPE After: %ld", (long)cmd.commandType);
                if ([network.SSID isEqualToString:@"ssid"]|| [network.SSID isEqualToString:@"proict_test"]) {

                    double signalStrength = network.signalStrength;
                    NSLog(@"Signal Strength: %f", signalStrength);
                    [network setConfidence:kNEHotspotHelperConfidenceHigh];
                    [network setPassword:@"password"];

                    NEHotspotHelperResponse *response = [cmd createResponse:kNEHotspotHelperResultSuccess];
                    NSLog(@"Response CMD %@", response);

                    [response setNetworkList:@[network]];
                    [response setNetwork:network];
                    [response deliver];
                }
            }
        }
    }];
    NSLog(@"result :%d", returnType);
    NSArray *array = [NEHotspotHelper supportedNetworkInterfaces];
    NSLog(@"wifiArray:%@", array);
    NEHotspotNetwork *connectedNetwork = [array lastObject];
    NSLog(@"supported Network Interface: %@", connectedNetwork);

}
複製代碼

三 思考

  • 1 必須進入到系統WIFI設置頁面才能夠獲取到WIFI列表(包括強度 WIFI名稱)參考WIFI萬能助手 可能都是經過LBS一些方法告訴你附近可能存在的WIFI,而後經過點擊推薦的WIFI 進入下一步

image.png

  • 2 點擊上方任意一個可能存在的WIFI,由於Apple政策緣由 沒法再APP內直接鏈接WIFI!!! 因此萬能鑰匙的策略是 以下圖,提供你個鏈接教程,將能夠鏈接的WIFI名稱進行更改,在下方加上提示文字 好比 🔑萬能WIFI - 點擊一鍵上網🔑 
    image.png

經過這樣的方式進行鏈接網絡

image.png
這裏萬能鑰匙的作法是幫助用戶跳到wifi系統設置頁面,市面上還有不少須要用戶本身手動進入WIFI設置頁面的App,好比360免費wifi,這樣雖然犧牲了一部分用戶體驗,可是在審覈方面能夠經過率大大增長,仍是比較值得倡導的

  • 3 不能主動經過代碼的方式斷開WIFI 好比 有一個按鈕叫作斷開WIFI 這樣是不容許的 只能經過用戶手動關閉WIFI或者WIFI自己沒法鏈接網絡只能經過判斷當前網絡狀態的方式進行鏈接

四 總結

iOS wifi開發相關資料較少,Apple對這方面的審覈也較爲嚴格 但願這篇文章能夠幫助到正在作wifi開發相關的小夥伴們,加油!app

相關文章
相關標籤/搜索