Сложные приёмы разработки приложений для Windows Phone 8

Основы разработки приложений, взаимодействующих с веб-сервисами

Показывать лекцию целиком

Цель работы: Ознакомиться с основными понятиями разработки приложений, рассчитанных на взаимодействие с веб-сервисами

Приложения, взаимодействующие с веб-сервисами в экосистеме Windows Phone

Современные мобильные телефоны поддерживают различные способы подключения к Интернету. Среди них – подключение к беспроводным Wi-Fi-сетям и подключение с использованием мобильных сетей связи. Как правило, наиболее быстрыми и дешевыми являются именно Wi-Fi-подключения, нередко возможность такого подключения предоставляется бесплатно, например, в местах общего пользования. Что касается выхода в Интернет с использованием сотовых сетей, стоимость и скорость соединения может серьезно варьироваться. От дорогого и сравнительно медленного GPRS-подключения, до быстрых подключений с использованием инфраструктуры 3G-сетей, за работу с которыми берется умеренная плата. В общем случае сетевое соединение с использованием какой-либо технологии мобильной связи следует рассматривать как соединение, работу с которым пользователь хочет контролировать, и соединение, к которому применимы какие-либо ограничения, нарушение которых, как минимум, разочарует пользователя.

Например, распространена схема тарификации мобильного трафика, при использовании которой у пользователя есть определенный лимит на прием и передачу данных. Ограничения могут действовать на разных отрезках времени, например, на некоем тарифном плане с фиксированной платой в месяц они могут выглядеть так: "Доступ к Интернету предоставляется на скорости 512 Кбит/с, при этом, при потреблении в некоторый день более 256 Мб трафика скорость доступа снижается до 128 Кбит/с до 0:00 дня, следующего за днём, когда был потреблен этот объем трафика. При потреблении в текущий месяц более 3 Гб трафика, до следующего месяца скорость доступа снижается до 64 Кбит/с".

Это – условный пример, но в реальных тарифных планах на подключение услуг мобильного доступа в Интернет можно встретить похожие ограничения. Если некоторое приложение (например, почтовый клиент) "решит", что может неограниченно использовать доступное ему мобильное подключение, будет загружать без ведома пользователя файлы вложений, и, в итоге, при первой синхронизации с почтовым ящиком попросту "выберет" дневной лимит данных, пользователь, вероятно, будет весьма разочарован. Он, наверняка, определенным образом планировал использование доступного ему ресурса, рассчитывал воспользоваться быстрой передачей данных для каких-то конкретных целей. Приложение, которое не учитывает этого, вряд ли надолго задержится на устройстве пользователя. Здесь речь шла о тарифном плане с фиксированной платой, подразумевающей определенный объем потребления услуг, со снижением скорости передачи данных на определенных пороговых значениях, при этом, пользователю будут доступна работа в Интернете и при достижении этих пороговых значений. При этом речь не идет о дополнительных затратах, которые понесет пользователь. Если же речь идёт о соединении, где плата взимается за конкретный объем принятых и переданных данных, "безответственное" поведение приложения может дорого обойтись пользователю. Поэтому очень важно экономно расходовать ресурсы мобильных соединений с Интернетом, предоставляя пользователю возможность принятия решений о том, нужно ли загружать или отправлять большие объемы информации с их использованием.

Если говорить о скорости, на которую можно рассчитывать, подключаясь к веб-сервисам, то здесь всё зависит от оператора сотовой связи, услугами которого пользуется абонент, от наличия в конкретном месте, где производится подключение, необходимой сетевой инфраструктуры, от тарифного плана, от текущей загруженности сети. В случае с Wi-Fi-подключениями скорости обычно выше, другие условия так же лучше.

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

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

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

Рассмотрим типичный сценарий работы приложения, которое взаимодействует с веб-службами.

Авторизация в службе

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

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

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

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

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

Получение данных

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

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

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

Отправка данных

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

Завершение работы

