2012-03-07 9 views
6

Mam problem. Używam metody reachabilityForInternetConnection w zakresie dostępności do wykrywania dostępności internetu, ale zamiast tego uzyskuję status połączenia, a nie status Internetu. Chodzi mi o to, że jeśli włączę swoje połączenie Wi-Fi, metoda daje mi prawidłową wskazówkę, że nie mam połączenia, ale jeśli wifi jest włączone, a połączenie internetowe nie działa, to nie działa. Dowolny pomysł?nie można wykryć połączenia internetowego z osiągalnościami osiągalności dla połączeń wewnętrznych

Pozdrawiam

+0

jestem również doświadczając tego rodzaju problemu, zastanawiam się, dlaczego ludzie zwykle nie rozwiązują tego problemu i po prostu korzystają z Zasięgu. Mam na myśli to, co dzieje się z tam app, jeśli jest podłączony do wifi i internet w rzeczywistości nie działa. A jak sobie z tym poradzą? –

Odpowiedz

3

osiągalności mogą być wykorzystane tylko w celu wykrycia, czy iPhone ma połączenia z bramą do Internetu. Co kryje się za bramą, to ci nie powie. Co się stanie, jeśli sieć LAN będzie dostępna, ale nie masz wyjścia do Internetu? Jak iPhone mógł odgadnąć, że to, co widzi (LAN), to nie cały Internet?

Powinieneś poprosić o prawdziwą witrynę. Jeśli się nie powiedzie, pojawią się problemy z połączeniem z Internetem, a dzięki osiągnięciom zasięgu można nawet zrozumieć, gdzie jest problem. Najprostszym sposobem jest wysłanie żądania za pomocą NSUrlRequest na przykład do http://www.google.com. (Jeśli google umiera, można przypuszczać, że są większe problemy tam wtedy z aplikacji łączność :)

+0

co, jeśli moja aplikacja jest używana przez miliony ludzi na całym świecie? Czy powinienem wysłać dużą wiązkę (jeśli tysiące użytkowników jednocześnie za pomocą mojej aplikacji) tego stanu sieci, sprawdzić żądanie z mojej aplikacji do google lub Apple? Czy to w porządku? – Aqueel

+0

Zależy od tego, jak często musisz sprawdzać, czy aplikacja jest osiągalna - spróbuj zmniejszyć liczbę razy do jak najmniejszej liczby. Inaczej myślę, że tak, jest OK - http://www.google.com jest pytany o _billions_ of people w każdej minucie .... – MrTJ

+0

@Aqueel - Prawdopodobnie masz realną prośbę do zrobienia? Powinieneś to zrobić. To jedyny sposób, aby się dowiedzieć, czy to zadziała. Jaki jest sens poznania, czy google jest osiągalny, jeśli rzeczywistą prośbą jest foobar.org/users? 1213321321312&images=med? – hooleyhoop

2

Używam tego w moim app:

// Check for internet connection 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

internetReachable = [Reachability reachabilityForInternetConnection]; 
[internetReachable startNotifier]; 

// Check if a pathway to a random host exists 
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"]; 
[hostReachable startNotifier]; 

oraz:

- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
    // Called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
      // Case: No internet 
     case NotReachable: 
     { 
      internetActive = NO; 

      // Switch to the NoConnection page 
      NoConnectionViewController *notConnected = [[NoConnectionViewController alloc] initWithNibName:@"NoConnectionViewController" bundle:[NSBundle mainBundle]]; 

      notConnected.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      [self presentModalViewController:notConnected animated:NO]; 

      break; 
     } 
     case ReachableViaWiFi: 
     { 
      internetActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      internetActive = YES; 
      break; 
     } 
    } 

    // Check if the host site is online 
    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      hostActive = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      hostActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      hostActive = YES; 
      break; 
     } 
    } 
} 
+5

co zrobić, jeśli moja aplikacja jest używana przez miliony ludzi na całym świecie? Czy powinienem wysłać dużą wiązkę (jeśli tysiące użytkowników jednocześnie za pomocą mojej aplikacji) tego stanu sieci, sprawdzić żądanie z mojej aplikacji do google lub Apple? Czy to w porządku? – Aqueel

Powiązane problemy