Apple 最新Reacahbility version 5.0についてはこちらで調べました。
Reachabilityになに?
Appleが提供する回線状態を調べられるサンプルソースコード
結構使用していましたが
実は取得した値、取得できるタイミングについて確実に理解して使用していなかった。
反省…..。
今回調べる機会があったので取得できる値について調べてみた。
ソースコード
Reachability Version 3.5, 2014-02-04
テスト機材
Xcode : ver.6.2
機種:iPhone6 iOS 8.2
SIM:au
使用したテストコード
// Buttonが押されたら呼ばれる - (IBAction)buttonGetStatus:(id)sender { // 現在の回線状態をラベルに表示する [self nowReachabilityStatus]; } // 現在の回線状態を取得してラベルに表示 - (void)nowReachabilityStatus { // Reachabilityから情報を取得 Reachability *reachablity = [Reachability reachabilityForInternetConnection]; NetworkStatus status = [reachablity currentReachabilityStatus]; // 取得した情報から文字列作成 NSString *stringStatus = @""; switch (status) { case NotReachable: stringStatus = @"NotReachable"; break; case ReachableViaWWAN: stringStatus = @"ReachableViaWWAN"; break; case ReachableViaWiFi: stringStatus = @"ReachableViaWiFi"; break; default: stringStatus = [NSString stringWithFormat:@"%zd",status]; break; } // ラベルに結果を表示する self.labelStatus.text = stringStatus; }
動作の説明
ボタンが押されたら現在の回線種別を調べ結果をラベル labelStatus に表示させるようになっています。
調査結果
4G
3G
Wi-Fi
機内モード
圏外
なんかあやしいですね!
SIM抜き
SIMなしなのに通信できるの?
なぜ?
意外な結果になりビックりです!
圏外、SIMなしの値が通信できないはずなのに「ReachableViaWWAN」となってしまい私が予測していた動作と違いました。
しか〜し!
このままで終われません!
もう少し突っ込んで調べて見ます!
「NotReachable」になるパターンは以下の4パターンが考えられる。
1) 4G→圏外
2) WiFi(ON)→圏外→WiFi(OFF)
3) 4G→SIMなし
4) WiFi(ON)→SIMなし→WiFi(OFF)
上記の4パターについて調べてみた結果が以下
4G→圏外
WiFi(ON)→圏外→WiFi(OFF)
4G→SIMなし
WiFi(ON)→SIMなし→WiFi(OFF)
この結果から言える事は、WiFiが絡まないと通信不可「NotReachable」に移行しないようです。
完全にやられました(笑)
まとめ
ReachableViaWWANの値が取得できても通信が可能とは限らない。
NotReachableが取得できるのは以下の条件
1.機内モード
2.WiFi接続状態からSIMが抜かれWiFi接続が切れた時
3.WiFi接続状態からWWANが圏外になりWiFi接続が切れた時
この結果を踏まえて対策でも考えます。
コメント