#iphone #networking
#iPhone #сеть
Вопрос:
Как вы думаете, что было бы лучшим способом справиться с отсутствием подключения к сети?
Мое будущее приложение сильно зависит от сети, и без этого с ним будет нечего делать.
Я вижу, что приложения справляются с ситуацией по-разному.
Например, когда у меня нет подключения, приложение ebay иногда извлекает последние сохраненные данные, но в другой раз оно просто все удаляет. Приложение Paypal либо выведет меня из системы, либо просто завершит работу. Одно из новостных приложений просто продолжит загрузку…
Есть ли какие-либо лучшие практики?
Должно ли приложение продолжать попытки и отображать сообщение о загрузке, добавлять кнопку обновления или просто автоматически закрывать приложение?
Спасибо
Комментарии:
1. На самом деле это не вопрос программирования, а скорее вопрос дизайна 🙂 Это также не связано с работой с классом NSURLConnection…
Ответ №1:
Как правильно обрабатывать условие «нет сети», полностью зависит от вашего приложения.
Следует помнить о двух вещах: программном закрытии приложения или неправильной обработке сообщения «подключение недоступно», которые являются причинами отклонения в процессе проверки Apple.
Имея опыт разработки приложения, которое также сильно зависело от доступности сети, я бы сказал, что наилучшую практику можно обобщить следующим образом:
1) используйте платформу достижимости, чтобы определить, какой тип подключения у вас есть; версия, на которую я ссылаюсь, должна быть предпочтительнее версии, предоставляемой Apple, которая содержит ошибки (подробнее об этом ищите в S.O);
2) каждый раз, когда вам нужны данные из сети, проверяйте, восстановлено ли соединение (т. Е. Не только один раз в начале);
3) всегда сообщайте пользователю, что сеть недоступна, когда это происходит, либо отображая предупреждение, либо лучше показывая какой-либо другой значок / сообщение; лучше всего использовать наименее навязчивый вид отображения, чтобы не нарушать рабочий процесс пользователя;
4) если у вас есть кэшированные данные, и это имеет смысл, используйте кэшированные данные, когда сетевое подключение недоступно (это сделает приложение «частично пригодным» и в таких случаях);
5) предложите пользователю кнопку для обновления данных, если это имеет смысл для вашего приложения;
С учетом сказанного, простейшей реализацией этой «лучшей практики» является приложение, которое в случае отсутствия подключения возвращает пользователя к «главному экрану» (некрасиво, но это может быть единственной разумной вещью в вашем приложении). Полная реализация — это, скажем, RSS-ридер, который кэширует все новости и позволяет вам читать их даже при отсутствии подключения (очевидно, без загрузки новых данных).
Комментарии:
1. Это то, чего я добивался. Спасибо
Ответ №2:
Сначала самое простое: вы никогда не должны закрывать приложение самостоятельно, и вы никогда не должны аварийно завершать работу.
Если в вашем случае уместно отображать старые данные, просто сделайте это и, возможно, добавьте на экран уведомление о том, что пользователь находится в автономном режиме.
Если использование действительно ничего не может сделать без онлайн-доступа, выделите все серым цветом или используйте аналогичную технику.
Продолжайте попытки повторного подключения в фоновом режиме (т. Е. прослушивайте изменения доступности сети) и ведите себя соответствующим образом.
Следует иметь в виду одну вещь: с мобильными устройствами часто возникают короткие отключения, с которыми нужно обращаться корректно.
Ответ №3:
Взгляните на ASIHTTPRequest, у него отличный механизм кэширования.
Ответ №4:
если в вашем приложении нет подключения к сети, то лучше указать сообщение типа «Нет подключения к сети», а не показывать загрузку / обновление и т.д.
Или сохранение данных в базе данных также было бы хорошим вариантом, по крайней мере, пользователь может работать с данными в автономном режиме, а также ваше приложение будет использоваться и в автономном режиме. (Как вы упомянули, Мое будущее приложение в значительной степени зависит от сети, и без этого с ним ничего не будет. ).
Убедитесь, что ваше приложение не должно аварийно завершать работу, когда сеть недоступна.