J'utilise le code suivant pour savoir si la connectivité Internet est présente ou non.iPhone - vérifiez si la connectivité Internet est disponible ou non
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr*)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
NSLog(@"Error. Could not recover network reachability flags");
return 0;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
Cette méthode renvoie le résultat attendu lorsque mon périphérique est connecté à un réseau Wi-Fi. Mais si je teste la même méthode sur un réseau 3G ou Edge, il renvoie un NO (c'est-à-dire non connecté à Internet)
Des idées pourquoi?
Merci.
Y at-il une raison particulière pour laquelle vous avez besoin de contrôler en amont cette vérifier? La recommandation d'Apple a été de ne pas: aller de l'avant et essayer de parler à ce que vous devez parler, et être prêt à faire face aux résultats d'accessibilité. Les conditions réseau sur iPhone peuvent être très très transitoires. –
Je veux montrer différentes sorties basées sur des conditions différentes - s'il y a un problème avec le serveur, le message sera différent, si aucune connexion internet, il sera encore différent – lostInTransit