Когда я должен проверить интернет-соединение - PullRequest
3 голосов
/ 28 декабря 2011

Для работы приложения на 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 ]

4 голосов
/ 29 декабря 2011

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

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

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

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

2 голосов
/ 28 декабря 2011

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

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

0 голосов
/ 28 декабря 2011

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

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

0 голосов
/ 28 декабря 2011

Рекомендую:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...