Мобильное программирование: Рекомендации по созданию адаптируемых пользовательских интерфейсов с помощью Mobile Internet ToolkitИсточник: codingclub
В статье даются рекомендации по созданию мобильных Web?приложений и фильтров устройств с помощью набора Microsoft Mobile Internet Toolkit, адаптируемого под дисплеи многих мобильных устройств типа PDA (Personal Digital Assistants), в том числе Pocket PC, сотовых телефонов с поддержкой Web, пейджеров и т. д.ВведениеMicrosoft® Mobile Internet Toolkit (MIT) предоставляет инструменты для создания приложений, ориентированных на мобильные устройства. Этот инструментальный набор позволяет разработать приложение, способное адаптироваться к дисплеям самых разнообразных мобильных устройств - персональных цифровых помощников (Personal Digital Assistants, PDA), например Pocket PC, сотовых телефонов с поддержкой Web, пейджеров и т. д. Дополнительные средства предоставляет Microsoft .NET, которая упрощает развертывание мобильных приложений на отдельных серверах или больших серверных фермах. Эти рекомендации помогут вам создавать эффективные фильтры устройств и мобильные Web?приложения, однако их не следует рассматривать как исчерпывающее руководство и как нечто обязательное без учета контекста решаемой вами задачи. Придерживаясь данных рекомендаций, вы сможете создавать мобильные Web?приложения мирового класса. Архитектура и особенности развертывания мобильных приложенийМобильными называются приложения, к которым могут обращаться мобильные устройства. Мобильные устройства характеризуются широким разнообразием размеров и качества дисплеев, полос пропускания и поддерживаемых протоколов. Mobile Internet Toolkit снимает с вас большую часть бремени с отображением информации на мобильных устройствах. Однако, помимо проблем с дисплеями, в мобильном приложении нужно учитывать и ряд других факторов, которые отличают его от обычных Web-приложений. Принимайте во внимание следующие ограничения мобильных устройств и соответствующих сетей.
Планирование: цели разработкиНа стадии планирования любого приложения важно правильно определить цели разработки, от которых зависит выбор наиболее эффективной стратегии его развертывания. Большая часть сведений из документации Microsoft .NET Framework применима и к разработке мобильных приложений. Разработка мобильного приложенияПри распределении задач между клиентом и сервером следует помнить о двух целях. Во-первых, вы должны свести к минимуму обмен данными по HTTP-соединению (Hypertext Transfer Protocol). Каким бы быстрым оно ни было, обработка на клиенте всегда быстрее. Пересылать информацию между клиентом и сервером нужно лишь в случае крайней необходимости. Во-вторых, клиенту должны быть доступны только те серверные ресурсы, которые абсолютно необходимы ему для выполнения своей задачи. Каждый запрос должен полностью идентифицировать клиент, чтобы серверу не приходилось обращаться к нему за дополнительной информацией, увеличивая число обменов данными по соединению. Если клиент способен полностью описать свои возможности при запросе к серверу (например, идентифицировать себя как PDA с цветным дисплеем), сервер немедленно отправит ответ, соответствующий возможностям клиента, и не станет запрашивать дополнительные сведения (чтобы, например, выяснить, поддерживает ли дисплей клиента цветные изображения). Эта концепция применима и к разработке Web?приложений, предоставляющих доступ к базе данных. Так, при проверке статуса заказа клиент должен использовать запрос MyDatabase.Recordset, чтобы получать информацию только по данному заказу, а не все записи в таблице заказов. Определение интерфейсаСоздавая приложение, продумайте, какова его целевая аудитория. Если приложение рассчитано на пользователей как настольных компьютеров, так и мобильных устройств, введите в его версию для настольных систем функциональность, позволяющую настраивать мобильную версию.
Создание компонентов пользовательского интерфейсаПользовательский интерфейс (UI) может содержать меню, а также формы для ввода и отображения информации, которые могут обращаться к наборам данных. Хороший подход - написать детальные сценарии применения приложения (storyboard). Каждый такой сценарий становится формой, а каждый его раздел - страницей. Продумайте следующие компоненты UI:
Другие методы доступа к даннымЕще один метод доступа к данным - отключить состояние отображения (view state) и сохранять локальную копию данных. Тогда при каждом запросе данные связываются с локальной копией. Например, в папке входящей почты могут храниться локальные копии писем. Во многих сценариях доступа к данным используется кэширование. Как разработчик, вы можете организовать пользовательский кэш. Например, это позволяет полностью обрабатывать лишь первый запрос на текущие новости. Все последующие запросы перенаправляются локальному кэшу. Интеграция с сайтами, рассчитанными на взаимодействие с настольными системамиПеренаправляйте пользователей с одной страницы Web Forms на другую, более подходящую для браузера данного пользователя. Предположим, у вас есть сайт, предназначенный для взаимодейсвтия с настольными системами (desktop site), и вы хотите создать его мобильную версию с тем же URL. Для этого можно создать мобильный .aspx?файл и поместить в обработчик загрузки страницы следующий код:
Примеры совмещения мобильных и "настольных" сайтов см. на Web?сайте IBuySpy (http://www.ibuyspy.com/). Настраиваемые представленияВозможность настройки внешнего вида приложения повышает удобство работы пользователей, не мешая рендерингу по умолчанию. Как правило, при создании настраиваемых представлений не следует использовать элементы, нарушающие модель UI. Вместо этого:
ПроизводительностьПри создании адаптируемых UI разработчики должны принимать во внимание те же параметры, что и для обычных Web?приложений:
Более подробную информацию см. в разделе Collecting Performance Data на Duwamish Online. Универсальные способы повышения производительностиПовысить производительность приложения можно следующими способами.
Возможности тестированияРазрабатывая адаптируемые UI для мобильных устройств, всегда включайте поддержку просмотра "наименьшего общего знаменателя" ("lowest common denominator" browsing capability), чтобы вы могли контролировать внешний вид своего приложения. По-настоящему протестировать свое приложение вы можете лишь на реальных устройствах, на которые оно рассчитано. Список устройств приведен в разделе "Requirements and Supported Devices" онлайновой документации. По возможности опубликуйте приложение в Интернете, чтобы на практике проверить его взаимодействие с мобильными устройствами. Глобализация и локализацияГлобализованное приложение поддерживает локализованные UI и региональные стандарты. Возможно, вам потребуется настраивать кодировку по умолчанию для определенных устройств и языковые параметры. Основной способ задать тип кодировки - настроить параметры в разделе <globalization> файла machine.config. Два главных параметра, позволяющих изменять кодировку по умолчанию:
Вот пример установки этих параметров в machine.config:
Эти параметры влияют на весь компьютер. Если вы хотите модифицировать их только для одного Web?приложения, внесите изменения в раздел <globalization> конфигурационного файла (web.config), который находится в корневом каталоге приложения. Более подробную информацию о разработке глобальных приложений см. в разделе Building .NET Framework Applications в Microsoft .NET Framework Developer's Guide. РендерингПодробное описание рендеринга средствами Mobile Internet Toolkit приводится в онлайновой документации и может быть затронуто в будущих документах. А здесь даются рекомендации по кэшированию вывода и рендерингу на разных устройствах. Кэширование выводаСтраницы Web Forms в Microsoft ASP.NET включают автоматическую поддержку кэширования вывода. Страница кэшируется директивой @OutputCache. В мобильных страницах Web Forms содержимое кэша вывода нужно варьировать в зависимости от целевого устройства. Например, если страница запрашивается устройством с Microsoft Internet Explorer для Pocket PC, то получаемая информация должна помещаться в кэш и передаваться только другим устройствам с Internet Explorer для Pocket PC. По умолчанию содержимое кэша мобильных страниц Web Forms различается по строке HTTP?агента пользователя. Однако некоторые устройства могут отличаться дополнительными свойствами вывода. Так, устройство с единственной строкой агента пользователя может обладать различными свойствами отображения и размера экрана, каждое из которых способно влиять на выводимую информацию. Чтобы учесть эти различия, адаптер страницы должен переопределять свойство CacheVaryByHeaders. Элементы управления Web Forms в ASP.NET также поддерживают директиву OutputCache для независимого кэширования их вывода. Этот механизм называется раздельным кэшированием (partial caching). Однако пользовательские элементы управления в мобильных страницах Web Forms не поддерживают эту директиву. Мобильные страницы Web Forms не поддерживают раздельное кэширование, поскольку вывод от пользовательского элемента управления может варьироваться в зависимости от содержимого остальной части страницы. Аппаратно-зависимый рендерингХотя мобильные страницы Web Forms способны автоматически выполнять рендеринг под разные устройства, они предоставляют массу средств для настройки отображения контента под конкретное устройство или класс устройств, что позволяет разработчику задействовать преимущества специфической функциональности данного устройства. Рекомендации по фильтрам устройствПри создании и управлении фильтрами устройств учитывайте следующее.
Ввод данныхПроектируя ввод данных, подумайте над способами эффективного и интеллектуального ввода/выбора данных. В мобильных устройствах (особенно телефонах) следует применять пошаговый метод ввода информации и не пользоваться HTML?страницами, отображающими все поля ввода сразу. Такие страницы предполагают наличие у пользователя позиционирующего устройства, позволяющего выбирать поля и вводить данные в любом порядке. Для мобильных клиентов требуется более прямолинейный подход. На исходной странице может быть поле для ввода имени, а под ним - кнопка поиска. В мобильном приложении может понадобиться разместить такое поле или элементы управления поиском на первой из серии форм ввода. Также не забывайте о том, что объем данных на странице влиет на число обращений к серверу. Для организации ввода данных используйте элемент управления SelectionList следующим способом.
Навигация в мобильных приложенияхВ этом разделе описываются ограничения и особенности навигации в приложениях для мобильных устройств, а также рекомендации по адаптации существующих приложений к этим требованиям. Например, при адаптации существующего HTML?приложения возникает соблазн преобразовать каждую кнопку панели инструментов (toolbar) в ссылки на форме. Но лучше создать элемент управления List и представить каждую такую кнопку как ссылку в этом списке. При пролистывании многостраничного списка используйте свойство Form.CurrentPage, чтобы помечать нужную страницу и переходить на нее. Вопросы безопасности.NET Framework предоставляет модель защиты по правам доступа кода (code access security model), позволяющую администраторам настраивать политику безопасности в соответствии с потребностями. Неправильная политика безопасности может привести к появлению уязвимых мест. Более подробную информацию см. в разделе Code Access Security Model в Microsoft .NET Framework Developer's Guide. Элементы управления Mobile Web Forms зависят от .NET Framework и могут оказаться непригодными из-за каких-либо изменений в .NET Framework. Поэтому версия мобильных элементов управления и версия .NET Framework должны совпадать. Защита ресурсовУбедитесь, что в сеансах не используются cookie. Они не годятся для управления сеансами на мобильных устройствах просто потому, что не все такие устройства их поддерживают. На Web?фермах применяйте состояние сеанса SQL (SQL session state), если только вы не используете состояние отображения и состояния сеанса. Всегда используйте MobileFormsAuthentication.RedirectFromLoginPage вместо FormsAuthentication.RedirectFromLoginPage и MobileFormsAuthentication.SignOut вместо FormsAuthentication.SignOut. В случае неверной сигнатуры вы не сможете работать с устройствами, не поддерживающими cookie и использующими UP.Link. MobileFormsAuthentication взаимодействует с FormsAuthentication из ASP.NET. Для аутентификации пользователей можно задействовать раздел <credentials> в web.config или организовать нестандартную аутентификацию. Например, можно аутентифицировать пользователей по именам и паролям из базы данных или при помощи службы каталогов Microsoft Active Directory™. После аутентификации следует вызвать метод FormsAuthentication.SetAuthCookie, помещающий аутентификационный cookie в набор HttpResponse.Cookies. Затем вызовите MobileFormsAuthentication.RedirectFromLoginPage. Если устройство не поддерживает перенаправление через cookie, MobileFormsAuthentication удалит соответствующий набор. В обоих случаях cookie аутентификации добавляется к URL как строковая переменная запроса. При последующих запросах с предоставлением cookie аутентификации MobileFormsAuthentication больше не добавляет этот cookie к URL. А если cookie не предоставляется (устройство не поддерживает cookie), он всегда добавляется к URL. Ниже приведены примеры конфигурационных файлов и кода для выполнения аутентификации через MobileFormsAuthentication. web.config
login.aspx
Page1.aspx
Добавьте эти три файла к IIS?приложению и откройте страницу Page1.aspx. Вы будете перенаправлены на страницу Login.aspx для регистрации. После успешной регистрации вы вернетесь на страницу Page1.aspx. Документы на смежную тематикуПрежде чем продолжить чтение этого документа, рекомендуется прочитать: Рекомендации по разработке мобильных элементов управленияПри разработке мобильных элементов управления придерживайтесь следующих рекомендаций.
Универсальные процедуры и рекомендации по использованию дизайнераПри разработке приложения с помощью Mobile Internet Designer придерживайтесь следующих рекомендаций.
Общие рекомендацииТакже при разработке учитывайте следующее.
При размещении элементов управления в шаблонах любые свойства этих элементов могут быть связаны с какой-либо структурой в сценарии, что позволяет манипулировать элементом не напрямую, а через эту структуру. Однако связывание с данными не решает проблемы программного управления страницей. Вы можете упростить решение и его сопровождение, используя метод HasCapability, поскольку он является частью реализации элемента <DeviceSpecific>. Для WML-браузеров и устройств, способных работать с несколькими формами в разметке, можно объединять формы в группу и не обращаться к серверу для запроса каждой формы отдельно. Форма, содержащая навигационные элементы, которые активизируют другую форму без обращения к серверу, называется связанной (linked form). Например, форма B связана с формой A, если выполняются следующие условия:
Если элемент управления содержит ссылку формата #form1, метод ResolveFormReference ищет форму по значению свойства id формы form1 из пользовательского элемента управления. Если форма не найдена, метод ResolveFormReference просматривает вложенные элементы управления по цепочке вверх и ищет форму на странице. Информация по синтаксисуОбласть действия распространяется вверх, а не вниз по иерархии. Если вы хотите сослаться на форму, которая содержится в пользовательском элементе управления, идентифицируйте ее так:
В этом выражении mc1 - идентификатор пользовательского элемента управления. Двоеточие отделяет ссылку на форму. Примечание Анкеры элементов (URL типа page.aspx#element) не поддерживаются, если page не является текущей страницей. Оптимизация состояния отображения для мобильных приложенийДля мобильных страниц Web Forms важно учитывать следующие аспекты. Сохранение состояния отображения в сеансе высоко оптимизировано. Если информации для записи нет, ничего не сохраняется, и никакого идентификатора клиенту не отсылается. Но если вам не нужен механизм управления сеансами или если вы хотите создавать страницы с высокой пропускной способностью, подумайте о полном отказе от использования состояния отображения. Во многих случаях (например, при рендеринге страницы форматированного текста) состояние отображения не нужно, и его лучше отключить. Кроме состояния отображения, существуют и другие виды информации о состоянии страницы, сохраняемой в мобильной странице Web Forms. В ее состав могут входить сведения об активной форме или о разбиении формы на страницы. Такая информация не хранится на сервере, а всегда отправляется клиенту и, как правило, оптимизируется. Например, если активна первая форма или отображается первая страница формы, соответствующая информация не сохраняется, поскольку это состояние по умолчанию. Подобная информация называется частным состоянием отображения (private view state). Все элементы управления могут переопределять методы LoadPrivateViewState и SavePrivateViewState для чтения и записи частного состояния отображения. ОграниченияВ этом разделе рассказывается об ограничениях Mobile Internet Toolkit. Ограничения средыИнтегрированная среда разработки (IDE) Mobile Internet Designer для Microsoft Visual Studio® .NET накладывает несколько ограничений на манипуляции с элементами управления. Они проявляются, если вы, например, по ошибке поместите элемент в недопустимое место или неверно напишете слово в директиве @Register. Ограничения элементов управленияДизайнер не предотвращает неверного размещения элементов управления, а лишь выводит сообщение об ошибке. Чтобы избежать таких ошибок, придерживайтесь следующих рекомендаций. Всегда:
Никогда:
Ошибки, связанные со страницами Такие ошибки возникают при загрузке мобильной страницы Web Forms с мобильными элементами управления Web Forms в Visual Studio .NET IDE, если директива @Register отсутствует или некорректна. Если в среду Visual Studio .NET загружается страница с мобильными элементами управления и правильной директивой @Register, но сама страница не принадлежит к типу MobilePage, отображается следующее сообщение об ошибке:
Нарушение правил размещенияЕсли поместить элемент управления ASP.NET Web Forms на мобильную страницу Web Forms за пределами шаблона, появляется сообщение об ошибке: "This page can only support non-mobile controls in templates. Please delete this control or move it into a template." ("Немобильные элементы управления могут быть размещены на этой странице только в пределах шаблона. Пожалуйста, удалите этот элемент или перенесите его в шаблон.") Чтобы устранить эту ошибку, переместите или удалите данный элемент управления. Ограничения контейнеров также запрещают размещать:
Ограничения по количествуЕсли на страницу добавляется несколько элементов StyleSheet, второй элемент StyleSheet отключается, и при рендеринге выдается сообщение об ошибке. Если первый элемент StyleSheet удаляется, активным становится второй. Если в контейнере размещается несколько элементов DeviceSpecific, второй элемент отключается, и при рендеринге выдается сообщение об ошибке. Если первый элемент удаляется, активным становится второй. Параметры отладкиВ этом разделе описываются разделы конфигурационного файла приложения (web.config), предназначенные для отладки. В основном вам не придется их изменять, но эта информация пригодится для настройки среды отладки. Динамическая отладочная компиляцияДля отладки .aspx?файлов установите параметр <compilation debug="true"/>:
Присвоение ему значения false повышает производительность приложения. Этим параметром можно управлять индивидуально для каждой страницы, помещая в нее директиву @Page:
Нестандартные сообщения об ошибкахВы можете определить набор страниц для сообщений об ошибках. При возникновении ошибки ASP.NET определяет, настроено ли приложение на отображение собственных сообщений об ошибках и существует ли страница для данной ошибки. Если такая страница есть, ASP.NET заменяет стандартное сообщение об ошибке данной страницей, передавая ей параметр с исходным URL. Если вы разрешаете вывод нестандартных сообщений об ошибках, но не предоставляете страницы со своими сообщениями, Mobile Internet Controls Runtime передает клиентским WML-устройствам реальную ошибку. Чтобы страницы с сообщениями об ошибках корректно работали на таких устройствах, добавьте в раздел system.web файла web.config следующий код:
Для мобильных устройств, не поддерживающих перенаправленные ответы без полного URL, установите параметр useFullyQualifiedRedirectUrl="true" (например, его требуется устанавливать для устройств i-mode):
Протоколирование трассировки на уровне приложенияПри трассировке на уровне приложения для каждой страницы в приложении ведется журнал. Чтобы включить протоколирование трассировки установите параметр trace enabled="true". Если установлен параметр pageOutput="true", информация о трассировке отображается внизу каждой страницы. При использовании этого метода отладки необходимо, чтобы браузером по умолчанию в Visual Studio .NET был внутренний браузер. Если в процессе трассировки вы хотите просмотреть страницу на эмуляторе, установите параметр trace enabled = "true", как показано ранее:
или
Для просмотра журнала трассировки откройте в Internet Explorer файл trace.axd из корневого каталога вашего Web?приложения. Примечание В проектах Microsoft Visual C#®, по умолчанию включен параметр Unmanaged Debugging, а в проектах Microsoft Visual Basic® - параметр Managed Only Debugging. Примечание Вам может потребоваться добавить в переменную окружения DEVPATH путь к связываемым библиотекам (link libraries). РасширяемостьMobile Web Forms и мобильные элементы управления Web Forms обладают той же расширяемостью, что и ASP.NET, но помимо этого поддерживают работу со многими устройствами. Поддерживаются следующие механизмы расширяемости.
Портал и магазин IBuySpyIBuySpy Portal Solution Starter Kit находится по адресу www.IBuySpy.com/portal и демонстрирует, как создавать интранет? и Интернет?порталы при помощи ASP.NET и .NET Framework. IBuySpy предоставляет всю функциональность типичных порталов, включая:
Весь код портала IBuySpy из комплекта для скачивания разрешено бесплатно использовать в собственных приложениях. Но портал можно создать и без единой строчки кода. Он предоставляет административные страницы для настройки собственного портала, наполнения его информацией и установки правил безопасности. Кроме того, на портале IBuySpy размещено множество модулей, разработанных при помощи Mobile Internet Toolkit и представляющих функциональность порталов для мобильных устройств. Фактически на www.IBuySpy.com/portal размещена и мобильная версия портала для устройств, совместимых с Mobile Internet Toolkit. Детали реализации IBuySpy PortalСтраница Default.aspx выполняет простую проверку типа браузера и перенаправляет запрос к "настольной" или мобильной версии главной страницы:
Главная страница (default page) - в основном, статическая: большая часть работы выполняется другими компонентами. Так, заголовок, меню, и список "popular items" реализованы отдельными элементами управления, а на страницу помещены лишь ссылки на них. Сама главная страница состоит всего из нескольких строк кода для проверки регистрации пользователя. Если пользователь зарегистрирован, появляется приветствие, которое можно персонализировать. Персонализация осуществляется в методе?обработчике Page_Load. Событие (Load) инициируется на сервере при каждом обращении браузера к странице. Оно дает удобный способ структурирования серверной логики, которую следует выполнять при доступе к странице. Ниже приведен код главной страницы.
Приветственное сообщение генерируется при получении от клиента cookie (хранящегося на клиенте в страницах Login.aspx и Register.aspx). Если cookie обнаружен, из него извлекается имя пользователя и отображается через серверный элемент управления. Для подробного ознакомления с генерацией такого cookie изучите страницу Login.aspx. Замечания по производительностиПоскольку эта страница является стартовой для приложения IBuySpy Store и используется чаще всего, ее производительности уделено особое внимание. Мы решили не помещать в кэш всю страницу (в отличие от страниц ProductDetails и ProductsList), поскольку хотели сохранить возможность подстройки страницы под конкретного пользователя. Для большей производительности были исключены обращения к базе данных при каждом запросе. Вместо этого мы сохраняем всю персональную информацию (в данном случае - имя пользователя) в необязательном cookie, хранящемся на клиенте. Пользовательские элементы управления Menu и PopularItems, напротив, извлекают информацию из базы данных. Но они используют раздельное кэширование вывода для хранения этой информации и обновляют данные всего один раз в час. Дополнительные сведения о продуктеДля повышения производительности информация со страницы размещается в кэше. Для этого служит директива @OutputCache в начале страницы.
В данном случае мы решили установить период обновления кэша равным одной минуте (60 секундам). ASP.NET автоматически сохраняет отдельные элементы кэша для каждого значения строки запроса и извлекает информацию для каждого из последующих запросов. Информация, содержащаяся в этом документе, отражает взгляд Microsoft по обсуждаемой тематике на момент публикации. Поскольку Microsoft должна реагировать на изменения рыночной конъюнктуры, эту информацию не следует рассматривать как некое обязательство со стороны Microsoft, и Microsoft не гарантирует точность данных сведений после даты публикации. Этот документ носит исключительно информационный характер. MICROSOFT НЕ ДАЕТ НИКАКИХ ПРЯМЫХ ИЛИ КОСВЕННЫХ ГАРАНТИЙ ОТНОСИТЕЛЬНО ИНФОРМАЦИИ В ДАННОМ ДОКУМЕНТЕ. Пользователь обязан выполнять все законы об авторских правах, применимые к данному документу. Полное или частичное воспроизведение документа, хранение или копирование, а также передача в любой форме и любыми средствами (электронными, механическими, фотокопированием, записью и др.) с любой целью без письменного разрешения Microsoft Corporation является нарушением авторского права. Microsoft может владеть патентами, патентными приложениями, товарными знаками, авторскими правами или другими правами на интеллектуальную собственность, связанной с тематикой данного документа. За исключением специального письменного лицензионного соглашения с Microsoft, этот документ не дает вам права пользоваться любыми патентами, товарными знаками, авторскими правами или другими видами интеллектуальной собственности. Примеры компаний, организаций, продуктов, физических лиц и событий, которые могут встречаться в данном документе являются вымышленными. Любые совпадения с реальными компаниями, организациями, продуктами, лицами или событиями носят случайный характер. © 2001 Microsoft Corporation. Все права защищены. Microsoft, Visual Studio .NET, Mobile Explorer, Visual Basic и Windows являются товарными знаками Microsoft Corporation, зарегистрированными в США и/или в других странах. Названия реальных компаний и продуктов, упомянутые в документе, могут быть товарными знаками соответствующих владельцев. |