web-dev-qa-db-ja.com

iOSデバイスでインターネット接続を確認する方法は?

ユーザーがWIFIまたはセルラーデータ3Gまたは4Gを介してインターネットに接続しているかどうかをどのように確認できるのでしょうか。

また、ウェブサイトが到達可能かどうか、デバイス上にインターネットがあるかどうかを確認したいことを確認したくありません。私はインターネットを調べてみましたが、ウェブサイトが到達可能かどうかを確認するのはRechabilityクラスを使用しているかどうかだけです。

ユーザーがアプリケーションを開いたときにインターネットに接続しているかどうかを確認したい

Objective-CでXcode6を使用しています

13
SniperCoder

このコードを使用してインポートReachability.hファイル

if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]==NotReachable)
    {
         //connection unavailable
    }
    else
    {
         //connection available
    }
21
Jay Bhalani

このリンクから最初に到達可能性クラスをダウンロードします。
Githubからの交換可能性

AppDelegate.hに到達可能性のインスタンスを追加

@property (nonatomic) Reachability *hostReachability;
@property (nonatomic) Reachability *internetReachability;
@property (nonatomic) Reachability *wifiReachability;

AppDelegateに到達可能性をインポートし、Appdelegate.mにこのコードをコピーして貼り付けます。

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        //[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
        NSString *remoteHostName = @"www.google.com";
        self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
        [self.hostReachability startNotifier];

        self.internetReachability = [Reachability reachabilityForInternetConnection];
        [self.internetReachability startNotifier];

        self.wifiReachability = [Reachability reachabilityForLocalWiFi];
        [self.wifiReachability startNotifier];
    }
    return self;
}  

このメソッドを共通クラスに追加します。

/*================================================================================================
 Check Internet Rechability
 =================================================================================================*/
+(BOOL)checkIfInternetIsAvailable
{
    BOOL reachable = NO;
    NetworkStatus netStatus = [APP_DELEGATE1.internetReachability currentReachabilityStatus];
    if(netStatus == ReachableViaWWAN || netStatus == ReachableViaWiFi)
    {
        reachable = YES;
    }
    else
    {
        reachable = NO;
    }
    return reachable;
}  

APP_DELEGATE1はAppDelegateのインスタンスであることに注意してください

/* AppDelegate object */
#define APP_DELEGATE1 ((AppDelegate*)[[UIApplication sharedApplication] delegate])  

この方法を使用すると、アプリ内のどこからでもインターネット接続を確認できます。

5
Mihir Oza

これがWifiモードでのみネットワークに役立つことを願っています:

tils.h

 #import <Foundation/Foundation.h>
 @interface Utils : NSObject

 +(BOOL)isNetworkAvailable;

 @end

tils.m

 + (BOOL)isNetworkAvailable
{
      CFNetDiagnosticRef dReference;
      dReference = CFNetDiagnosticCreateWithURL (NULL, (__bridge CFURLRef)[NSURL URLWithString:@"www.Apple.com"]);

      CFNetDiagnosticStatus status;
      status = CFNetDiagnosticCopyNetworkStatusPassively (dReference, NULL);

      CFRelease (dReference);

      if ( status == kCFNetDiagnosticConnectionUp )
      {
          NSLog (@"Connection is Available");
          return YES;
      }
      else
      {
          NSLog (@"Connection is down");
          return NO;
      }
    }

//必要なクラスでこれを使用する

- (IBAction)MemberSubmitAction:(id)sender {
   if([Utils isNetworkAvailable] ==YES){

      NSlog(@"Network Connection available");
   }

 }
3
soumya

簡単です。次の方法でインターネット接続を確認できます。

-(BOOL)IsConnectionAvailable
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];

    NetworkStatus networkStatus = [reachability currentReachabilityStatus];

    return !(networkStatus == NotReachable);    
}
3
Dibin77

インターネットに接続しているかどうかを確認するには、これを試してください

NSURL *url = [NSURL URLWithString:@"http://www.appleiphonecell.com/"];
NSMutableURLRequest *headRequest = [NSMutableURLRequest requestWithURL:url];
headRequest.HTTPMethod = @"HEAD";

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration];
defaultConfigObject.timeoutIntervalForResource = 10.0;
defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;

NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:nil delegateQueue: [NSOperationQueue mainQueue]];

NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:headRequest
                                                   completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                  {
                                      if (!error && response)
                                      {
                                          block([(NSHTTPURLResponse *)response statusCode] == 200);
                                      }else{
                                          block(FALSE);
                                      }
                                  }];
[dataTask resume];
2

「Reachability」は、ホストからの応答があるかどうかを検出しないため機能しません。クライアントがホストにパケットを送信できるかどうかを確認するだけです。そのため、WiFiネットワークに接続していて、WiFiのインターネットがダウンしているか、サーバーがダウンしている場合でも、到達可能性について「YES」が返されます。

より良い方法は、HTTP要求を試行し、応答を確認することです。

以下の例:

NSURL *pageToLoadUrl = [[NSURL alloc] initWithString:@"https://www.google.com/"];
NSMutableURLRequest *pageRequest = [NSMutableURLRequest requestWithURL:pageToLoadUrl];
[pageRequest setTimeoutInterval:2.0];
AFHTTPRequestOperation *pageOperation = [[AFHTTPRequestOperation alloc] initWithRequest:pageRequest];
AFRememberingSecurityPolicy *policy = [AFRememberingSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[policy setDelegate:self];
currentPageOperation.securityPolicy = policy;
if (self.ignoreSSLCertificate) {
    NSLog(@"Warning - ignoring invalid certificates");
    currentPageOperation.securityPolicy.allowInvalidCertificates = YES;
}
[pageOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    internetActive = YES;
} failure:^(AFHTTPRequestOperation *operation, NSError *error){
    NSLog(@"Error:------>%@", [error description]);
    internetActive = NO;
}];
[pageOperation start];

唯一の問題は、上記のコードで述べたタイムアウトまでの遅延で「internetActive」が更新されることです。ステータスに基づいて動作するようにコールバック内でコーディングできます。

1
Abhijith C R

Swift 4.0&AlamoFire:

9月18日に投稿した答えは間違っています。インターネットではなくネットワークに接続されているかどうかを検出するだけです。 AlamoFireを使用した正しいソリューションは次のとおりです。

1)カスタムReachability Observerクラスを作成します。

import Alamofire

class ReachabilityObserver {

    fileprivate let reachabilityManager = NetworkReachabilityManager()
    fileprivate var reachabilityStatus: NetworkReachabilityManager.NetworkReachabilityStatus = .unknown

    var isOnline: Bool {
        if (reachabilityStatus == .unknown || reachabilityStatus == .notReachable){
            return false
        }else{
            return true
        }
    }

    static let sharedInstance = ReachabilityObserver()
    fileprivate init () {
        reachabilityManager?.listener = {
            [weak self] status in

            self?.reachabilityStatus = status
            NotificationCenter.default.post(
                name: NSNotification.Name(rawValue: ClickUpConstants.ReachabilityStateChanged),
                object: nil)
        }
        reachabilityManager?.startListening()
    }
}

2)アプリの起動時に初期化する

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
     _ = ReachabilityObserver.sharedInstance
     return true
}

3)アプリ内の任意の場所でこれを使用して、ビュー内などのオンラインがロードされたかどうか、またはアクションがいつ発生したかを検出します

if (ReachabilityObserver.sharedInstance.isOnline){
    //User is online
}else{
    //User is not online
}
1
Josh O'Connor
Reachability* reachability = [Reachability reachabilityWithHostName:@"www.google.com"];
NetworkStatus internetStatus = [reachability currentReachabilityStatus];

 if(remoteHostStatus == ReachableViaWWAN || remoteHostStatus == ReachableViaWiFi)

{


     //my web-dependent code
}
else {
    //there-is-no-connection warning
}
0
Anurag Sharma

Alamofireライブラリ を使用:

let reachabilityManager = NetworkReachabilityManager()
let isReachable = reachabilityManager.isReachable

if (isReachable) {
    //Has internet
}else{
    //No internet
}
0
Josh O'Connor

これを試して

到達可能性ファイルについては、このリンクを確認してください

到達可能性

このファイルを.mにインポートして、コードを記述します

//これはインターネット接続を確認するためです

  BOOL hasInternetConnection = [[Reachability reachabilityForInternetConnection] isReachable];
    if (hasInternetConnection) {
               // your code
    }

それが役に立てば幸い。

0
Pradumna Patil