2012-03-07 11 views
6

Ho un problema. Sto usando il metodo di Raggiungibilità per la ricerca di Raggiungibilità per rilevare la disponibilità di Internet, ma invece sto ricevendo lo stato di connessione e non lo stato di Internet. Voglio dire se accendo la mia connessione WiFi, il metodo mi dà la corretta indicazione che non ho la connessione, ma se il wifi è attivo e la connessione internet non funziona, non sembra funzionare. Qualche idea?non è in grado di rilevare la connessione Internet con Raggiungibilità RaggiungibilitàForInternetConnection

migliori saluti

+0

Sono anche sperimentando questo tipo di problema, mi chiedo perché la gente di solito non risolve questo problema e usa semplicemente la Raggiungibilità. Intendo cosa succede con l'app se è connessa al wifi e internet non funziona. E come gestiscono questo caso –

risposta

3

raggiungibilità può essere utilizzato solo per rilevare se l'iPhone ha una connessione a un gateway a Internet. Cosa c'è dietro il gateway, non te lo dirà. Cosa succede se la LAN è raggiungibile ma non si ha accesso a Internet? Come potrebbe l'iPhone intuire che ciò che vede (la LAN) non è l'intero Internet?

Si dovrebbe fare qualche richiesta reale per un sito reale. Se fallisce, ci sono alcuni problemi di connessione a Internet, e con i risultati di Raggiungibilità puoi persino capire dove si trova il problema. Il modo più semplice è di effettuare una richiesta con NSUrlRequest ad esempio a http://www.google.com. (Se Google muore, si può supporre che ci sono problemi più grandi là fuori poi la connettività del tuo app :)

+0

e se la mia app viene utilizzata da milioni di persone in tutto il mondo? Devo inviare un grosso gruppo (se migliaia di utenti alla volta tramite la mia app) di queste richieste di controllo dello stato della rete dalla mia app a google o Apple? Va bene farlo? – Aqueel

+0

Dipende da quanto spesso devi controllare la raggiungibilità della tua app - prova a ridurre il numero di volte il meno possibile. Altrimenti suppongo di sì, va bene - http://www.google.com viene interrogato da _billions_ di persone in ogni minuto .... – MrTJ

+0

@Aqueel - Presumibilmente hai una richiesta effettiva da fare? Dovresti farlo. Questo è l'unico modo per sapere se funzionerà. Che senso ha sapere se google è raggiungibile se la richiesta effettiva che desideri effettuare è foobar.org/users?1213321321312&images=med? – hooleyhoop

2

Io uso questo nella mia 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]; 

e:

- (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

cosa succede se la mia app viene utilizzata da milioni di persone in tutto il mondo? Devo inviare un grosso gruppo (se migliaia di utenti alla volta tramite la mia app) di queste richieste di controllo dello stato della rete dalla mia app a google o Apple? Va bene farlo? – Aqueel

Problemi correlati