最近公司項目增加了一個需求,就是做一個類似于釘釘?shù)拇蚩üδ?,通過判斷員工手機所連接的wifi是不是公司內(nèi)網(wǎng)從而判斷員工是否在辦公室內(nèi)打卡,并且同歸不同的權(quán)限,管理員是可以設(shè)置APP的WiFi ?mac地址的。剛開始拿到這個需求的時候就想,蘋果公司對于個人隱私這一塊要求這么嚴(yán)格,能拿到用戶手機所連接WiFi列表么。。。。。。通過各種實驗之后,果然 這是個坑啊。。。。。
剛開始寫demo的時候,在網(wǎng)上查了很多資料,說是ios拿到WiFi名字的方法自從ios9出來以后就被蘋果屏蔽,如果需要使用這個框架的方法需要向蘋果申請資料!但是但是 其實蘋果屏蔽的是屬于NetworkExtension框架中的關(guān)于VPN開發(fā)的方法 ?如果僅僅手機使用簡單的拿到WiFi的方法是可以不用申請的!
詳見代碼 ?以下代碼是完全可用的

這份代碼就是之前寫demo的時候看到網(wǎng)上幾乎所有人都說這個NetworkExtension 的方法被屏蔽了 需要申請權(quán)限才能用 不然上傳代碼會被拒,于是乎我開始了申請權(quán)限的漫長之路。。。。步驟詳情可見“http://www.itdecent.cn/p/ee038189f373”。。。。 ? ?然后大概過了兩三天后蘋果給回復(fù) 說我的申請被拒了 。。。。。被拒的原因就是我這個需求所用的方法并沒有被屏蔽 詳見下圖

被拒的時候急的我呀。。。。 我剛開始也以為會影響開發(fā)進(jìn)度之類的。。。。后來仔細(xì)研究以后發(fā)現(xiàn)網(wǎng)絡(luò)消息也不可全信啊。。。。 ?為什么 ?請看下圖

其實在第一張代碼圖片中我們可以看到如果要拿到WiFi 名字和WiFi 的 mac 地址我們只需要用到CNCopySupportedInterfaces ? ?CNCopyCurrentNetworkInfo 這兩個大類 而在上圖中(xcode8的class詳情)我們可以看到這兩個類沒有常見的被畫上紅色橫線 ?更沒有紅色字體提示該方法或該類目已經(jīng)被替換不可使用的 ? 而在xcode7中同樣如此 不信大家可以試試 ? ?那么為什么網(wǎng)上幾乎所有的帖子都說這個方法被屏蔽了呢 ?包括我之前在QQ群里問了很多人 都說需要向蘋果申請權(quán)限 不然會被拒 ?我在想 ?之所以說這話的人應(yīng)該是用了以下方法來獲得WiFi名字 見下圖

大家可以看到在上面這個方法里面是通過 NEHotspotHelper 這個類來拿到WiFi名字的 ,而這個類就是VPN開發(fā)的必要類,并且被禁止使用了?。?如下圖:

大家可以看到? 在這個類目的使用下面有兩個注意點? 1、plist文件必須包括一個UIBackgroundModes數(shù)組,里面含有“網(wǎng)絡(luò)身份驗證”信息? 2、應(yīng)用程序必須設(shè)置“com.apple.developer.networking.HotspotHelper”*作為其權(quán)利之一。而這兩點 就是提醒我們?nèi)绻褂眠@個類 必須向蘋果申請開發(fā)權(quán)限 ?否則不可使用該類 。 其實,如果我們只是做簡單的拿到手機所連接的WiFi名字和mac地址 是可以用另外的方法的,也就不需要想蘋果申請權(quán)限 ,而蘋果公司給我的被拒的郵件中也充分說明了這一點 ,我估計是因為網(wǎng)上很多人都以為只要是使用NetworExtension這個類的方法就一定要申請開發(fā)權(quán)限 ,其實不是的 ,蘋果只是禁止了部分權(quán)限而已,大家還是以官方文檔作為唯一參考吧!?。?/p>