iOS 網路監測

語言: CN / TW / HK

通常移動端的網路情況有WWAN,WiFi及無網,可以用reachability來進行監測(通過apple的 SCNetworkReachability實現的,這裡需要注意的是當處於WiFi或者蜂窩狀態下,其只驗證當前是否處於此種狀態下,不驗證網路是否通暢,打個比方:當前僅處於WiFi環境下無蜂窩,但是WiFi不能訪問遠端網路,此時的狀態依舊是ReachableViaWiFi)。
而iPhone應用在第一次啟動及在設定裡修改無線資料都會彈出網路授權彈框,網路授權狀態可以通過CTCellularData檢視。

reachability分為三種狀態:

1.NotReachable
2.ReachableViaWiFi
3.ReachableViaWWAN。

網路授權也有三種狀態:

1.kCTCellularDataRestrictedStateUnknown(還未授權,就是還沒選擇任何一種選項) 2.kCTCellularDataRestricted(拒絕,這種情況可能是選擇了允許無線網路,也可能是選擇了不允許網路連線)
3.kCTCellularDataNotRestricted(不拒絕,這種情況選擇了允許無線網路和蜂窩網路)

雖然網路授權第2種狀態不好判斷,但是還是能結合reachability來解決這個問題。

網路監聽結果及對應狀態:

1.網路授權選擇不允許網路連線(此時不管你是連著WiFi或蜂窩網路,還是兩個都連著)-> NotReachable,手機沒有無線網路且沒有蜂窩網路(飛航模式,此時不管你授權哪個選項)-> NotReachable,蜂窩網路下選擇允許無線網路 -> NotReachable。

2.手機處於WiFi網路下選擇允許無線網路 -> ReachableViaWiFi,處於WiFi網路下選擇允許無線網路和蜂窩網路 -> ReachableViaWiFi,處於WiFi和蜂窩網路下選擇允許無線網路或者選擇允許無線網路和蜂窩網路 -> ReachableViaWiFi。

3.手機處於蜂窩網路下選擇允許無線網路和蜂窩網路 -> ReachableViaWWAN。

根據以上的狀態,我們可以通過reachability監聽當前網路狀態給予使用者相應的提示:

1.ReachableViaWWAN情況下使用者肯定選擇的是授權允許無線網路和蜂窩網路,此時使用者網路肯定處於蜂窩網路下,如果網路不通,肯定是手機訊號不好或者手機欠費等導致的網路問題。

2.ReachableViaWiFi情況下使用者可能是授權允許無線網路或者允許無線網路和蜂窩網路,此時使用者的一肯定處於連線WiFi的情況下,至於有沒有蜂窩網路不討論,此時若網路不通:
1. WiFi訊號不好,距離太遠導致的超時等問題。
2. 連線的WiFi無法訪問遠端網路,建議檢視手機的無線網路列表中的對應網路是不是有黃色字型提示無法訪問遠端網路,或者檢視提供此WiFi網路的工具,可能是路由器,也可能是電腦熱點等。

3.NotReachable情況下:
1. 使用者手機既沒有連線WiFi也沒有SIM卡,飛航模式,或者連線WiFi和有SIM卡但是它們都無法訪問遠端網路,或者連著WiFi(無法訪問遠端網路)無SIM卡,或者沒有連線WiFi但有SIM卡(無法訪問遠端網路),還有開發者模式也是有可能的。
2. 網路授權選擇了關閉,就是選擇不允許。
3. 發現自己的WWAN是可用的,唯獨目標app不能上網,這很有可能是勾選了只允許無線網路。

情況1和2我們無須提示使用者,只需在網路請求失敗後showhud即可,但是情況3使用者可能是關閉授權了,有些使用者發現自己WiFi連著手機又能上網,結果發現app怎麼請求都是提示一直在請求中,沒有資料返回,他們可能以為是伺服器故障等問題,其實是因為沒有開啟授權,這個時候最好還是提示下以免不必要的麻煩,可以彈出一個alert告訴使用者哪些問題會導致這樣的情況。