SFNote-iOS開發WiFi項目

關鍵詞: wifi, AP, STA, SSID, BSSID, Hotspot

概述

一個偶然的機會接觸到一個WiFi應用,主要是對接一個wifi攝像頭。攝像頭設備開機建立一個無線網絡(至關於熱點),手機/iPad 打開App鏈接到設備的wifi,經過App界面上的操做來控制攝像頭的拍照、錄製,同時也有些文件的下載等功能。
bash

1、WiFi的STA和AP模式是什麼?

1):AP
也就是無線接入點,是一個無線網絡的建立者,是網絡的中心節點。通常家庭或辦公室使用的無線路由器就一個AP。網絡

2):STA站點
每個鏈接到無線網絡中的終端(如筆記本電腦、PDA及其它能夠聯網的用戶設備)均可稱爲一個站點。app

站點(STA,Station)在無線局域網(WLAN,WirelessLocalAreaNetworks)中通常爲客戶端,能夠是裝有無線網卡的計算機,也能夠是有WiFi模塊的智能手機,能夠是移動的,也能夠是固定的。在無線環境中STA接入的過程包括:認證STA有沒有權限和接入點(AP,AccessPoint)創建鏈路;STA能不能接入WLAN;以及STA接入WLAN網絡以後,認證STA能不能訪問網絡的權限。
在STA和AP創建鏈路的過程當中,當STA經過信標(Beacon)幀或探測響應(Proberesponse)幀掃描到可接入的服務集標識符(SSID,ServiceSetIdentifier)後,會根據已接收到的Beacon幀或Proberesponse幀的信號強度指示(RSSI,ReceivedSignalStrengthIndication)來選擇合適的SSID進行接入。less

AP(Access Point):
無線接入點,這個概念特別廣,在這裏,用大白話說,你能夠把CC3200當作一個無線路由器,這個路由器的特色不能插入網線,沒有接入Internet,只能等待其餘設備的連接,而且智能接入一個設備。相似於點對點模式啦。 STA(Station):任何一個接入無線AP的設備均可以稱爲一個站點。大白話說也就是平時接入路由器的設備post

SSID(Service Set Identifier):
SSID,每一個無線AP都應該有一個標示用於用戶識別,SSID就是這個用於用戶識別的的名字,也就是咱們常常說到的wifi名。ui

BSSID:
每個網絡設備都有其用於識別的物理地址,這個東西呢就叫MAC地址,這個東西通常狀況下出廠會有一個默認值,可更改,也有其固定的命名格式,也是設備識別的標識符。這個BSSID呢是針對設備說的,對於STA的設備來講,拿到AP接入點的MAC地址就是這個BSSID。spa

ESSID:
是一個比較抽象的概念,它實際上就和ssid相同(本質也是一串字符),只是能若是有好幾個無線路由器都叫這個名字,那麼咱們就至關於把這個ssid擴大了,因此這幾個無線路由器共同的這個名字就叫ESSID。(也就是若是在一臺路由器上釋放的wifi信號叫某個名字如「China_CMCC」,這個名字「China_CMCC」就稱爲SSID;若是在好幾個路由器上都釋放了這個wifi信號,那麼你們都叫「China_CMCC」,這個時候你們都遵循的這個名字就是ESSID.net

舉個例子,一家公司面積比較大,安裝了若干臺無線接入點(AP或者無線路由器),公司員工只須要知道一個SSID就能夠在公司範圍內任意地方接入無線網絡。BSSID其實就是每一個無線接入點的MAC地址。當員工在公司內部移動的時候,SSID是不變的。但BSSID隨着你切換到不一樣的無線接入點,是在不停變化的。3d

用戲稱來講,bssid就是具體的某個連鎖店編號(001)或地址,ssid就是連鎖店的名字或者照片,essid就是連鎖店的總公司或者招牌or品牌。通常ssid和essid都是相同的。code

RSSI:
這個理解起來更簡單,就是經過STA掃描到AP站點的信號強度。

2、iOS自動鏈接WiFi

經過Wi-Fi來控制設備,iOS11前只能跳轉到系統設置界面手動鏈接Wi-Fi,iOS11以後蘋果提供 NEHotspotConfiguration ,NEHotspotConfigurationManager 類直連周邊Wi-Fi。

1)權限配置

簡單的三步,便開啓了Hotspot權限。
而且,在Build Phase -> link Binary With Libraries 中,也已經自動添加了NetworkExtension.framework。

2)加入WiFi

#import <NetworkExtension/NetworkExtension.h>

// 獲取加入過的wifi列表
- (void)getJoinedWifiList{
    if (@available(iOS 11.0, *)) {
        [[NEHotspotConfigurationManager sharedManager] getConfiguredSSIDsWithCompletionHandler:^(NSArray<NSString *> * array) {
            if (array && array.count > 0) {
                UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"鏈接設備" message:@"請選擇要鏈接的設備" preferredStyle:(UIAlertControllerStyleActionSheet)];
                for (NSString * str in array) {
                    UIAlertAction *action = [UIAlertAction actionWithTitle:str style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
                        [self joinWifiWithSSID:str pwd:@"123456"];
                    }];
                    [alertC addAction:action];
                }
                UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {
                    
                }];
                [alertC addAction:cancel];
                [self presentViewController:alertC animated:YES completion:nil];
            }
        }];
    } else {
      // Fallback on earlier versions
    }
}
// 加入WiFi
- (void)joinWifiWithSSID:(NSString *)ssid pwd:(NSString *)pwd {
    if (@available(iOS 11.0, *)) {
        NEHotspotConfiguration *hotspotConfig = [[NEHotspotConfiguration alloc] initWithSSID:ssid passphrase:pwd isWEP:NO];
        hotspotConfig.joinOnce = YES; // 默認是NO,會保留配置過的wifi,YES便是不保存
        // 開始鏈接 (調用此方法後系統會自動彈窗確認)
        [[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {
            NSLog(@"%@",error);
            if (error && error.code != 13 && error.code != 7) {
                NSLog(@"鏈接失敗");
            }else if(error.code ==7){//error code = 7 :用戶點擊了彈框取消按鈕
                NSLog(@"用戶點擊了彈框取消按鈕");
            }else{// error code = 13 :已鏈接
                NSLog(@"已鏈接");
            }
        }];
    } else {
        // Fallback on earlier versions
    }
}
複製代碼
相關參考
  1. WiFi的STA和AP模式指什麼?
  2. iOS App無需跳轉系統設置自動鏈接Wi-Fi
相關文章
相關標籤/搜索