web-dev-qa-db-fra.com

Comment vérifier la connexion Internet sur un périphérique iOS?

Je me demande comment je peux vérifier si l'utilisateur est connecté à Internet via WIFI ou des données cellulaires 3G ou 4G.

En outre, je ne veux pas vérifier si un site Web est accessible ou non, ce que je veux vérifier s'il y a ou non Internet sur l'appareil. J'ai essayé de regarder sur Internet, mais tout ce que je vois, c'est qu'ils vérifient si le site Web est accessible ou n'utilise pas la classe Rechability.

Je veux vérifier si l'utilisateur a Internet ou non quand il ouvre mon application.

J'utilise Xcode6 avec Objective-C.

12
SniperCoder

Utilisez ce code et importez le fichier Reachability.h

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

Premier téléchargement des classes d'accessibilité à partir de ce lien:
Rechability from Github

Ajouter une instance d'accessibilité dans AppDelegate.h 

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

Importez Accessibilité dans votre AppDelegate et copiez et collez ce code dans votre 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;
}  

Ajoutez cette méthode dans votre classe commune. 

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

Notez que APP_DELEGATE1 est une instance de AppDelegate. 

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

Vous pouvez vérifier la connectivité Internet n'importe où dans l'application en utilisant cette méthode.

5
Mihir Oza

J'espère que cela vous aidera à réseauter en mode Wifi uniquement:

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

// Maintenant, utilisez ceci dans la classe requise

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

      NSlog(@"Network Connection available");
   }

 }
3
Sujania

c'est simple, vous pouvez utiliser la méthode suivante pour vérifier la connexion Internet. 

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

    NetworkStatus networkStatus = [reachability currentReachabilityStatus];

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

Essayez ceci pour vérifier si Internet est connecté ou non 

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

'Accessibilité' ne fonctionne pas car il ne détectera pas s'il y a une réponse de l'hôte ou non. Il va simplement vérifier si le client peut envoyer un paquet à l'hôte. Ainsi, même si vous êtes connecté à un réseau Wi-Fi et que l'accès à Internet Wi-Fi est en panne ou que le serveur est en panne, vous obtiendrez un "OUI" pour ce qui est de l'accessibilité.

Une meilleure méthode consiste à essayer une requête HTTP et à vérifier la réponse.

Exemple ci-dessous:

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

Le seul problème est que "InternetActive" est mis à jour avec un délai allant jusqu'au délai mentionné dans le code ci-dessus. Vous pouvez coder à l'intérieur du rappel pour agir sur le statut.

1
Abhijith C R

Réponse mise à jour pour Swift 4.0 et AlamoFire:

La réponse que j'ai postée le 18 septembre est incorrecte, elle ne détecte que si elle est connectée au réseau, pas à Internet. Voici la solution correcte avec AlamoFire:

1) Créer une classe d’observance de la accessibilité personnalisée:

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) Initialiser au démarrage de l'application

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

3) Utilisez-le n'importe où dans votre application pour détecter si vous êtes en ligne, comme lors du chargement de vue ou lorsque l'action se produit

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

Utilisation de Bibliothèque Alamofire :

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

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

Essaye ça

vérifier ce lien pour le fichier d'accessibilité

Accessibilité

importer ce fichier dans votre fichier .m puis écrire du code

// Ceci est pour vérifier la connexion Internet

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

J'espère que ça aide.

0
Pradumna Patil