讓Apple Reachability來協助你們在app中確認網路狀態吧!

最近開始學習到在app當中做一些下載資料的動作,但是今天不管你要下載的是資料,還是圖片等等,要確定的一個前提都是必須要有網路存取的狀態下,如果開啟app當下是沒有問題的,那我們可能https連線的時候,就會出現異常。

因此,貼心的app有提供了一個功能叫做ReachAbility的Module來協助我們確認裝置目前的網路狀態,雖然提供的是Objective-C的sample code,但是只要多做些動作,就可以匯入使用了。(我這邊是使用swift來做開發,所以如果是使用Objective-C的朋友們,這篇文章參考一下就好)

  1. 連結到下列網頁,然後點擊 Download sample code
https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html

2. 將下載回來的檔案解開,然後找到裡面的 Reachability.h 與 Reachability.m

3. 將這兩個專案直接拖拉到你要加入此功能的專案當中,並且建立Bridging Header

完成之後,你可以發現在專案當中除了原先我們匯入的reachability.h與reachability.m之外,還多了一個檔案叫做bridging-header.h,這個就是xcode自己幫我們在這兩個語言當中所搭建的橋樑,讓我們可以互相的呼叫做使用,而這個方法就叫做mix and match,是不是很方便呢

4. 打開bridging-header.h的檔案,在裡面加上這行,表示我要匯入Reachability.h來做使用。

#import “Reachability.h”

5. 加入完成之後,我們就可以在viewController.swift當中直接來做使用,可以參考下列程式碼。

//先呼叫Reachability,並且讓他嘗試連線到"www.apple.com"
var reachability = Reachability(hostName: "www.apple.com")

//實作一個方法來檢查網路連線,讓其回傳一個布林值
func checkInternetFunction() -> Bool {
  if reachability?.currentReachabilityStatus().rawValue == 0 {
    print("no internet connected.")
    return false
  }else {
    print("internet connected successfully.")
    return true
  }
}
//在下載資料的函式中,可以先呼叫確認網路的函式,如果回傳的值是true,就可以開始下載。
func downloadData() {
  if checkInternetFunction() == true {
    //write something to download
  }else {
    //error handling when no internet
  }
}

附上github連結以供參考

如果發現有錯誤,或是建議,都歡迎留言給我喔~