2012-03-07 3 views
6

У меня проблема. Я использую метод достижимости ForInternetConnection для Доступности для обнаружения доступности Интернета, но вместо этого я получаю статус соединения, а не статус Интернета. Я имею в виду, если я вернусь к моему Wi-Fi-соединению, этот метод дает мне правильное указание, что у меня нет связи, но если Wi-Fi включен, а соединение с Интернетом не работает, оно, похоже, не работает. Есть идеи?не может обнаружить подключение к Интернету с достижимостью достижимостиForInternetConnection

С наилучшими пожеланиями

+0

Я также испытывая такую ​​проблему, я задаюсь вопросом, почему люди обычно не решают эту проблему и просто используют Досягаемость. Я имею в виду, что происходит с приложением, если он подключен к Wi-Fi, и интернет на самом деле не работает. И как они справляются с этим делом –

ответ

3

достижимости может быть использован только для определения того, имеет ли iPhone соединение со шлюзом в Интернет. Что стоит за шлюзом, это не скажет вам. Что делать, если ЛВС достижима, но у вас нет выхода в Интернет? Как iPhone мог предположить, что то, что он видит (ЛВС), - это не весь Интернет?

Вы должны сделать реальный запрос на реальный сайт. Если это не удается, есть проблема с подключением к Интернету, и с результатами Reachability вы даже можете понять, где проблема. Самый простой способ - сделать запрос с NSUrlRequest, например, до http://www.google.com. (Если Google умирает, то можно предположить, что существуют большие проблемы там, то подключение вашего приложения :)

+0

Что делать, если мое приложение используется миллионами людей по всему миру? Должен ли я отправлять большую группу (если тысячи пользователей одновременно с моим приложением) этого запроса проверки статуса сети из моего приложения в Google или Apple? Это нормально? – Aqueel

+0

Это зависит от того, как часто вам приходится проверять доступность вашего приложения - старайтесь сократить количество раз до минимально возможного. В противном случае, я думаю, да, все в порядке - http://www.google.com запрашивается _billions_ людей в каждую минуту .... – MrTJ

+0

@Aqueel - Предположительно у вас есть реальный запрос? Вы должны это сделать. Это единственный способ узнать, будет ли это работать. Какой смысл знать, доступна ли Google, если фактический запрос, который вы хотите сделать, - foobar.org/users?1213321321312&images=med? – hooleyhoop

2

Я использую это в моем приложении:

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

и:

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

Что делать, если мое приложение используется миллионами людей по всему миру? Должен ли я отправлять большую группу (если тысячи пользователей одновременно с моим приложением) этого запроса проверки статуса сети из моего приложения в Google или Apple? Это нормально? – Aqueel