Когда пользователь выходит из приложения – например, по нажатию кнопки Назад с его главного экрана, либо переходя на Рабочий стол по нажатию кнопки Пуск, приложение обычно сохраняет данные, имеющие отношение к текущему сеансу работы. То есть, например, при последующем его запуске (если предусматривался ввод учетных данных), учетные данные не нужно вводить снова, в кэше сохраняются данные, с которыми работал пользователь (некоторая часть этих действий выполняется обычно в ходе работы программы для того, чтобы не перегружать обработчики событий, вызываемые при выходе из приложения или его деактивации).

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

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

  • Приложения для чтения каналов новостей. Такое приложение обычно не предусматривает авторизацию в какой-либо службе. На начальном этапе работы (и на последующих этапах, при необходимости), пользователь настраивает список каналов. Приложение периодически (например, при запуске, или с использованием фонового процесса) обновляет каналы, информируя о новых сообщениях пользователя, например, с помощью информации, выводимой на её плитку. Каналы обычно могут обновляться и по запросу пользователя.
  • Почтовые клиенты. В Windows Phone имеется стандартный почтовый клиент, если вы хотите разработать подобное приложение, стоит ознакомиться с его функциональностью. Общий алгоритм работы такого приложения заключается во взаимодействии с почтовым сервером пользователя с использованием введенных пользователем учетных данных. Почтовые клиенты умеют загружать новые письма, при этом решение о загрузке файлов вложений пользователь принимает самостоятельно, так как такие файлы могут иметь слишком большой объем для загрузки на мобильное устройство, вполне может оказаться так, что эти файлы пользователю на устройстве не нужны.
  • Приложения для мгновенного обмена сообщениями. Такие приложения используют различные сетевые сервисы для обмена сообщениями между пользователями этих сервисов, иногда предоставляют расширенную функциональность и интеграцию с возможностями телефона.
  • Приложения-клиенты для сервисов социальных сетей. Функционал таких приложений изменяется в достаточно широких пределах. От реализации возможности работы с каким-то отдельным аспектом социальной сети (например, работа с сообщениями и адресной книгой), до максимально полной реализации этих возможностей на мобильной платформе.
  • Приложения-клиенты для организации работы с какими-либо сетевыми службами. Например, приложения для работы с сетевыми энциклопедиями или другими службами, предоставляющими какие-либо данные (информацию о погоде, сведения об авиарейсах, о почтовых отправлениях). Фактически, речь идёт об удобном интерфейсе для таких служб.
  • Приведенный список не является исчерпывающим, так как, в общем случае, можно создать приложение для работы с любыми службами, доступными в Интернете. Однако, он демонстрирует основные направления разработки подобных приложений.

    Важные API

    Рассмотрим некоторые API и дополнительные материалы, о которых важно знать при разработке сетевой функциональности приложений. Нужно отметить, что создание таких приложений не ограничивается только использованием API для работы с сетевыми соединениями. Фактически, полноценное приложение может использовать большой набор возможностей Windows Phone. Среди них – и работа с сетью, и работа с хранилищами данных, и со встроенными датчиками (GPS-датчик для определения местоположения, акселерометр для организации управления приложением), со встроенной камерой, микрофоном устройства, взаимодействие с интерфейсом системы (динамические плитки, уведомления). Что касается сетевых возможностей, среди них можно отметить следующие.

    В пространстве имен Microsoft.Phone.Net.NetworkInformation (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.net.networkinformation%28v=vs.105%29.aspx) имеются инструменты для получения сведений о сетевых возможностях устройства, о сетевых интерфейсах. Его можно использовать для проверки возможностей сети перед принятием решения о том, насколько интенсивно приложение может использовать эти возможности. Например, класс DeviceNetworkInformation из этого пространства имен позволяет получить сведения о доступности возможностей по передаче данных, сведения о сетевых интерфейсах устройства.

    В пространстве имен System.Net (http://msdn.microsoft.com/en-us/library/windowsphone/develop/btdf6a7e%28v=vs.105%29.aspx) можно обнаружить множество инструментов для организации сетевого взаимодействия приложений. Например, здесь находятся классы WebRequest, HttpWebRequest, WebClient, и другие, непосредственно использующиеся при организации с сетевыми службами.

    В пространстве имен System.Net.Sockets (http://msdn.microsoft.com/en-us/library/windowsphone/develop/system.net.sockets%28v=vs.105%29.aspx) можно найти средства для работы с сокетами.

    Для организации взаимодействия с веб-службами используют классы System.Net.WebClient (http://msdn.microsoft.com/en-us/library/windowsphone/develop/system.net.webclient%28v=vs.105%29.aspx) используется для организации отправки и получения данных. Класс System.Net.HttpWebRequest (http://msdn.microsoft.com/en-us/library/windowsphone/develop/system.net.httpwebrequest%28v=vs.105%29.aspx) используется для схожих целей с ориентацией на HTTP.

    Элемент управления Microsoft.Phone.Controls.WebBrowser (http://msdn.microsoft.com/EN-US/library/windowsphone/develop/microsoft.phone.controls.webbrowser%28v=vs.105%29.aspx) позволяет встраивать в приложение функциональность веб-браузера.

    Класс Microsoft.Phone.Tasks.WebBrowserTask (http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff428757%28v=vs.105%29.aspx) позволяет вызывать веб-браурез из приложения. Например – для открытия какой-либо веб-страницы в браузере вне приложения.

    Дополнительные сведения о возможностях разработки сетевых приложений для Windows Phone можно найти на странице "Возможности связи в Windows Phone" (http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff637518%28v=vs.105%29.aspx). Здесь имеются ссылки на руководства по работе с теми или иными возможностями. В поиске справочных сведений и руководств не стоит забывать о разделах с перечнем дополнительных материалов (See Also), который обычно расположен в нижней части страницы справочной информации по API.

    Выводы

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

    Задание

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

    Дополнительные материалы

    К данной лекции подготовлено видеоприложение.

    Вернуться к учебному плану