Компания
1 075,22
рейтинг
10 октября 2012 в 11:00

Разработка → Почта Mail.Ru под WP7: разработка, крупный план

image
Не так давно стартовало приложение Почты под WP7. Когда мы думали о том, нужно ли нам самостоятельное приложение для Windows Phone, или достаточно адаптировать Почту Mail.Ru для IE Mobile и его аналогов, вопрос решился быстро. У владельцев смартфонов на WP7 должно быть собственное полноценное приложение Почты, полностью адаптированное под платформу.

О том, какие требования мы предъявляли к приложению, с какими проблемами столкнулись и как их решали, расскажем под катом.


Концепция

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



В частности, это акцент на управление жестами с применением всех возможностей тач-интерфейса. Переключение между папками и переход от письма к письму одним движением пальца – это и удобно, и соответствует духу платформы. Еще одной особенностью является мгновенная синхронизация с веб-почтой. Все действия пользователя в приложении сразу же отображаются в веб-интерфейсе; все новые письма сразу же видны в приложении.

Все, кто разрабатывал приложения для WP7, знают, что разработка в рамках стандартных элементов управления делается на раз-два; отступление от них на шаг влево или вправо существенно увеличивает время выполнения задачи.

Итак, по порядку о том, с какими трудностями мы столкнулись.

Переключение между папками


Для переключения между папками было решено использовать элемент управления Pivot. Все просто – постраничное переключение, каждая страница загружается по требованию.

Для «стандартного пользователя» все работает отлично – после регистрации в почтовом ящике есть всего 5 папок, приложение загружается быстро. Но у некоторых пользователей папок может быть много (и очень много).

Для тестирования в живой почтовый ящик были добавлены пользовательские папки (в сумме их было 40). В такой ситуации запуск приложения с момента тапа по тайлу на стартовом экране до отображения списка входящих занимал почти 30 секунд. Такой результат нас никак не устраивал.

Детальное изучение проблем с производительностью показало, что узким местом являлся контейнер ObservableCollection, в котором хранился список папок. После того как контейнер получал данные о папках, список загружался по одной папке. Множественное добавление ObservableCollection не поддерживает. А при добавлении каждого нового элемента перестраивается UI. Для Pivot это оказалось неприемлемым. Да, Microsoft в рекомендациях пишет: «Minimize the number of Pivot control pages when possible for performance considerations», но желание сделать переключение жестами пересилило. В качестве решения был выведен наследный класс SilentObservableCollection, у которого были добавлены три метода AddSilently, InsertSilently и RemoveSilently, а также метод Notify. Как следует из названия, первые три метода позволяют перестраивать список, не перестраивая UI при каждом изменении. Последний метод позволяет поменять UI после того, как список папок актуализирован.



Переключение между письмами


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

Во-первых, он сразу создает все страницы под письма (хотя сами письма подгружаются по мере перехода к ним), что снова требует большого количества времени на открытие страницы чтения.
Списком писем для Pivot является список подгруженных заголовков. Если двигаться вниз по этому списку, то к имеющемуся перечню подгружаются блоки по 20 писем. Если переместиться достаточно далеко, то открытие письма может занять и несколько минут, пока Pivot построит страницы для каждого письма.

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

Чтобы побороть все эти проблемы, был написан элемент управления под названием LongListPivot. В нем решены обе описанные проблемы. Он не закольцован, то есть перехода от первого письма к последнему не происходит. И в нем всего одна страница. Изменение данных на этой странице происходит в момент, когда она за экраном. После движения пальцем текущее письмо уезжает за экран, там подменяется на следующее, которое приезжает с другой стороны экрана. Плюс к этому, при подходе к последнему письму в списке, так же, как в случае со списком писем в папке, происходит подгрузка следующего блока из 20 писем.

Просмотр писем


Следующей задачей, на решение которой ушло больше всего времени, стал просмотр писем с html-разметкой.

Кажется, все просто: есть элемент WebBrowser. Располагаем его на странице, загружаем в него текст – и готово. Но бывают сценарии использования приложения, когда применение этого элемента невозможно. Например, если получателей много, а пользователь открыл весь список. Или если в письме есть несколько вложений. Все это приводит к тому, что шапка письма растягивается, и содержимое съезжает к низу экрана. В результате этого, а также того, что WebBrowser имеет свою внутреннюю прокрутку содержимого, получаем, что письмо прокручивается внутри небольшой области.

