it-swarm.com.de

Wie prüfe ich die Internetverbindung auf einem iOS-Gerät?

Ich frage mich, wie ich überprüfen kann, ob der Benutzer über WIFI oder Mobilfunkdaten 3G oder 4G eine Verbindung zum Internet herstellt.

Ich möchte auch nicht prüfen, ob eine Website erreichbar ist oder nicht. Die Sache, die ich prüfen möchte, ob Internet auf dem Gerät vorhanden ist oder nicht. Ich habe versucht, über das Internet nachzuschauen, wenn ich sehe, dass die Website mit der Rechability-Klasse erreichbar ist oder nicht.

Ich möchte prüfen, ob der Benutzer Internet hat oder nicht, wenn er meine Anwendung öffnet.

Ich verwende Xcode6 mit Objective-C.

12
SniperCoder

Verwenden Sie diesen Code und importieren Sie die Reachability.h-Datei

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

Erste Erreichbarkeitsklassen von diesem Link herunterladen:
Wiederholbarkeit von Github

Instanz der Erreichbarkeit in AppDelegate.h hinzufügen 

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

Importieren Sie die Erreichbarkeit in Ihrer AppDelegate und kopieren Sie diesen Code einfach in Ihre 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;
}  

Fügen Sie diese Methode Ihrer allgemeinen Klasse hinzu. 

/*================================================================================================
 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;
}  

Beachten Sie, dass APP_DELEGATE1 eine Instanz von AppDelegate ist 

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

Mit dieser Methode können Sie die Internetverbindung an jedem Ort der App überprüfen.

5
Mihir Oza

Ich hoffe, dies hilft Ihnen, sich nur im WLAN-Modus zu vernetzen:

Utils.h

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

 +(BOOL)isNetworkAvailable;

 @end

utils.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;
      }
    }

// Benutze dies jetzt in der erforderlichen Klasse

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

      NSlog(@"Network Connection available");
   }

 }
3
Sujania

es ist einfach, Sie können die folgende Methode verwenden, um die Internetverbindung zu überprüfen. 

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

    NetworkStatus networkStatus = [reachability currentReachabilityStatus];

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

Versuchen Sie dies, um die Internetverbindung zu überprüfen oder nicht 

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

'Erreichbarkeit' funktioniert nicht, da es nicht erkennt, ob der Host eine Antwort gibt oder nicht. Es wird nur geprüft, ob der Client ein Paket an den Host senden kann. Selbst wenn Sie mit einem WLAN-Netzwerk verbunden sind und das Internet des WiFi ausgefallen ist oder der Server ausgefallen ist, erhalten Sie ein "JA" für die Erreichbarkeit.

Eine bessere Methode ist, eine HTTP-Anforderung auszuprobieren und die Antwort zu überprüfen.

Beispiel unten:

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];

Der einzige Nachteil ist, dass "internetActive" mit einer Verzögerung bis zu dem im obigen Code genannten Timeout aktualisiert wird. Sie können im Callback Code eingeben, um auf den Status zu reagieren.

1
Abhijith C R

Aktualisierte Antwort für Swift 4.0 und AlamoFire:

Die Antwort, die ich am 18. September gepostet habe, ist falsch. Sie erkennt nur, ob sie mit dem Netzwerk verbunden ist, nicht mit dem Internet. Hier ist die richtige Lösung mit AlamoFire:

1) Erstellen Sie eine benutzerdefinierte Erreichbarkeitsbeobachtungsklasse:

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) Beim Start der App initialisieren

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

3) Verwenden Sie dies überall in Ihrer App, um festzustellen, ob Online geladen wurde, z. B. in View geladen wurde oder wann eine Aktion ausgeführt wird

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-Bibliothek verwenden :

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

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

Versuche dies

Überprüfen Sie diesen Link für die Erreichbarkeitsdatei

Erreichbarkeit

importiere diese Datei in deine .m und schreibe dann Code

// Hiermit prüfen Sie die Internetverbindung

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

Ich hoffe es hilft.

0
Pradumna Patil