2011-12-28 2 views
3

Мое приложение для iPhone требует использования Интернета.Когда я должен проверить подключение к Интернету

Должен ли я проверять подключение каждый раз, когда выполняется интернет-функция? Или я должен использовать приложение appDelegate для прослушивания сообщений от чего-то вроде класса достижимости, чтобы определить, было ли соединение потеряно и предупредить пользователя?

Что лучше?

Вот что я сделал до сих пор в моем приложении делегат:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 

    reachability = [[Reachability reachabilityWithHostName:[NSString stringWithFormat:@"http://%@/iSql/" ,[[NSUserDefaults standardUserDefaults] stringForKey:@"serviceIPAddress"]]] retain]; 

    [reachability startNotifier]; 

    return YES; 
} 

- (void)reachabilityChanged:(NSNotification *)note { 

    NetworkStatus ns = [(Reachability *)[note object] currentReachabilityStatus]; 

    if (ns == NotReachable) { 

     if (![networkAlert isVisible]) { 

      if ([self networkAlert] == nil) { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"\n\nNo Internet Connection" message:@"You require an internet connection to retrieve data from the server." delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
       [self setNetworkAlert:alert]; 
       [alert release]; 
      } 

      [networkAlert show]; 
     } 
    } else { 

     if ([self networkAlert] != nil) { 
      [networkAlert dismissWithClickedButtonIndex:0 animated:YES]; 
     } 

    } 
} 

ответ

4

По крайней мере, один Apple, технический разговор ведущий не рекомендуется проверять достижимость в большинстве случаев, просто стреляя ваши запросы асинхронной сети, информирующее пользователя (с помощью какого-либо типа индикатора активности), что приложение ожидает ответа сети и дает пользователю возможность, если, по их мнению, они достаточно долго ждали, вместо того, чтобы блокировать пользовательский интерфейс или приложение.

Причина в том, что на подвижном мобильном устройстве сеть может и часто будет подниматься между испытаниями на доступность и любыми фактическими запросами данных. Таким образом, пользователь будет дезинформирован. Сеть также может опуститься после информирования пользователя о наличии возможности подключения, что может быть даже хуже.

Плюс Доверчивость говорит только о возможности подключения ближайшего/1-го сетевого хопа, который может или не может обеспечить подключение к остальной части Интернета или к месту назначения. Общим примером может быть все эти неправильно настроенные точки доступа WIFI.

Заблокировать пользовательский интерфейс и не давать пользователю какой-либо опции после долгого ожидания, вероятно, является основанием для отказа, , независимо от того, установлен ли или нет.

+0

Мне нравится этот ответ - я был в аналогичном техническом разговоре с Apple, где это было рекомендовано. Я бы не стал рекомендовать блокировать все приложение с помощью «UIAlertView» в соответствии с другим ответом, не очень дружелюбным по моему мнению! – lxt

2

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

Я предпочитаю изменять пользовательский интерфейс, если нет подключения к Интернету, и убедитесь, что перед отключением любых методов, требующих подключения, убедитесь в наличии соединения.

0

Я рекомендую:

1) Всегда проверяйте подключение к Интернету до принятия любого запроса Интернета и обрабатывать соответствующим образом. 2) Имейте механизм опроса, который проверяет доступность. Если недоступен, возможно, предупредите пользователя и отключите части вашей программы, которые делают интернет-запросы. Возможно, назовите его «Offline Mode».

+0

Проблема в том, что мое приложение бесполезно без подключения. Я бы предпочел отключить приложение из appDelegate ... возможно, я могу представить уведомление без кнопки и удалить его только тогда, когда сеть вернется ... – Hackmodford

+0

Все настройки обрабатываются в приложении настроек телефона. Моя проблема прямо сейчас заключается в том, как снять предупреждение, как только оно будет показано. так как предупреждение выводится после показа. – Hackmodford

+0

Я хочу остановить ВСЕ взаимодействие с пользователем, когда нет сети, потому что приложение совершенно бесполезно ... поэтому uialertview идеально! – Hackmodford

0

Проверка на доступ к интернету технически зависит от вас, как разработчик, чтобы решить, но Apple в прошлом отклонила приложения, не уведомляя пользователей о недоступности интернет-соединения.

http://mobileorchard.com/avoiding-iphone-app-rejection-from-apple/ (# 6)

Смежные вопросы