[XCODE] ネットワークが圏外になったり、圏外から圏内に変わった事をアプリ上で知る方法
こんにちは、iPhoneアプリを絶賛開発中の@yoheiMuneです。
今日は、外部サーバーを使うアプリとかで、ネットワークが圏外になったり、圏外から復活した際に、 通知を受けて、処理を停止/再開を行えるようにする仕組みを紹介したいと思います(⌒▽⌒)
Reachabilityの導入方法は、こちらを参照頂けると幸いです(*´∇`*)
- [XCODE] ネットワーク接続が3GかWifiか圏外かを調べる簡単な方法@YoheiM.NET
上記リンク先の記事では、ネットワーク状態を知りたい時に、 アプリ側から問い合わせをするPull型の実装を紹介しましたが、今回は、 Push型の実装で、アプリ側からわざわざ問い合わせなくてもネットワーク状態の変化を教えてくれる 方法となります。
具体的な実装内容は、以下となります。
(Reachabilityのインスタンス化と、Notificationの設定)
(通知を受け取るメソッドでの実装例)
- Reachability.hのコメント部分
- NSNotificationCenter Class Reference
あとNSNotificationCenterって便利なクラスですね。ほぼ始めて使いましたが、簡単に使えて良かったです☆
今回も最後までお読み頂きまして、ありがとうございました!
今日は、外部サーバーを使うアプリとかで、ネットワークが圏外になったり、圏外から復活した際に、 通知を受けて、処理を停止/再開を行えるようにする仕組みを紹介したいと思います(⌒▽⌒)
利用する技術は、Reachabilityというクラスです
アップルから提供されているReachabilityというクラスを用いる事で、 現在のネットワーク状態を知ったり、ネットワーク状態が変わった際に通知を受ける事が可能です。Reachabilityの導入方法は、こちらを参照頂けると幸いです(*´∇`*)
- [XCODE] ネットワーク接続が3GかWifiか圏外かを調べる簡単な方法@YoheiM.NET
ネットワーク状態が変化した際に通知を受ける方法
通知を受ける為に、NSNotificationCenterの機能を利用します。上記リンク先の記事では、ネットワーク状態を知りたい時に、 アプリ側から問い合わせをするPull型の実装を紹介しましたが、今回は、 Push型の実装で、アプリ側からわざわざ問い合わせなくてもネットワーク状態の変化を教えてくれる 方法となります。
具体的な実装内容は、以下となります。
(Reachabilityのインスタンス化と、Notificationの設定)
// 例えば、通知を受けるクラスの初期化時に、Reachabilityの設定を行います。 -(id)init { self = [superinit]; if (self) { // Reachabilityのインスタンスを作成し、フィールド変数に代入します。 // インスタンス作成時に、どのサーバーとの通信状態を監視するかを // 設定します。 reachability = [Reachability reachabilityWithHostName:@"www.google.com"]; // 続いて、NSNotificationCenterに、 // ネットワーク状態が変化した際に通知を受ける対象を指定します。 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifiedNetworkStatus:) name:kReachabilityChangedNotification object:nil]; // ネットワーク監視を開始します。 [reachability startNotifier]; } return self; }
(通知を受け取るメソッドでの実装例)
// 通知を受け取るメソッド -(void)notifiedNetworkStatus:(NSNotification *)notification { // reachability変数から、現在のネットワーク状態を取得します。 NetworkStatus networkStatus = [reachability currentReachabilityStatus]; // 受け取ったネットワーク状態に合わせて、処理を行います。 // 下記例の場合、wifiか3Gの状態になった場合には、startWorkを呼び出し、 // 圏外になったら、stopWorkを呼び出しています。 if (networkStatus == ReachableViaWiFi) { NSLog(@"wifi"); } elseif (networkStatus == ReachableViaWWAN) { NSLog(@"3G"); } else { NSLog(@"does not connect."); [self stopWork]; return; } [self startWork]; }
参考資料
今回の参考資料は、以下となります。より詳しい内容は、以下をご参照頂けると幸いです(・∀・)- Reachability.hのコメント部分
- NSNotificationCenter Class Reference
最後に
Reachabilityって便利なクラスですが、Cocoaフレームワークには入ってないのですね。不思議です。あとNSNotificationCenterって便利なクラスですね。ほぼ始めて使いましたが、簡単に使えて良かったです☆
今回も最後までお読み頂きまして、ありがとうございました!