Создание надежных и заслуживающих доверия приложений в стиле Metro

Во время разработки модели приложения для Windows 8 и новых приложений в стиле Metro мы руководствовались целым рядом требований. Ключевое требование к архитектуре заключалось в предоставлении пользователям приложений, которыми можно пользоваться с полной уверенностью — уверенностью в том, что приложения будут правильно использовать ресурсы, не будут мешать работе других приложений, будут использовать системные ресурсы с разрешения пользователя, легко устанавливаться и удаляться и т. п. Для удовлетворения этих требований требуется надежная платформа и эффективный набор средств разработки. При таком подходе необходимо начать работу практически "с нуля", а не довольствоваться модернизацией существующей системы. В данном отношении Windows 8 и является такой системой "с нуля". В этой статье описывается некоторая часть работы, которая была проделана нами на уровне платформы для создания надежных и заслуживающих доверия приложений в стиле Metro. Автором этой статьи является Джон Хейзен (John Hazen), руководитель программы в рабочей группе Developer Experience. -- Стивен

Один из основных принципов, которым мы руководствовались при разработке платформы приложений в стиле Metro для Windows 8, состоял в следующем: пользователи должны быть уверены в своих приложениях. Можно сказать, что при реализации данного подхода мы с вами "играем в одной команде". В этой статье я расскажу о нашем понимании идей надежности приложений и уверенности в них, а также постараюсь помочь вам повысить степень доверия пользователей к разрабатываемому приложению.

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

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

Схема факторов, влияющих на доверие к приложению; эти факторы также перечислены в подписи к рисунку

Уверенность в приложении: Пакет Windows 8 SDK для приложений в стиле Metro, комплект сертификации приложений для Windows, подписи приложений,
контейнер приложения, оценки и отзывы, процедура адаптации для Магазина, простая установка, обратная связь посредством телеметрии

В данной статье рассматриваются все эти области, а в самом конце подробно описываются возможности наших приложений. Для начала — небольшой обзор:

  • Магазин Windows — для пользователей все начинается с Магазина, их "пункта комплексного обслуживания" для получения приложений в стиле Metro. Перед размещением в Магазине ваше приложение проходит проверку (включая тесты на безопасность) на соответствие как техническим требованиям, так и принципам политики Магазина. После публикации в Магазине члены сообщества оценивают ваше приложение и дают о нем отзывы. Совместно процедура адаптации и отзывы членов сообщества позволяют создать среду, в которой пользователи могут с уверенностью работать с приложениями.
  • Установка приложений — Windows 8 управляет всеми аспектами развертывания приложений от вашего имени. Поэтому пользователям не приходится беспокоиться о том, что установка, обновление или удаление одного приложения могут неблагоприятно повлиять на другие приложения.
  • Пакет SDK — пакет Windows 8 SDK для приложений в стиле Metro предоставляет удобный набор API, помогающих создавать надежные приложения. Эти приложения соответствуют требованиям процедуры адаптации для Магазина и обеспечивают наилучший пользовательский опыт.
  • Возможности и контейнер приложения — Windows 8 обеспечивает более высокую степень разграничения приложений, чем в случае классических приложений. Благодаря этому вы сможете создавать приложения, которые взаимодействуют друг с другом и с пользователями более предсказуемым и согласованным образом.

Конечно же, мы понимаем, что процедуру адаптации можно обойти, наборы API можно применять не по назначению, для нарушения ограничений пакета SDK достаточно просто проявить смекалку, а контейнеры приложений — не панацея. Но мы уверены в том, что усилия, вложенные в эту новую экосистему, помогут вам создавать приложения, которые понравятся пользователям. Такой многомерный подход является наиболее эффективным способом для формирования у пользователей чувства уверенности. Со временем мы будем улучшать каждый из указанных аспектов на основе реального практического опыта. Теперь давайте поговорим об уверенности.

Магазин Windows

Некоторые члены нашей рабочей группы уже успели довольно много рассказать об общей структуре и плане развития Магазина в блоге, посвященном Магазину Windows. Ознакомьтесь с этой информацией, если вы еще не сделали этого, поскольку именно Магазин является основным связующим звеном между вами и пользователями. Давайте рассмотрим некоторые из тех способов, с помощью которых Магазин помогает создавать уверенность в этой экосистеме приложений.

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

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

Страница с примером описания игрового приложения в Магазине Windows, содержащая оценки, отзывы, сведения о разрешениях и ссылку для отправки отзывов

Страница с описанием приложения из Магазина Windows

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

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

Доступ к приложениям в один щелчок

Когда вы привлекли вниманием пользователя к странице описания приложения, вам наверняка хотелось бы максимально упростить ему получение этого приложения. В Windows 8 для получения приложения достаточно нажать всего одну кнопку. Пользователям больше не нужно отвечать на многочисленные вопросы или нажимать кнопку за кнопкой. После входа в Магазин и обнаружения интересного приложения они просто нажимают кнопку, подтверждают покупку и все!

