サーチ…
備考
Reachability.h
とReachability.m
のソースコードは、Appleの開発者向けドキュメントサイトにあります。
警告
他のプラットフォームとは異なり、AppleはiOSデバイスのネットワークステータスを判断し、上にリンクされたこれらのコード例のみを提供するための標準APIセットをまだ提供していない。ソースファイルは時間とともに変化しますが、一旦アプリケーションプロジェクトにインポートされると、開発者によって更新されることはめったにありません。
このため、ほとんどのアプリ開発者は、到達可能性のために多くのGithub / Cocoapod管理ライブラリの1つを使用する傾向があります。
また、 Reachability / SCNetworkReachabilityを使用して障害を診断したり、接続が復帰するのを待ったりする前に、ユーザーは常に最初に接続を試みることを推奨します。
到達可能性リスナーの作成
AppleのReachabilityクラスは定期的にネットワークの状態をチェックし、オブザーバーに変更を警告します。
Reachability *internetReachability = [Reachability reachabilityForInternetConnection];
[internetReachability startNotifier];
ネットワーク変更にオブザーバーを追加する
Reachability
は、 NSNotification
メッセージを使用して、ネットワーク状態が変化したときにオブザーバに警告します。あなたのクラスはオブザーバーになる必要があります。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
あなたのクラスのどこかで、メソッドのシグネチャを実装する
- (void) reachabilityChanged:(NSNotification *)note {
//code which reacts to network changes
}
ネットワークが利用できなくなったときの警告
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
if (netStatus == NotReachable) {
NSLog(@"Network unavailable");
}
}
接続がWIFIまたはセルラーネットワークになると警告する
- (void)reachabilityChanged:(NSNotification *)note {
Reachability* reachability = [note object];
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"Network unavailable");
break;
case ReachableViaWWAN:
NSLog(@"Network is cellular");
break;
case ReachableViaWiFi:
NSLog(@"Network is WIFI");
break;
}
}
ネットワークに接続されているかどうかを確認する
迅速
import SystemConfiguration
/// Class helps to code reuse in handling internet network connections.
class NetworkHelper {
/**
Verify if the device is connected to internet network.
- returns: true if is connected to any internet network, false if is not
connected to any internet network.
*/
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
}
if NetworkHelper.isConnectedToNetwork() {
// Is connected to network
}
目標-C:
数行のコード内でネットワーク接続を次のように確認できます。
-(BOOL)isConntectedToNetwork
{
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if (networkStatus == NotReachable)
{
NSLog(@"There IS NO internet connection");
return false;
} else
{
NSLog(@"There IS internet connection");
return true;
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow