iOSでネットワーク接続の状況を確認する

iOSでネットワークの接続状態が3GなのかWifiなのかを判別するにはどうすればいいのか調べていたら、
便利なライブラリがあったので、試してみた結果をメモ。

GitHub - dev5tec/FBNetworkReachability: Network reachability detection library for iOS


ざっと試してみた結果

  • 3GもWifiも、エリア外にいくときちんとNotificationにより通知される。同様にエリア内に戻ると、Notificationにより通知される。
  • 3GとWifi両方使える場合、Wifiが優先
  • デザリングによる接続もWifiとして認識される
  • Wifiで接続しているアクセスポイントからインターネットにアクセスできるかどうかはわからない
  • Notificationの設定をしない場合、接続状況の確認をする毎にrefreshメソッドの実行が必要

下の2点は、意識をしておいたほうがいいと思います。

Wifiで接続しているアクセスポイントからインターネットにアクセスできるかどうかはわからない
アクセスポイントに接続ができていれば、インターネットに接続できるかは問わずWifi接続扱いになるようです。
インターネットに接続できるかどうかのチェックは別に実装する必要があると思います。

・Notificationの設定をしない場合、接続状況の確認をする毎にrefreshメソッドの実行が必要
接続モードが変わった時に処理を行う必要がない場合、NSNotificationCenterのaddObserverの記述をしなくてもいいかもしれません。
ただこの場合、接続状況を確認しようとする度に、refreshメソッドを実行する必要があります。

[[FBNetworkReachability sharedInstance] refresh];
switch([FBNetworkReachability sharedInstance].connectionMode)
{
 ...

refreshしないと、最新の状態がチェックされません。

Notificationの設定は入れておいて、セレクタのメソッド内でなにも記述しないようにしておくのがいいのかもしれません。


大容量データの通信やTwitterのUserStreamなどはWifi接続の時のみ行いたいというケースがあり、
こういう場合に非常に簡単に使えて便利なライブラリだと思います。