NWPathMonitorを使ったインターネット接続の確認方法

richcoding Inc. > 全部  > 開発  > Swift関連  > NWPathMonitorを使ったインターネット接続の確認方法

NWPathMonitorを使ったインターネット接続の確認方法

xCode 10+ iOS 12+ Swift 5+

Apple の Network フレームワークには、ネットワークのアクセシビリティを監視するために特別に設計されたクラスを含む、ネットワークデータを扱うのに便利なクラスが多数用意されています。 NWPathMonitor。Apple の古いReachability システムを使用したことがある場合、 NWPathMonitor はそれを完全に置き換えます。

ネットワークチェック制御

開始するには、まず Networkフレームワークのインポートを追加します。

import Network

次に、すぐに解放されない場所に NWPathMonitorのインスタンスを作成します。例えば、ビューコントローラのプロパティとして作成します。

let monitor = NWPathMonitor()

次に、ネットワーク・アクセシビリティが変更されるたびにトリガーされるクロージャをモニタに割り当てます。これは、現在可能なネットワークアクセスを記述した NWPathを1つのパラメータとして受け取る必要があります。

NWPathにはいくつかのプロパティがありますが、特に気になりそうなのが2つあります: statusは現在接続が可能かどうかを記述し、 isExpensiveはセルラーデータを使用している場合や、iPhoneのセルラー接続を経由してホットスポットルーティングされたWiFiを使用している場合にtrueに設定されます。

これを試してみるために、ユーザの接続状態が変化したときにメッセージを表示したり、接続が高いと思われるかどうかを表示したりするコードをいくつか紹介します。

monitor.pathUpdateHandler = { path in
    if path.status == .satisfied {
        print("通信環境あります!")
    } else {
        print("通信出来ません!")
    }
 
    print(path.isExpensive)
}

このクロージャは、接続状態が変化するたびに呼び出されることを覚えておいてください。

パスモニタを作成して設定したら、最後のステップは、モニタを実行するためのカスタム DispatchQueueインスタンスを作成し、その start()メソッドを呼び出すことです。

let queue = DispatchQueue(label: "Monitor")
monitor.start(queue: queue)

これが完了すると、接続ステータスが変更されるたびにクロージャが呼び出されるようになるので、そこにコードを追加して、アプリの残りの部分を現在の接続ステータスで更新することができます。

ネットワークチェックをより細かく制御したい場合

ネットワークチェックをより細かく制御したい場合は、特定のインターフェースタイプを使用して NWPathMonitorを作成することができます。例えば、セルラーデータをチェックしてセルラーデータのみをチェックしたい場合は、次のように記述します。

let cellMonitor = NWPathMonitor(requiredInterfaceType: .cellular)

必要であれば、 .wifi wiredEthernetを使用することもできます。インターフェイスのタイプを省略すると、すべてを同時に監視することになりますが、これはほとんどの場合、あなたが望むものでしょう。

// Wi-Fiネットワーク上で通信を行う際に使用するネットワークインタフェースの種類です。
let monitor = NWPathMonitor(requiredInterfaceType: .wifi)
 
// セルラーネットワーク上での通信に使用されるネットワークインタフェースの種類。
let monitor = NWPathMonitor(requiredInterfaceType: .cellular)
 
// 有線イーサネットネットワーク上での通信に使用されるネットワークインターフェースの種類。
let monitor = NWPathMonitor(requiredInterfaceType: .wiredEthernet)
 
// ローカルループバックネットワーク上での通信に使用するネットワークインタフェースの種類です。
let monitor = NWPathMonitor(requiredInterfaceType: .loopback)
 
// 仮想ネットワークや未知の種類のネットワークを介して通信するために使用されるネットワークインタフェースの種類。
let monitor = NWPathMonitor(requiredInterfaceType: .other)
ロジャース リチャード

アメリカ出身の日本在住30年で、14歳から独学でプログラミングを始めました。当初は主にゲームソフトを開発しておりましたが、現在はお客様のニーズに合ったビジネスソフトをメインに開発しております。