Edited at

iPhoneアプリのネットワークステータスを取得する

More than 3 years have passed since last update.

ネットワークに接続する iPhone アプリを圏外で起動した場合にも

アラート表示をする等の動作をしないと、ユーザビリティが悪く Apple の審査に落ちてしまう。

そのため、アプリケーションからネットワークステータスを取得して

挙動を変える必要がある。


準備

ここから ARC に対応した Reachability を導入する。

CocoaPods を導入している場合は、Podfile に下記を追記する。

pod 'Reachability'

SystemConfiguration.framework を追加する。


実装

#import "Reachability.h"


@interface xxxViewController ()
@property (nonatomic) Reachability *reachability;
@end

- (void)viewDidAppear:(BOOL)animated {
// ネットワーク状態が変更された際に通知を受け取る
_reachability = [Reachability reachabilityForInternetConnection];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifiedNetworkStatus:) name:kReachabilityChangedNotification object:nil];
[_reachability startNotifier];

NetworkStatus networkStatus = [_reachability currentReachabilityStatus];
/*
ここで networkStatus には
NotReachable : 接続されていない
ReachableViaWWAN : 3G接続
ReachableViaWiFi : Wi-Fi接続
が入る
*/

if (networkStatus == NotReachable) {
// ここに UIAlertView など、圏外の場合の処理
} else {
[self xxx]; // ここに正常系の処理を関数で書く
}
}

- (void)notifiedNetworkStatus:(NSNotification *)notification
{
NetworkStatus networkStatus = [_reachability currentReachabilityStatus];
// ネットワーク接続の通知を受け取った場合に、正常系の処理を行う
if (networkStatus != NotReachable) {
[self xxx];
}
}