Отличная новость: для этого вам не потребуется писать ни одной строчки кода установки — все необходимое предоставляется в составе Windows 8. В Windows обрабатывается не только процедура установки. Здесь используются цифровые подписи для обеспечения целостности приложения на всем пути от Магазина до установки и даже при загрузке и выполнении приложения на компьютере пользователя. Если система Windows обнаруживает несоответствие приложения цифровой подписи, она предлагает пользователю загрузить исправленную версию из Магазина.

Windows устанавливает каждое приложение в конкретное расположение с раздельными и обособленными расположениями для данных и параметров каждого приложения. Поэтому пользователям не нужно беспокоиться о том, что установка или удаление одного приложения негативно повлияет на работу других приложений или всего компьютера. Пользователи быстро убедятся, что установка и удаление приложений со временем не снижают возможности для работы (на деле, благодаря контрактам Windows 8, установка каждого нового приложения только повышает эти возможности). Поэтому они будут с большей готовностью использовать больше приложений. Хорошо также осознавать, что другое приложение вряд ли сможет негативно сказаться на возможностях взаимодействия с пользователем в вашем приложении.

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

Пакет Windows 8 SDK для приложений в стиле Metro

Чем эффективнее взаимодействие с пользователем в ваших приложениях, тем с большей готовностью пользователи будут использовать ваши новые приложения и обновления после их выпуска. Пакет Windows 8 SDK для приложений в стиле Metro — это отличная платформа для построения приложений, необходимость установки которых покажется пользователям несомненной.

Мы тщательно продумывали набор API, предлагаемый для приложений в стиле Metro. Это нужно было не только для упрощения среды программирования Windows, но и для создания тщательно протестированной платформы для создания новых приложений, гарантирующей их полную совместимость с моделью приложений в стиле Metro для Windows 8.

Рекомендуем вам подавлять в себе желание найти способы вызова API, не включенных в данный пакет SDK. Это существенно подрывает ожидания пользователей относительно вашего приложения. Работа API, не включенных в состав данного SDK, с приложениями в стиле Metro не гарантируется как для текущего, так и для будущих выпусков, поэтому при их использовании ваше приложение может работать неправильно у некоторых пользователей. Кроме того, такие API могут некорректно работать в асинхронной среде, на которой основана структура приложений в стиле Metro. Наконец, эти API могут подрывать уверенность пользователей, обращаясь к тем ресурсам или данным, с которыми приложения в стиле Metro не могут нормально взаимодействовать. Учитывая все эти причины, мы включили в состав комплекта сертификации приложений для Windows проверки, помогающие выявить места, в которых возможен непреднамеренный вызов интерфейсов, отсутствующих в данном SDK.

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

Стабильная работа как вместе, так и врозь

Для пользователей важен удобный процесс установки, и данный SDK помогает создавать приложения, прекрасно интегрирующиеся с системой. Кроме того, пользователи ожидают как от вашего приложения, так и от нашей платформы высокого уровня надежности. Мы помогаем вам достичь целевых показателей надежности, обеспечивая более высокую степень разграничения приложений в стиле Metro по сравнению с классическими приложениями Windows. В Windows 8 каждое приложение в стиле Metro выполняется в контексте уникального контейнера приложения, который помогает изолировать само приложение и его данные от других приложений в стиле Metro.

Контейнеры приложений обладают некоторыми особенностями, характерными для всех приложений в стиле Metro. Они:

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

Такой уровень разграничения значительно упрощает создание надежных приложений, отвечающих ожиданиям пользователей. В то же время всем нам хотелось бы, чтобы приложения хорошо взаимодействовали друг с другом. Для этого Windows 8 предлагает несколько механизмов, обеспечивающих совместную работу приложений в стиле Metro друг с другом и с платформой. К таким механизмам относятся:

  • Контракты приложений, которые являются тем связующим звеном, которое соединяет приложения в стиле Metro друг с другом и с пользовательским интерфейсом системы.
  • Средство выбора файлов, которое позволяет вашему приложению взаимодействовать с данными, выбираемыми пользователем.
  • Объявления возможностей приложений, позволяющие приложению программно взаимодействовать с устройствами и данными, когда это требуется.

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

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

Объявления возможностей приложений

Существует много способов расширения контейнера приложения с помощью объявлений возможностей, каждое из которых предназначено для реализации конкретных сценариев. Поэтому мы рекомендуем использовать их только при определенных условиях. Эти возможности делятся на 4 основные группы:

  • Библиотеки данных. По умолчанию приложения не имеют доступа к библиотекам данных пользователей, таким как фонотека или библиотека документов. Для взаимодействия с этими библиотеками мы рекомендуем использовать средство выбора файлов. Однако в редких случаях бывает необходимо, чтобы приложение могло считывать данные или управлять ими непосредственно в таких расположениях.
  • Доступ к устройствам. По умолчанию приложения не могут использовать устройства, которые большинство пользователей считают важными с точки зрения конфиденциальности, включая веб-камеры, микрофоны и устройства для определения местоположения. Когда приложениям требуется доступ к таким устройствам, им необходимо объявить об этом намерении и получить согласие пользователя.
  • Доступ к сети. По умолчанию приложения не имеют доступа к сетям пользователей. Поскольку большинство приложений взаимодействует с Интернетом, мы реализовали соответствующую возможность во всех шаблонах Visual Studio для приложений в стиле Metro. Если простого доступа к Интернету вашему приложению недостаточно, вы можете ознакомиться с представленными ниже доступными вариантами.
  • Удостоверение пользователя. Эти возможности предоставляют прямой доступ к идентификационным данным, применяемым конкретным пользователем для входа в корпоративную систему, или к сертификатам, связанным с удостоверениями пользователей. Хотя потребность в таких возможностях возникает довольно редко, они являются обязательными для определенных корпоративных приложений и могут понадобиться вам в таких сценариях, как банковские транзакции, когда для авторизации требуется смарт-карта.

