AppleのサンプルソースコードReachabilityについて調べてみた

スポンサーリンク
おちゃめ

20150424_001

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

20150424_0101_4G

 3G

20150424_0102_3G

 Wi-Fi

20150424_0103_WiFi

 機内モード

20150424_0104_Flightmode

 圏外

20150424_0105_nonService

なんかあやしいですね!

SIM抜き

20150424_0106_nonSIM

SIMなしなのに通信できるの?
なぜ?

 

意外な結果になりビックりです!

圏外、SIMなしの値が通信できないはずなのに「ReachableViaWWAN」となってしまい私が予測していた動作と違いました。

しか〜し!

このままで終われません!

もう少し突っ込んで調べて見ます!

「NotReachable」になるパターンは以下の4パターンが考えられる。

1) 4G→圏外

2) WiFi(ON)→圏外→WiFi(OFF)

3) 4G→SIMなし

4) WiFi(ON)→SIMなし→WiFi(OFF)

上記の4パターについて調べてみた結果が以下

4G→圏外

20150424_0201_nonServicefrom4G

WiFi(ON)→圏外→WiFi(OFF)

20150424_0202_nonServiceFromWifi

4G→SIMなし

20150424_0203_nonSimForm4G

 

WiFi(ON)→SIMなし→WiFi(OFF)

20150424_0204_nonSimFromWifi

 

この結果から言える事は、WiFiが絡まないと通信不可「NotReachable」に移行しないようです。

完全にやられました(笑)

まとめ

ReachableViaWWANの値が取得できても通信が可能とは限らない。

NotReachableが取得できるのは以下の条件

1.機内モード

2.WiFi接続状態からSIMが抜かれWiFi接続が切れた時

3.WiFi接続状態からWWANが圏外になりWiFi接続が切れた時

 

この結果を踏まえて対策でも考えます。

コメント

タイトルとURLをコピーしました