2015-09-06 2 views
4

Здесь много вопросов об обнаружении активного подключения к Интернету в приложении, но никто не работает, если вы подключены по 3g, и у вас нет данных, или если вы в сети WiFi в гостинице, которая автоматически переадресовывает страницу входа в систему, и вы еще не вводите пароль. Такая ситуация.Проверьте, действительно ли работает интернет-соединение устройства iOS.

Каков самый быстрый способ проверить, действительно ли работает интернет-соединение?

+0

@ danpeters Hi ,,, вы можете достичь этого, используя класс возвращаемости в ios. –

+0

Код Apple Reachability проверяет только наличие соединения wifi/3g или никакого соединения, а не на ситуации, описанные выше. –

+0

@ Данпитеры. Также можно использовать класс Reachability. а также вы можете использовать класс SCNetworkReachability. –

ответ

-1

Лучший способ достичь этого, не используя Reachability или любой другой API, - это создать NSURL и попытаться получить данные от него. Для плохой связи я добавил тайм-аут из 20 секунд.

Как:

- (void)checkConnection //Run this on a side queue, never on a main queue 
{ NSURL *checkURL = [NSURL URLWithString:@"http://www.apple.com"]; 

    NSURLRequest *lRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:checkURL] 
               cachePolicy:NSURLRequestUseProtocolCachePolicy 
              timeoutInterval:20.0]; 

    NSData *data = [NSData dataWithContentsOfURL:lRequest]; 

    if (data) 
    { 
     connected = YES; 
    } 
    else 
    { 
     connected = NO; 
    } 
} 

Что бы проверить, если определенный веб-сайт доступен и установить тайм-аут, который указывает на медленное подключение к сети.

У этого кода могут быть ошибки, так как я еще не использовал/не пробовал! Прокомментируйте этот ответ, если таковые имеются.

+0

И почему достижимость _not_ наилучшим образом? Вы должны действительно поддержать этот комментарий с некоторыми глубокими доказательствами. Что происходит, когда 'apple.com' больше не имеет действительного сервера/хоста. Пройдет две недели, ожидая подтверждения обновления. – soulshined

+0

@soulshined Я не имел в виду, что это лучший способ. Вероятно, это лучший способ, если вы не используете какой-либо API. Кроме того, Apple.com имеет время безотказной работы на 97%, что является высоким. Вместо этого я бы рекомендовал использовать Google.com, так как они получили 99,9% времени безотказной работы, что почти в любое время. – MasterRazer

+1

Дело в том, что вы не должны жестко кодировать такой адрес, когда Reachability у вас под рукой. Адреса меняются, даже если вы не используете Apple.com, серверы идут вниз и т. Д. Возможно, «самый простой способ» является более точным, это решение, безусловно, не самое лучшее. Досягаемость также содержит уведомления, которые обновляют ваш делегат при изменении сети, вместо того, чтобы вручную искать, будут ли сетевые изменения – soulshined

0

Вы можете использовать AFNetworkReachabilityManager класс в AFNetworking.

https://github.com/AFNetworking/AFNetworking

выше ссылка поможет вам в создании вещей. Это обеспечит вам непрерывную проверку сети в соответствии с вашим требованием. Вот несколько строк кода:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
}]; 

[[AFNetworkReachabilityManager sharedManager] startMonitoring]; 
Смежные вопросы