не удается обнаружить интернет-соединение с достижимостью достижимости для интернет-соединения - PullRequest
7 голосов
/ 07 марта 2012

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

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

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

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

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

2 голосов
/ 07 марта 2012

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

// 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...