Рассматривали такой вариант решения: определять высоту письма и жестко указывать высоту для WebBrowser, чтобы исключить его внутреннюю прокрутку, и вписать его в общий поток элементов внутри ScrollViewer. Но, во-первых, в WP7 один элемент управления не может быть в ширину или высоту более чем 2048 пикселей (а это всего 2,5 высоты экрана). Во-вторых, нет никакой возможности определить высоту содержимого письма.

WebBrowser не предоставляет информацию о загруженной в него странице, а также не предлагает программных интерфейсов для управления отображением содержимого (прокруткой, шириной и масштабом). Единственное, что остается программисту — передавать команды в JavaScript с помощью InvokeScript и получать уведомления через событие ScriptNotify.

Дальнейшая разработка страницы чтения письма перешла на новый уровень – на CSS+JavaScript. Благодаря нашим коллегам из мобильной веб-почты удалось решить все вставшие на пути проблемы: как задать ширину письма, масштаб, прокрутку.

Ссылки в письмах


Еще одной из задач стала обработка ссылок. Ссылки должны открываться не внутри встроенного элемента WebBrowser, отображающего текст письма, а в системном браузере. Для этого перехватывалось нажатие на элемент WebBrowser. Далее через JavaScript определялся элемент верстки html, находящийся на позиции касания, проверялось, является ли этот элемент ссылкой, и, если это так, адрес открывался во внешнем браузере.

Проблема была с письмами от одного из агрегаторов скидочных сервисов. Исходный текст уведомлений от него в html составляет около 300-500 Кб. При попытке отображения такого письма программа завершала работу с ошибкой нехватки памяти. В конечном итоге было принято решение все письма с html-разметкой и размером больше 100 Кб отображать в адаптированном текстовом виде.

Работа с вложениями


Одной из особенностей платформы Windows Phone является изолированное хранилище данных. Существуют проблемы в работе с вложениями. Почтовая программа полноценно работает с изображениями из галереи, приложенными к письму, а также со снимками, сделанными с помощью камеры смартфона. В приложении Почты можно просмотреть изображения, вложенные во входящее письмо, и при желании сохранить их в галерею. Также программа может воспроизвести присланные видео- и аудиофайлы.

С документами MS Office и Adobe Reader ситуация следующая: программа формирует ссылку на скачивание этих вложений и передает во внешний браузер. Браузер, сохранив вложение, передает его в Office или в Adobe Reader. Вложенный файл остается в этих программах. Однако если попытаться открыть его снова из приложения Почты, путь придется повторить: будет сформирована ссылка, вложение будет скачано внешним браузером и откроется в соответствующей программе.



Тестирование


Отдельно стоит рассказать о тестировании. Тестирование WP-приложений связано с несколькими трудностями из-за особенностей самих устройств. Например, пока невозможно вести и выводить логи процесса тестирования и делать скриншоты экрана прямо с устройства.

Несмотря на то, что мы опубликовали 5 бета-сборок приложения, ни одна из них не была отдана пользователям. От момента публикации сборки до момента, когда она становится доступна для скачивания, проходит трое суток. За это время большинство ошибок сборки выявляются нашим тестировщиком, исправляются, и бета-версия морально устаревает. Для организации тестирования были заведены 4 учетных записи разработчиков, с помощью которых были разблокированы 12 устройств. Периодически, по завершении очередного этапа разработки, на большинство устройств устанавливалась последняя, актуальная версия и собирались отзывы, комментарии и жалобы.

В остальном, благодаря четким требования Microsoft к производителям устройств под управлением Windows Phone, приложение, за редким исключением, работает одинаково на разных моделях смартфонов (нет такой фрагментированности, как среди устройств под управлением Android).

Заключение


Надеемся, что эта информация была вам полезной. Также нам было бы очень интересно почитать об опыте других разработчиков под WP: если вы уже сталкивались с подобными задачами и решили их по-другому, расскажите нам об этом в комментариях.

