天天看點

iOS 記錄之 擷取網絡類型 (2G、3G、4G、WIFI)

闡述

One Team,One Style。 新産品團隊着實讓我們費了老大勁,有些東西看似簡單,但真正實作下來還是需要下一番功夫。此版本搞了一個閱讀狀态器,裡面包含電池資訊、網絡類型等裝置相關資訊。網絡類型蜂窩相關的如果不細拆分 (2G、3G、4G) 則感覺并不那麼費勁,畢竟官方已經給出了相關Demo。不過,在産品團隊要求下還是做精做細,故記錄一下整個功能探坑曆程。

記錄

0 調研

Sche 1 

官方提供的 Reachability(官方) 構件可以供我們使用。 但其隻是草草的傳回了蜂窩類型WWAN,至于内部具體的細分… 自己動手改造吧。

Sche 2

通過裝置狀态欄來擷取相關裝置資訊,簡單友善。不過… 心裡有點不踏實。

1 實作

Sche 1 Reachability (改造版)

官方提供的 Reachability 構件,使用 SystemConfiguration.framework 庫來擷取目前裝置的 SCNetworkReachabilityFlags 辨別符,并對辨別符進行比對,進而得到目前裝置的大緻網絡類型。(NotReachable、ReachableViaWiFi、ReachableViaWWAN)

在此基礎上,我引入 CoreTelephony.framework 庫來細分 ReachableViaWWAN 下的網絡類型。

CoreTelephony 庫下的 CTTelephonyNetworkInfo 類存儲了目前裝置蜂窩網絡的詳細資訊。

主要改寫代碼片段:

iOS 記錄之 擷取網絡類型 (2G、3G、4G、WIFI)

Sche 2 狀态欄 (僅适用導航欄未隐藏界面,已适配iPhoneX異形屏系列)

通過狀态欄擷取裝置相應資訊,不過由于普通屏和iPhoneX異形屏狀态欄層級不一緻,故所承載網絡資訊View也不一緻,分開處理。

核心代碼:

iOS 記錄之 擷取網絡類型 (2G、3G、4G、WIFI)

2 決定

選擇 Sche 1。一方面,由于現有産品在使用網絡類型的界面是不包含狀态欄;另外一方面,采用第二種方式需要主動監聽網絡的切換,感覺工時有點長。

擷取營運商名稱

iOS 記錄之 擷取網絡類型 (2G、3G、4G、WIFI)

資料

1.  https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324

2.  https://www.jianshu.com/p/1b0901d0902b

3.  https://www.jianshu.com/p/5c2247aa873a

4.  https://www.jianshu.com/p/58021435ab67

5.  https://www.cnblogs.com/xiaohuzi1990/p/4341655.html

6.  https://blog.csdn.net/txz_gray/article/details/53216477

7.  https://www.jianshu.com/p/7b98fb9dad45

8.  https://www.jianshu.com/p/015635865480

9.  http://ios.tedu.cn/data/288396.html