dev5tec/FBNetworkReachability - GitHub
特徴
現在の接続状況(WiFi, 3Gなど)を取得することができる。
以下、使い方の例
FBNetworkReachability* network = [FBNetworkReachability networkReachabilityWithHostname:@"http://xcatsan.com/"]; FBNetworkReachabilityConnectionMode mode = network.connectionMode; switch (mode) { case FBNetworkReachableNon: // 未接続 break; case FBNetworkReachableWiFi: // WiFi接続 break; case FBNetworkReachableWWAN: // 3G接続 break; }
if(network.reachable) { // 接続時処理 } NSLog(@"ip: %@", network.ipaddress); // IPアドレス
接続状況が変化した時には FBNetworkReachabilityDidChangeNotification をポストするので、この変化をトリガーにして非同期的な処理を書くこともできる。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeNetworkReachability:) name:FBNetworkReachabilityDidChangeNotification object:nil]; - (void)didChangeNetworkReachability:(NSNotification*)notification { FBNetworkReachabiity* network = [notification object]; : }
その他の特徴は以下のとおり。
- バックグラウンド動作は行わない。
- バックグラウンドからフォアグラウンドに変わる間に変化があった場合は最新のイベントがポストされる。
- 内部的にはURL毎にインスタンスが共有される(例えば URLを "http://xcatsan.com" として3回インスタンスを取得した場合、いずれも同じインスタンスが返る)。
- 到達不可能なURLは使えない。URLは名前解決できてIP的に到達可能である必要がある。
- スレッドセーフ
インストール
ソースコードの追加およびフレームワークの追加が必要。
ソースコード追加
GitHubからプロジェクトをダウンロードした後 Xcode 4 で開き、その中から下記のファイルを自分のプロジェクトへコピーして追加する。FBNetworkReachability.h FBNetworkReachability.m
フレームワーク追加
SystemConfiguration.framework を追加する。ソース解説
解説は過去のブログが詳しいのでそちらを参照のこと。
Cocoaの日々: ネットワーク接続状況を知る
Cocoaの日々: ネットワーク接続状況を知る[2] SCNetworkReachabilityGetFlags はブロックする
- (FBNetworkReachabilityConnectionMode)connectionMode { FBNetworkReachabilityConnectionMode mode; @synchronized (self) { mode = connectionMode_; } if (mode == FBNetworkReachableUninitialization) { [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; } return connectionMode_; }
(2011-11-14追記)
Cocoaの日々: [iOS] SCNetworkReachabilityGetFlags のブロックの件
上記で記事で解説したように遅延は解消されたので最新版では「0.5秒待つ」処理は入っていない。
動作確認用アプリケーション
GitHub のプロジェクトには動作確認用のアプリケーションが付属している。
接続方式に変化があるとテーブルが更新される。
カスタマイズ
特になし。強いて言えばソース解説で説明した初回の待ち時間(0.5秒)。これはソースコードを直接書き換える。
ライセンス
MIT ライセンスで、商用・非商用を問わず利用可能。カスタマイズして再配布も自由。連絡も不要。
関連情報
なし
匿名
2012年1月24日 22:58
はじめまして、ありがたく使わせていただいております。
githubのUsage(4) Using notificationの、
[FBNetworkReachability startNotifier];
は
[[FBNetworkReachability sharedInstance] startNotifier];
ではないでしょうか。
匿名
2012年1月24日 22:58
はじめまして、ありがたく使わせていただいております。
githubのUsage(4) Using notificationの、
[FBNetworkReachability startNotifier];
は
[[FBNetworkReachability sharedInstance] startNotifier];
ではないでしょうか。
xcatsan says:
2012年1月31日 23:10
こんばんは。
指摘の通りですね。
先ほど直しておきました。
ありがとうございました。
では。
xcatsan says:
2012年1月31日 23:10
こんばんは。
指摘の通りですね。
先ほど直しておきました。
ありがとうございました。
では。