Мы, в свою очередь, продолжаем работать над улучшением приложения. Замечания и предложения вы можете присылать нам на mailapps@corp.mail.ru. Скачать Почту Mail.Ru для Windows Phone 7 можно в Windows Phone Store.

Балашов Вадим, разработчик мобильных приложений
Mail.Ru

Автор: @VadimBal

Комментарии (57)

  • 0
    А под WP8 когда ожидается?
    • +9
      если я правильно помню, софт написанный под wp7.5 должен сразу работать под wp8.
      • 0
        Все верно, Майкрософт обещает перекомпилировать приложения в облаке и сделать весь парк приложений под WP7 доступным для WP8. Интересный момент заключается в том, насколько гладко пройдет перекомпиляция обфусцированных приложений. Придет время — увидим.
        • +2
          А зачем Silverlight перекомпилировать?
          • 0
            Скорее пересоберут xap файл, а не перекомпилируют. Хотя, это лишь предположение.
            • 0
              Я так понимаю, достаточно Silverlight под wp8 перекомпилировать и все.
              • +1
                Silverlight как и был так и остался)
        • –3
          «Перекомпилировать в облаке»?

          За такие фразы хочется жестко $@#$$@ черенком от лопаты.
          • +1
            Это действительно так. Cloud compiler в оригинале
          • +2
            Это вольная цитата речи одного из представителей MS. К сожалению не смогу сейчас найти ссылку на оригинал, но это было на одной из конференций.
            • –1
              Но не по-русски написано, согласись. Имхо стоит адаптировать подобные выражения в пользу здравого смысла.
              • +1
                Не соглашусь, просто потому, что технические термины есть технические термины. Я же не сестре на кухне рассказываю, как это будет происходить, а в технически подкованном сообществе. Если слово компиляция пришло в среду разработки программного обеспечения без перевода, а Майкрософт (и другие крупные компании) продвигают «Облачные технологии», то выражение «перекомпилировать в облаке» считаю нормальным.

                Если не согласны, давайте называть компьютеры электронно вычислительными машинами, а компиляцию — "трансляция". Будет звучать по русски, но, согласитесь, это не в пользу здравого смысла.
  • 0
    вместо ObservableCollection можно было б заюзать IList для оптимизациии скорости листания. почему у вас должно грузиться 40 писем долго? вы ж грузить вроде должны просто список папок, а при тапе уже на конкретную папку грузить список писем этой папки или не так?
    • 0
      40 — это количество папок, которое мы добавили в почтовый ящик для тестирования скорости загрузки. Каждая папка соответствует одному элементу в Pivot'е. Pivot по своей внутренней структуре сразу создает все элементы при первом отображении, и это сильно затормаживало запуск в программы.

      Элементы списка писем (письма подгружаются по 20 штук) создаются при первом отображении папки, т.е. при листании Pivot'а, и в целом это происходит достаточно быстро.
      • 0
        можно было б повесить событие onSelectionChanged, не помню как точно, которое как раз отвечает за смену item'а Pivot'а и при смене подгружать список писем для конкретной папки…
        • 0
          Именно это я и написал:

          Элементы списка писем (письма подгружаются по 20 штук) создаются при первом отображении папки, т.е. при листании Pivot'а...

          И добавил, что с этом-то проблем не было:

          … и в целом это происходит достаточно быстро.
          • –1
            понятно) спасибо) а если писем так штук 500 пользователь подгрузил, с этим тоже нет проблем? письма грузите по достижению конца списка писем автоматически или вручную по нажатию кнопки какой-либо?)
            • 0
              При переключении на папку подгружаются первые 20 писем. Если долистать до 20го — будут автоматически загружены еще 20 и т.д. Эта же ситуация происходит при чтении письма — если свайпом перейти к последнему загруженному письму, будут подгружены следующие 20.

              Проверяли с подгрузкой 400 писем (20 страниц по 20 писем). Отображается достаточно быстро, проблем с нехваткой памяти при этом тоже не возникло. Но 400 писем это достаточно много. Если нужно найти письмо, которое было получено давно — лучше воспользоваться поиском.
  • 0
    можно было б повесить событие onSelectionChanged, не помню как точно, которое как раз отвечает за смену item'а Pivot'а и при смене подгружать список писем для конкретной папки…
  • +8
    Зачем отдельное приложение? Телефон умеет работать с почтой из коробки. У меня есть ящик на Mail.ru — никогда не испытывал проблем с его чтением через телефон.
    • +4
      просто при установке этого клиента, установится еще и майл гвард)
    • +1
      Основной плюс для меня — поддержка Push Notifications.
      • 0
        если я правильно понял технологию Push Notifications некая служба постоянно держит соединение с сервером. Как на это реагирует батарейка, если связь идет через wi-fi?
        • +2
          Сервис, который обрабатывает пуш-нотификации всех подписанных программ один (что экономит ресурс процессора). И он учитывает состояние батареи (в режиме энергосбережения пуши доставляюся с задержкой). Это гораздо более экономичный способ, в сравнении с ситуацией, если бы все приложения в фоне постоянно опрашивали свои сервисы.

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

          Рискну, так же, предположить, что опрашивая сервис встроенное приложения проходит весь цикл авторизации, что отрицательным способом сказывается на трафике и процессорном времени.
      • +1
        Простая проверка почты в нужный интервал очень даже работает.
        • 0
          Но согласитесь, когда письмо, только придя на сервер, сразу оказалось в вашем телефоне, это тоже приятно.
  • +4
    Разницы со встроеным приложением, особо не заметил
  • –4
    Обрезанные фамилия и стремное выравнивание — это фишки wp? или косяки программы?
    • 0
      Обрезанные фамилии — однозначно фича, причем довольно таки симпатично выглядит в динамике при правильной реализации
      • 0
        Насколько я помню обрезанный текст показывает, что можно сделать свайп вправо и там будет какая то еще менюшка/информация/и т.д. Тогда можно пролистнуть посмотреть инфу о пользователе и заодно фамилия будет видна. Но что то есть предчувствие, что там ничего нет, и фамилии зря обрезанные.
        И вообще как то оформлено не в стиле Метро. Когда представляют приложение на WP делают не скрины, а разворот программы. Хотя как я вижу по скринам тут абсолютно не учтены особенности метро. Например те же фамилии — можно было сделать стену из писем, при перелистывании переходим к следующему письму, видим начало имени. Хотя это немного странно выглядит. Потом в метро особо не принято делать список папок… делают опять же стену, чтобы вошел и смотри сразу нужную папку.

        Внизу выезжающее меню, насколько я помню оно именно должно открываться, а не быть открытым. Например в окне ввода данных для входа надо сделать кнопку отдельно Вход, а не запихивать её в меню Т.к. это не дополнительная функция, а основная.
        Возможно конечно стандартный выглядет также, но ИМХО немного не сходится в метро.
        • 0
          Полностью согласен. Увы не достаточно много общался с мобильным Metro, чтобы написать настолько развернутый комментарий.
        • 0
          Комментарий получился действительно развернутым, однако судить о программе по скриншотам довольно сложно, не так ли? Если вы попробуете установить приложение, то поймете, что ряд описанных замечаний не верны.

          По поводу Application Bar: туда выносятся до 4х ключевых действий окна. Дополнительные 3 действия могут быть вынесены в меню (могут быть и больше, однако Metro UI Guidelines не рекомендуют выносить в аппбар и меню суммарно больше 7 действий).

          Еще в процессе разработки Агента мы консультировались с дизайн бюро Майкрософт в Лондоне, которые дают свои рекомендации по оформлению приложений в стиле Метро и именно они порекомендовали убрать кнопку «Войти» из окна в нижнюю панель.
  • +3
    А нафига?
  • –1
    Надеюсь, хоть тут не будет Mail.ru защитника? :)
    • –5
      Кстати это была шутка.
  • +1
    Не могли бы вы поделиться (и мнение других WP7-разработчиков тоже интересно), какой вы используете элемент управления для отображения перечня писем?

    ListBox или что-то другое? Я просто в похожей задаче (отображение перечня, правда не писем а объявлений), в данный момент использую ListBox в который просто через datacontext кидаю список объявлений.

    Но мне кажется, использование листбокса для этого несколько избыточно, как минимум из-за того, что в обработчике SelectionChanged каждый раз приходится делать что-то такое
    if (SearchList.SelectedItem != null)
    {
       SearchList.SelectedItem = null;
       ...
    }

    чтобы сбрасывать выбранный пользователем элемент.

    Есть аналогичные решения? Чтобы закинуть список элементов и по тапу по одному из них срабатывал обработчик, и чтобы это решение было лучше листбокса?
    • 0
      Есть контрол ListView.
      • 0
        спасибо! Попробую
    • 0
      Упс, рано отправил. В ListView можно ItemTemplate определить, чтобы он реагировал на нажатие. (Хоть кнопку положить туда. На халяву получите tilt-effect).
    • 0
      Мы спользуем свой класс, с расширенной функциональностью, но тоже наследуемый от ListBox.
      А чем мешает выбраный пользователем элемент?
      • 0
        тем, что если в результате выбор элемента пользователь переходит на новую страницу, и на ней нажимает «назад» — то если не сбросить выбор то этот элемент уже будет выбран и при повторном тапе по нему обработчик события SelectionChanged соответственно не сработает
        • +2
          Видимо проблема в том, что для обработки нажатия Вы используете SelectionChanged.
          Можно использовать Триггеры. В шаблое ItemTemplate пишется следующее:

          xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
          
          <DataTemplate x:Key="mailListItemTemplate">
          	<Grid >
          		<i:Interaction.Triggers>
          			<i:EventTrigger EventName="Tap">
          			<i:InvokeCommandAction 
          				Command="{Binding Source={StaticResource viewModelLocator}, Path=MailListViewModel.GoToReadMail}" 
          				CommandParameter="{Binding}" />
          			</i:EventTrigger>
          		</i:Interaction.Triggers>
          ...
          	</Grid>
          </DataTemplate>
          


          В коде ViewModel обявляется свойство:

          public ICommand GoToReadMail { get; set; }
          


          И инициализируется делегатом:

          using Microsoft.Practices.Prism.Commands;
          
          GoToReadMail = new DelegateCommand<MailViewModel>((x) =>
          	{
          		...
          	});
          


          В результате, по тапу будет вызываться делегат, в котором Вы будете получать элемент, по которому тапнули в параметре x.
  • +2
    "… пока невозможно вести и выводить логи процесса тестирования и делать скриншоты экрана прямо с устройства..."
    Для скриншотов нужно использовать эту программу: Screen Capturer. Его нет в Marketplace, нужно скачать .xap и сделать деплой на устройство. По мне то это лучшая программа и наверно единственная для снятия скриншотов.
    • +1
      Чем не устраивает снятие скриншотов из эмулятора?

      Мне кажется, самый оплтимальный вариант
    • 0
      Да, мы использовали Screen Capturer, как единственное (известное нам) решение. Но это скорее костыль.

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

      Когда речь идет о подготовке скриншотов для публикации в маркет — можно использовать эмулятор. А когда отдаешь устройство с установленным приложением тестировщикам, то они, конечно, негодуют, особенно после тестирования версий Мобильной Почты для iOS и Android, в которых скриншоты делаются одним двойным нажатием.
  • +3
    А зачем делать отдельное приложение? В WP замечательный почтовый клиент со всем нужным функционалом и интеграцией, пользуюсь как раз 3-мя ящиками на Gmail и Mail.ru — всё замечательно.
    • 0
      Брендинг. Ваш КО.
    • 0
      поддерживаю вашу мысль, но хочу отметить, что у гугла того же на андроиде есть свой клиент для почты in general и для gmail отдельно. зачастую оба клиента проверяют один и тот же ящик
    • 0
      Вопрос, на самом деле, не праздный. Действительно, хотя родной клиент и не идеален по многим показателям, зато сторонний будет лишён прелестей интеграции. И нужны более веские поводы, чем просто реализация пуш-мейла, чтобы пользователи почтового сервиса mail.ru (они же — обладатели устройств с Windows Phone) стали действительно массово пользоваться этим приложением. В статье про это ни слова, в комментариях тоже тема не раскрывается, хотя вопрос звучит не в первый раз, что только наводит на подозрения…
      • +2
        Целью статьи было не расхваливание клиента и демонстрация его возможностей и отличительных особенностей, а хотелось поделиться некоторыми техническими проблемами и решениями, с которыми пришлось столкнуться.

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

        И так, преимущества:
        + как уже говорилось — мгновенные пуш уведомления о новых письмах (в то время, как встроенный клиент предлагает различные периоды времени, при этом минимум 15 минут). В том числе, если приложение лежит запущенным, и письмо приходит в открытую папку, то список писем обновляется автоматически;
        + между письмами можно переключаться жестами вправо-влево, что достаточно естественно в самой платформе, но не реализовано во встроенном клиенте;
        + такое же быстрое переключение жестами между папками, в то время как встроенный клиент позволяет делать это только через меню;
        + мгновенная синхронизация с сервером: открыли письмо в программе — на вебе оно уже помечено прочитанным, отметили непрочитанным — веб тут же отреагировал;
        + работа с флажками: не смотря на то, что при работе с другими почтовыми сервисами во встроенном клиенте есть возможность ставить звездочки (помечать письма), для работы с серверами Mail.Ru эта возможность отсутствует;
        + пометить письмо как спам из встроенного приложения нельзя;
        + встроенное приложение хранит письма за неделю (или другой указанны срок), а в представленном клиенте подгрузка писем происходит по мере необходимости и есть возможность посмотреть письма за полгода-год назад;
        + интеграция системной и серверной адресной книги: встроенное приложение предлагает вставить контакты только из локальной адресной книги, в то время как в представленном клиенте используется и локальная адресная книга и подгружается актуальная адресная книга из веба, которая автоматически пополняется адресатами, которым вы пишете.

        Про опасения потерять прелести интеграции: единственное, что приходит в голову из того, что не умеет разработанный нами клиент, это показывать счетчик непрочитанных на экране блокировки. При этом количество непрочитанных писем отображается в углу тайла.
        • 0
          За столь подробный и обстоятельный ответ — спасибо! Вы правы в том, что ресурс здесь — практически сугубо IT-шный, но тем не менее, тема WinPhone вообще и приложений к нему в частности настолько актуальна, что без преувеличения можно сказать, вызывает повышенный интерес у всех посетителей, даже не прописанных на форуме. Поэтому вопрос о том, зачем вообще понадобилось тратить столько сил на создание отдельного клиента, если и штатный, по уверениям разработчиков, прекрасен, интересует практически всех. ПМСМ, будет хорошо добавить ссылочку на этот ваш пост с разъяснениями в тело публикации.
          Про интеграцию — да, будут потеряны уведомления на экране блокировки, что обидно. Не будет возможности объединять папки «входящие», что менее обидно, но тем не менее… Чуть изменённый внешний вид у этого приложения по отношению к стандартному будет вызывать когнитивный диссонанс при необходимости работать параллельно с несколькими аккаунтами разных провайдеров — а вот это уже, пожалуй, самое серьёзное. Я знаю достаточно много людей, которые на Android всегда настраивают gmail-аккаунт еще и в общем почтовике, чтобы было удобнее работать со всеми письмами одинаково, хотя само приложение Gmail весьма не плохо сделано. Так что тут напрашивается в вашем приложении реализовать возможность настройки других POP3/IMAP аккаунтов, чтобы в едином поле можно было бы работать с несколькими почтовыми адресами.
  • +1
    У Пушкина должен быть другой адрес — простой и запоминающийся.

    Как минимум, pushkin@mail.ru.
  • –2
    Теперь спам и зараза в виде спутников, гуардов и майл агентов будет еще на WP платформе… — мрак
  • –3
    Идиоты, прости Господи. Лучше бы веб-версию адаптировали. Нафига нам ваше приложение если а) почту можно добавить в стандартный интерфейс почты; б) все используют её для спама?
    • +1
      Наша веб-версия адаптирована для смартфонов на базе операционной системы Windows Phone и доступна по адресу m.mail.ru.
      • –1
        Какая разница? Со стандартного ящика такая же фигня.
      • –1

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка