Колонка редактора: почему в Android все не слава богу, или страница временно недоступна
Вот, например, пишу я в твиттер @ferraru с нативного клиента под Android. Сделал красивую картинку, написал к ней зажигательный текст, и нажал на кнопку «отправить». И тут, как назло, поезд въехал в тоннель. Предположим, что у меня "Мегафон", и соединение с сетью пропало. Что при этом делает твиттер? Правильно, он говорит «не удалось отправить сообщение» и вешает сообщение об этом в уведомлениях. Если я вдруг их сотру, то потом мне придется раскапывать свой гениальный твит где-то в глубинах интерфейса, а конкретнее — в «черновиках». Почему именно там — для меня загадка, ведь этот твит уже предназначен для публикации, то есть уже чистовик.
Потом я перебираюсь почитать чуть-чуть новостные ленты. Для этого я использую gReader — неплохой неофициальный клиент для Google Reader. Мне он больше всего нравится тем, что умеет скачивать по ссылке статьи со всяких жлобских сайтов, которые не предоставляют полные новостные RSS, причем поведение клиента можно настраивать по отдельности: где-то RSS, где-то веб-версия для мобильного клиента, где-то — для десктопного, пропущенная через Google Mobilizer или нет. Кстати, наши новостные RSS постепенно переезжают на Feedburner, и, заметьте, они восхитительно полные.
Иногда какой-нибудь Engadget или Wired пуляет в общую ленту восхитительную статью, в которой очень «многабукв», и я решаю отложить ее на потом, воспользовавшись по прямому назначению приложением Pocket (раньше оно называлось Read It Later). В gReader есть возможность скидывать уведомления для Pocket, но вот я нажимаю на кнопку, поезд въезжает в тоннель, и мне вылетает сообщение "Can't save to pocket: no data connection". Никаких напоминалок при этом не появляется, и о статье я благополучно забываю.
Та же самая ситуация с Instagram, который, как известно, вообще является примером того, как _не нужно_ писать ПО для Android. Не удалось загрузить — уведомление "failed" будет висеть, пока ты вручную его не тыкнешь.
И так практически везде. Такое ощущение, что разработчикам мобильного ПО ничего не известно, что сеть будет падать, соединение будет пропадать. Неужели нельзя это предусмотреть?
Хорошие примеры же можно пересчитать по пальцам. Например, правильное поведение у восхитительного чат-клиента imo.im. Вместо того, чтобы разводить панику «ах, соединение потеряно и мы все умрем», он спокойно пишет "sending". И в 95% случаев сообщение действительно приходит, как только возобновляется соединение. Иногда коннект явно повисает — приходится заново переподключать приложение к сети. Однако после этого все сообщения со всех бесед автоматически отсылаются. Правда, кому-то такое поведение может не нравится — хорошо бы было иметь возможность его отключить.
Так же работает и нативный клиент "Pocket". Просто пишет "No data connection. But we keep trying". Это же неимоверно круто! И когда соединение появляется — он скачивает все, что нужно.
Я призываю всех разработчиков — господа, откажитесь от блокирующих сообщений об ошибках! Вспомните о том, что мобильный интернет — он постоянно прерывается (это не так где-нибудь «на Берлинщине», но не все разработчики оттуда). Вешайте уведомления о том, что приложение попытается повторить действие через n минут с возможностью настроить это самое значение n. И... Keep Trying!