Объявление возможности в любой из указанных категорий выполняется так же просто, как и ее отметка в конструкторе манифестов Visual Studio. Однако эти возможности следует добавлять только в том случае, если они критически важны для реализации сценария работы приложения. На этапе тестирования Consumer Preview мы встретили несколько переданных в Магазин приложений, в которых были объявлены все перечисленные возможности или та возможность, которая не была существенной для работы приложения. Таким образом, поскольку список доступных возможностей довольно мал, стоит уделить больше времени изучению каждой возможности и способов ее использования.

Снимок экрана конструктора манифестов Visual Studio с вкладкой возможностей, на которой можно выбрать устройства или компоненты системы, доступные приложению

Конструктор манифестов Visual Studio

Библиотеки данных

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

Объявление манифеста

Результат

musicLibrary

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

videoLibrary

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

pictureLibrary

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

documentsLibrary

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

removableStorage

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

На этапе тестирования Consumer Preview мы встретились с загруженными приложениями, в которых данные возможности объявлялись, хотя и были ненужными. Например, приложения объявляли documentsLibrary по самым разным причинам, включая следующие:

  • Хранение используемых приложением параметров в библиотеке документов. Для этих целей предназначено частное хранилище. Дополнительную информацию о параметрах приложений и хранилище см. здесь.
  • Хранение созданного пользователем файла. Чтобы позволить пользователю сохранить файл в любое расположение, включая библиотеку документов, правильнее использовать средство выбора файлов.
  • Общий доступ к документу совместно с другим приложением. Для этих целей служит контракт общего доступа.

Эту возможность следует объявлять, если ваше приложение предназначено для использования в качестве основного обработчика определенного типа файлов в системе. Например, средство просмотра факсов должно обрабатывать все TIFF-файлы в библиотеке документов пользователя.

Доступ к устройствам

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

Поскольку такие устройства тесно связаны с вопросами конфиденциальности пользователей, Windows 8 следит за тем, чтобы в случае объявления такой возможности при первой попытке обращения к соответствующему устройству пользователю выдавался запрос на подтверждение такого доступа. Например, если ваше приложение позволяет работать с картами, вполне вероятно, что вы захотите получить доступ к данным геолокации на устройстве. Когда приложение предпринимает первую попытку получить эти сведения, пользователю отображается запрос на подтверждение такого доступа. Это подтверждение действует до тех пор, пока пользователь не решит явным образом запретить такой доступ через меню параметров. Поскольку пользователь может запретить вашему приложению доступ к таким устройствам, даже если вы добавили соответствующую возможность в манифест, следует обеспечить работоспособность приложения и без такого доступа. Например, если пользователь запретил вашему приложению доступ к встроенному модулю GPS, вы можете просто запросить у него выбор текущего местоположения на карте.

Объявление манифеста

Результат

location

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

webcam

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

microphone

Предоставляет доступ к аудиоканалу микрофона, что позволяет приложению записывать звук с подключенных микрофонов.

proximity

Предоставляет возможность подключать устройства, расположенные в непосредственной близости от компьютера, по радиоканалу связи ближнего действия (NFC). Связь ближнего действия можно использовать для отправки файлов или для взаимодействия с приложением или расположенным поблизости устройством.

Доступ к сети

Большинству приложений требуется подключение к сети Интернет, поэтому все шаблоны Visual Studio для приложений в стиле Metro по умолчанию содержат возможность internetClient. Если вашему приложению не требуется передача данных через Интернет, эту возможность следует удалить. В общем случае возможность internetClientServer используется в одноранговых (P2P) сценариях, таких как игры или связь по протоколу VoIP. Но если вашему приложению не требуется открывать порт в брандмауэре, не используйте эту возможность. Используйте возможность privateNetworkClientServer, когда приложению требуется передавать данные через частную сеть, например между устройствами в одном доме или через подключение к корпоративной сети.

Объявление манифеста

Результат

internetClient

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

internetClientServer

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

privateNetworkClientServer

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

Удостоверение пользователя

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

Объявление манифеста

Результат

enterpriseAuthentication

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

sharedUserCertificates

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

Формирование уверенности

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

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

-- Джон Хейзен (John Hazen)