2009-04-24 10 views
12

Je cherche à déterminer si une connexion Internet est disponible sur l'iPhone. Cela n'a pas d'importance pour l'application que ce soit le wifi ou EDGE ou autre.Le moyen le plus simple de déterminer si la connexion Internet iPhone est disponible?

En utilisant le code de l'exemple SeismicXML ne semble pas fonctionner et le code exemple joignabilité d'Apple semble overkill pour l'application ...

Y at-il un moyen rapide et facile de déterminer la disponibilité du réseau sur la iPhone?

Merci, Ben

+0

Avez-vous trouvé une réponse? – JoePasq

+0

** étape par étape solution ** Voir la réponse: http://stackoverflow.com/a/25498693/2459296 – Salim

Répondre

0

Ma première idée serait de voir si je pouvais connecter à Google.

7

I figured it out après avoir brisé XCode une fois en essayant de copier le SystemConfiguration.framework dans ... Voici la solution pour tous ceux qui pourraient être intéressés ...

Ajouter le SystemConfiguration.framework à votre projet, faire une #import <SystemConfiguration/SystemConfiguration.h>, puis ajoutez le code suivant:

SCNetworkReachabilityFlags flags; 
BOOL receivedFlags; 

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"google.com" UTF8String]); 
receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags); 
CFRelease(reachability); 

if (!receivedFlags || (flags == 0)) 
{ 
    // internet not available 
} else { 
    // internet available 
} 

Eh bien, espérons que cela aide quelqu'un quand même ... On dirait une façon commune d'avoir une application rejetée ...

+0

Vous devez être prudent avec des drapeaux == 0 en supposant un moyen de connexion que votre application peut utiliser . Si vous examinez les valeurs possibles pour SCNetworkConnectionFlags, elles ne signifient pas toutes "accès Internet immédiat disponible". (Http://developer.apple.com/documentation/Networking/Reference/SysConfig/SCNetwork/CompositePage.html#//apple_ref/c/tag/SCNetworkConnectionFlags) L'échantillon d'accessibilité d'Apple est beaucoup plus précis. – lfalin

9

J'ai inclus Reachability.h & .m d'Apple à partir de leur exemple Reachability, plus le framework SystemConfiguration mentionné ci-dessus, puis ajouté le code suivant à mon application, ce qui présente deux avantages par rapport à la réponse ci-dessus - il vous donne plus d'informations. notifications asynchrones des changements d'état du réseau.

Dans votre délégué app, ou similaire, ajoutez lorsque vous démarrez:

[self startReachability]; 

ajouter cette méthode, qui est appelée lorsque les changements du réseau:

#pragma mark Reachability changed 
- (void)reachabilityChanged:(NSNotification*)aNote 
{ 
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus]; 

switch (self.remoteHostStatus) 
{ 
case NotReachable: 
    debugForComponent(kDebugMaskApp,@"Status changed - host not reachable"); 
    break; 

case ReachableViaCarrierDataNetwork: 
    debugForComponent(kDebugMaskApp,@"Status changed - host reachable via carrier"); 
    break; 

case ReachableViaWiFiNetwork: 
    debugForComponent(kDebugMaskApp,@"Status changed - host reachable via wifi");  
    break; 

default: 
    debugForComponent(kDebugMaskApp,@"Status changed - some new network status"); 
    break; 
} 
} 
+5

'[self startReachability]' - Où cette méthode est-elle définie? –

1

C'est la solution la plus rapide et la plus simple pour votre problème:

([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO; 

Il retournera YES s'il est connecté ou NO si ce n'est pas. Il essaie juste de charger google et s'il réussit, il renvoie YES.

Ensuite, vous pouvez avoir une instruction if avec la valeur de retour, de sorte que vous pouvez lancer une notification ou ce que vous voulez.

+0

Une manière sale aussi. –

+0

stringWithContentsOfURL est déprécié. Donc ça ne marche pas maintenant. – badweasel

24

Suivez ci-dessous 3 étapes faciles -

Étape 1: Inclure cadre de "SystemConfiguration.framework" dans votre projet

Étape 2: Inclus Reachability.h d'Apple et joignabilité.m from Exemple d'accessibilité

Étape 3: Maintenant, ajoutez ce code n'importe où dans votre fichier .m.

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; 
NetworkStatus netStatus = [wifiReach currentReachabilityStatus]; 

switch (netStatus) 
{ 
    case NotReachable: 
    { 
     NSLog(@"Access Not Available"); 
     break; 
    } 

    case ReachableViaWWAN: 
    { 
     NSLog(@"Reachable WWAN"); 
     break; 
    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"Reachable WiFi"); 
     break; 
    } 
} 
+5

^Cela, excepté Reachability fournit des méthodes différentes pour des buts différents: Utilisez reachabilityWithHostName: @ "your.hostname" pour vérifier si vous pouvez atteindre votre propre serveur. Utilisez reachabilityForInternetConnection pour vérifier s'il existe une connexion Internet ou non; ce dernier semble être plus proche de la question originale ici. Je ne vérifierais pas un serveur tiers, par ex. Apple.com - c'est un hack. – n13

+0

Merci beaucoup – SampathKumar

Questions connexes