Лучшая практика — нет подключения к сети

#iphone #networking

#iPhone #сеть

Вопрос:

Как вы думаете, что было бы лучшим способом справиться с отсутствием подключения к сети?

Мое будущее приложение сильно зависит от сети, и без этого с ним будет нечего делать.

Я вижу, что приложения справляются с ситуацией по-разному.

Например, когда у меня нет подключения, приложение ebay иногда извлекает последние сохраненные данные, но в другой раз оно просто все удаляет. Приложение Paypal либо выведет меня из системы, либо просто завершит работу. Одно из новостных приложений просто продолжит загрузку…

Есть ли какие-либо лучшие практики?

Должно ли приложение продолжать попытки и отображать сообщение о загрузке, добавлять кнопку обновления или просто автоматически закрывать приложение?

Спасибо

Комментарии:

1. На самом деле это не вопрос программирования, а скорее вопрос дизайна 🙂 Это также не связано с работой с классом NSURLConnection…

Ответ №1:

Как правильно обрабатывать условие «нет сети», полностью зависит от вашего приложения.

Следует помнить о двух вещах: программном закрытии приложения или неправильной обработке сообщения «подключение недоступно», которые являются причинами отклонения в процессе проверки Apple.

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

1) используйте платформу достижимости, чтобы определить, какой тип подключения у вас есть; версия, на которую я ссылаюсь, должна быть предпочтительнее версии, предоставляемой Apple, которая содержит ошибки (подробнее об этом ищите в S.O);

2) каждый раз, когда вам нужны данные из сети, проверяйте, восстановлено ли соединение (т. Е. Не только один раз в начале);

3) всегда сообщайте пользователю, что сеть недоступна, когда это происходит, либо отображая предупреждение, либо лучше показывая какой-либо другой значок / сообщение; лучше всего использовать наименее навязчивый вид отображения, чтобы не нарушать рабочий процесс пользователя;

4) если у вас есть кэшированные данные, и это имеет смысл, используйте кэшированные данные, когда сетевое подключение недоступно (это сделает приложение «частично пригодным» и в таких случаях);

5) предложите пользователю кнопку для обновления данных, если это имеет смысл для вашего приложения;

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

Комментарии:

1. Это то, чего я добивался. Спасибо

Ответ №2:

Сначала самое простое: вы никогда не должны закрывать приложение самостоятельно, и вы никогда не должны аварийно завершать работу.

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

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

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

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

Ответ №3:

Взгляните на ASIHTTPRequest, у него отличный механизм кэширования.

Ответ №4:

если в вашем приложении нет подключения к сети, то лучше указать сообщение типа «Нет подключения к сети», а не показывать загрузку / обновление и т.д.

Или сохранение данных в базе данных также было бы хорошим вариантом, по крайней мере, пользователь может работать с данными в автономном режиме, а также ваше приложение будет использоваться и в автономном режиме. (Как вы упомянули, Мое будущее приложение в значительной степени зависит от сети, и без этого с ним ничего не будет. ).

Убедитесь, что ваше приложение не должно аварийно завершать работу, когда сеть недоступна.