Предоставление контента в общий доступ целевому приложению
В статье Предоставление контента в общий доступ из приложения мы описали, как делиться контентом из приложения Ужин с друзьями с несколькими целевым приложениям, позволяющими реализовать эффективные комплексные сценарии. Приложения в Windows 8 предоставляют интересный контент, которым ваши клиенты захотят поделиться с друзьями или другими приложениями. Благодаря удобному и правильно спроектированному получателю данных ваше приложение может стать центром социального и сетевого взаимодействия для ваших клиентов.
В данной статье мы рассмотрим, как вы можете использовать контракт получателя данных для своих приложений, особенно тех, которые похожи на "Ужин с друзьями". С помощью данного контракта ваше приложение может принимать контент из других приложений и использовать его для улучшения своей работы. Мы хотим помочь вам добиться того, чтобы ваше приложение стало лучшим в своей категории!
Целевое приложение создается с использованием контракта получателя данных и предназначено для ускорения и упрощения процедуры общего доступа. Не каждое приложение в Windows будет получателем данных, но если ваше приложение может публиковать, преобразовывать, хранить получаемый из другого приложения контент или каким-либо образом повышать его ценность, следует задуматься о тех преимуществах, которые дает создание получателя данных.
- Ваше приложение всегда будет отображаться в списке целевых приложений. Оно всегда актуально и находится на связи с другими приложениями, которые могут предоставлять необходимые вам данные.
- Контракт отправки данных создает связь между вашим приложением и исходным приложением без необходимости их взаимной интеграции.
- Поскольку чудо-кнопка "Общий доступ" всегда присутствует и доступна в операционной системе, она обеспечивает целевому приложению представление в операционной системе, выходящее за рамки самого приложения. Все это может привлечь к вашему приложению еще больше клиентов!
Получение общего контента
Давайте рассмотрим несколько примеров того, как обеспечить удобную работу с помощью целевого приложения для обмена данными.
Возможно, вы уже знакомы с приложениями "Почта" и "Люди" в Windows 8. Приложение "Почта" предлагает простой персонализированный интерфейс получателя данных для приема контента и его совместного использованиями с одним или несколькими друзьями. Приложение "Люди" позволяет вам предоставлять контент для общего доступа более широкому кругу пользователей в социальных сетях. Вы можете не только делиться контентом с другими людьми, но и воспользоваться обменом данными между приложениями. Приложения, предназначенные для повышения производительности труда, такие как SkyDrive, могут принимать файлы из любого источника в операционной системе Windows и сохранять их в облаке; приложения для ведения заметок могут принимать текст, ссылки и, возможно, данные в разных форматах и архивировать их для использования в дальнейшем. Все этого открывает широкие возможности и простор для творчества.
На следующих двух рисунках показан процесс обмена данными, где фотография из приложения "Фотографии" передается в PuzzleTouch — игру, превращающую изображение в мозаичную головоломку.
Рисунок 1. Исходное приложение слева; список отфильтрованных целевых приложений, которые могут принять фотографии, на панели общего доступа справа.
Приложение PuzzleTouch является одним из получателей данных, которые могут принять изображение из приложения "Фотографии".
Рисунок 2. Расположенное справа целевое призрачное приложение позволяет пользователю выбрать тип
создаваемой головоломки. Когда пользователь возвращается в приложение, он получает готовую головоломку.
Что такое целевое приложение для обмена данными?
Возможности "сквозного" общего доступа в Windows состоят из двух компонентов. Есть исходное приложение, делающее свой контент доступным в различных форматах операционной системе Windows. Кроме того, есть также целевое приложение для обмена данными, которое регистрируется для распознавания определенных форматов и является получателем контента, предоставляемого в общий доступ. Контракт отправки данных обеспечивает взаимодействие приложений, являющихся источником и получателем данных.
Когда вы обдумываете организацию общего доступа в своем приложении, рассмотрите возможность отображения целевого приложения для обмена данными в размещаемом окне общего доступа. Спроектируйте интерфейс таким образом, чтобы пользователь мог быстро просмотреть свой контент и подтвердить общий доступ. В данном примере приведено представление целевого приложения для обмена данными "Почта", позволяющее пользователю быстро передать ссылку из браузера одному из своих почтовых контактов.
Рисунок 3. Передача ссылки из приложения "Фотографии" с использованием приложения "Почта" в качестве получателя данных
Сценарии для приложения "Ужин с друзьями"
А теперь давайте рассмотрим, благодаря чему приложение Ужин с друзьями удобно использовать в качестве целевого приложения для обмена данными. Если вы уже знакомы с этим приложением, то знаете, что пользователь может выполнить в нем две основные задачи — создание плана и добавление ресторана в свой список предпочтений. Конечно, доступны и другие действия, такие как написание обзора, публикация комментария, просмотр списков предпочтений своих друзей и тому подобное, но эти операции имеют смысл только в контексте основного приложения. Давайте проведем для этих двух основных сценариев быструю проверку работоспособности, чтобы узнать, обеспечивается ли их эффективное выполнение с использованием целевого приложения "Ужин с друзьями".
Создание плана на вечер
Хотя эта задача и является ключевым сценарием основного приложения, она не является оптимальной для использования получателя данных. И вот почему: работа с получателем данных должна осуществляться легко и быстро. Создание плана представляет собой значительно более комплексную задачу — пользователь хочет узнать, какие другие рестораны хотели бы посетить его друзья, сравнить несколько ресторанов из их списка предпочтений, просмотреть оценки и т. д. Поскольку для планирования требуется использовать сведения, оптимальным образом представленные в окне основного приложения, внедрение данной функциональной возможности в целевое приложение для обмена данными нельзя назвать привлекательным решением.
Добавление в список предпочтений
Этот сценарий является хорошим примером короткой и целенаправленной задачи в получателе данных. Вот некоторые особенности его реализации в этом приложении:
- Люди находят рестораны в других приложениях, например в приложениях для планирования поездок, путеводителях по городу, кулинарных блогах и т. д. Приложение "Ужин с друзьями" отлично подходит для получения контента и вывода сводных сведений о ресторанах в разделе "Мои пожелания".
- Представление целевого приложения предназначено для того, чтобы пользователь мог быстро выполнить действие, находясь в контексте другого приложения. Таким образом, добавление ресторана в список предпочтений отлично подходит для использования в получателе данных.
- Хотя пользователь может переключиться на другое приложение, повторить поиск ресторана и добавить найденный ресторан в свой список предпочтений, значительно проще коснуться чудо-кнопки "Общий доступ".
Получается, что список предпочтений в приложении "Ужин с друзьями" отлично подходит для проектирования и создания целевого приложения для обмена данными. Вот комплексный сценарий того, что мы хотим сделать:
Просматривая приложение, показывающее местные кафе-фургоны, я нахожу кафе-фургон с хорошими рекомендациями. Я хочу добавить этот кафе-фургон из текущего приложения в раздел "Мои предпочтения" приложения "Ужин с друзьями" для последующего использования при планировании.
Рисунок 4. Просмотр приложения, показывающего местные кафе-фургоны и рекомендующего интересные места для посещения
На этом изображении приведено представление целевого приложения для обмена данными, которое мы хотим использовать:
Рисунок 5. Представление целевого приложения для обмена данными
Осуществляя обмен данными в представлении целевого приложения, пользователи могут управлять ресторанами в приложении "Ужин с друзьями" без выхода из контекста текущего иммерсивного приложения.
Реализация получателя данных
Теперь, когда мы познакомились с несколькими ситуациями, в которых стоит реализовать получатель данных, давайте рассмотрим, как это можно сделать. Во-первых, определите, данные в каких форматах может принимать ваше приложение.
Какие форматы данных следует поддерживать?
С помощью контракта отправки данных вы можете реализовать поддержку данных в стандартных форматах (текст, URI, HTML, растровое изображение, файлы и т. п.), а также в пользовательских форматах данных, приведенных на сайте https://schema.org . Операционная система Windows отбирает целевые приложения по поддерживаемым ими форматам данных, чтобы отобразить отфильтрованный список целевых приложений на панели общего доступа. Ваше приложение должно поддерживать те форматы данных, которые нужны при работе с ним. Например, если ваше приложение посвящено просмотру фотографий, поддержка текстовых форматов может оказаться лишней. Если вы объявляете поддержку нескольких форматов данных, определите, какой из них позволяет наилучшим образом представить данные, предоставляемые в общий доступ, чтобы вы могли выбрать этот формат из пакета данных первым.
Поскольку приложение "Ужин с друзьями" реализует режим получателя данных, позволяющий пользователям отправлять в это приложение данные о ресторанах, мы воспользуемся форматом данных Restaurant, приведенным на сайте https://schema.org. Приложение "Ужин с друзьями" может воспользоваться контрактом получателя данных, чтобы зарегистрироваться для получения данных в этом формате. Затем, используя данные из полученного пакета, оно может обеспечить удобный опыт работы в своем представлении целевого приложения, позволяющем пользователю добавить ресторан в свой список предпочтений.
В то время как некоторые исходные приложения могут специально использовать формат данных Restaurant для предоставления контента в общий доступ, другие исходные приложения могут представлять аналогичную информацию в других форматах, таких как Place, LocalBusiness и FoodEstablishment, приведенных на сайте schema.org. Таким образом, в контракте отправки данных приложение "Ужин с друзьями" может поддерживать прием данных в нескольких форматах, чтобы охватить больше исходных приложений.
Приложение "Ужин с друзьями" поддерживает следующие форматы в объявлениях получателя данных в манифесте приложения:
Для краткости в этой статье мы уделяем основное внимание типу данных Restaurant, однако изложенные здесь понятия применимы и к другим типам данных.
Какие форматы данных и сценарии следует исключить?
Приложение "Ужин с друзьями" поддерживает добавление ресторана в список предпочтений пользователя только в том случае, когда полученная информация соответствует ресторану, о котором приложению уже известно. Это сделано намеренно для предотвращения дублирования ресторанов в приложении.
Мы не поддерживаем стандартные типы данных, так как большая часть текста, файлов, фотографий, URI или HTML, предоставляемых для общего доступа из исходных приложений, не будет сопоставлена с каким-либо рестораном или местным предприятием. Например, если бы приложение "Ужин с друзьями" поддерживало прием текста, оно бы отображалось в списке целевых приложений для исходного приложения, посвященного ведению заметок. В этом случае приложению "Ужин с друзьями" потребовалось бы отобразить сообщение об ошибке, информирующее пользователя о том, почему оно не работает с данным исходным приложением. По сути, именно форматы данных соединяют исходное приложение, предлагающее определенную информацию, с целевым приложением. Если форматы данных не совпадают, обмен данными не происходит.
Убедитесь, что вы учли все форматы данных, необходимые для работы с приложением, и исключили те форматы, которые ухудшают опыт обмена данными.
Поддержка контракта получателя данных
Чтобы обеспечить поддержку форматов данных, объявите их для своего приложения в конструкторе манифестов Visual Studio. Вот что происходит, когда пользователь выбирает ваше приложение в качестве целевого для операций общего доступа:
- В окне получателя данных поверх исходного приложения запускается новый экземпляр приложения.
- Возникает событие активации получателя данных, и в результате ваше приложение получает объект ShareOperation.
- Ваше приложение может извлечь данные, предоставленные пользователем для общего доступа, из этого объекта.
- Эти данные можно использовать для отображения представления целевого приложения и завершения процедуры обмена данными.
Подробнее о реализации такого взаимодействия с пользователем рассказано в кратком руководстве, посвященном получению общего контента.
Кроме того, Visual Studio поддерживает шаблон для получателей данных. Щелкните свой проект правой кнопкой мыши, выберите пункт Добавить элемент, щелкните Добавить новый элемент и выберите элемент Контракт получателя данных в списке, чтобы добавить код для поддержки данного контракта. В примере кода для получателя данных показано, как именно следует принимать контент, предоставленный в общий доступ.
Разработка настроенного представления целевого приложения
Когда пользователь выбирает целевое приложение в списке на панели общего доступа, Windows запускает это приложение в представлении получателя данных. Это специальное представление, размещаемое на панели общего доступа и отличающееся от основного представления приложения. Подробнее о таких встроенных представлениях и их активации рассказано в статье Активация контрактов Windows 8 в вашем приложении. Представление получателя данных помогает выполнить инициированную пользователем операцию предоставления данных в общий доступ. В этом представлении пользователи должны иметь возможность быстро просмотреть контент, выполнить простые действия и подтвердить обмен данными.
Прежде чем рассмотреть структуру целевого приложения для приложения "Ужин с друзьями", давайте обратимся к целевому приложению, с которым вы, возможно, уже знакомы. На следующих изображениях показано представление получателя данных для приложения "Почта" и полное представление того же приложения вWindows 8.
Рисунок 6. Передача данных из приложения "Фотографии" в целевое приложение "Почта" справа
Рисунок 7. Составление нового сообщения в представлении основного приложения "Почта"
Обратите внимание на то, что представление получателя данных у приложения "Почта" проще его полного представления. Оно обеспечивает понятное и легко воспринимаемое представление контента, которым пользователь собирается поделиться, в виде эскиза и соответствующего текста и HTML-кода. В нем есть строка Кому для добавления получателей, область для ввода короткого текстового сообщения и простое средство подтверждения отправки в виде кнопки Отправить.
Несмотря на упрощенный внешний вид, в представлении получателя данных легко узнать внешний вид приложения "Почта", что укрепляет уверенность пользователя в том, что общий контент будет отправлен по назначению.
Использование приложения "Ужин с друзьями" в качестве целевого приложения для обмена данными
Теперь, когда у вас сложилось общее представление о структуре представления целевого приложения, давайте рассмотрим, как создать такое представление приложения "Ужин с друзьями", которое помогает пользователям добавлять рестораны в список предпочтений.
Когда приложение "Ужин с друзьями" получает пакет с данными в формате Restaurant из исходного приложения, оно может использовать сведения из формата Restaurant, чтобы определить, какой ресторан из имеющейся базы данных соответствует полученному пакету данных. Затем приложение может осуществить предварительный просмотр этого ресторана в представлении получателя данных. Это позволяет убедиться в целостности контента, предлагаемого для общего доступа.
На этом изображении приведено представление получателя данных для приложения "Ужин с друзьями":
Рисунок 8. Представление получателя данных для приложения "Ужин с друзьями"
Как вы сами можете убедиться, это простое представление приложения "Ужин с друзьями", созданное специально, чтобы делиться, для целевого приложения. Оно обеспечивает предварительный просмотр информации о ресторане, которой пользователь собирается поделиться, и содержит простую кнопку Добавить в список предпочтений, поясняющую, где в основном приложении будет использоваться общий контент. Когда пользователь нажимает эту кнопку или касается ее, он подтверждает операцию предоставления в общий доступ. Предусмотрев обязательное участие пользователя, мы помогаем предотвратить случайную отправку данных и повышаем надежность всего процесса предоставления контента в общий доступ.
Если приложение "Ужин с друзьями" находит несколько ресторанов, соответствующих информации из пакета данных, оно использует представление получателя данных для отображения вариантов, чтобы пользователь мог выбрать один из них.
Рисунок 9. В представлении получателя данных отображаются варианты, чтобы пользователи могли выбрать элементы, которыми надо поделиться
Если на основании полученного пакета данных приложение не может точно определить ресторан или допустимый набор вариантов, используйте представление целевого приложения для отображения соответствующего сообщения.
Создание объекта QuickLink
QuickLink — это реализация API-интерфейса Share, позволяющая быстро делиться контентом с известными адресатами в целевом приложении. QuickLink выступает в качестве настраиваемой ссылки на целевое представление, предлагая выполнение определенных действий. Когда Windows выполняет фильтрацию списка доступных пользователю целевых приложений, список объектов QuickLink отображается в верхней части панели общего доступа в качестве списка доступных назначений. Эти известные адресаты или пользовательские действия могут включать в себя места или людей, с которыми часто осуществляется обмен данными посредством этого целевого приложения. Например, приложение "Почта" возвращает объекты QuickLink для контактов, которым ранее уже отправлялись сообщения. Аналогичным образом вы можете добавить объекты QuickLink для папок, групп, записных книжек и списков воспроизведения, которые вы часто отправляете для общего доступа в целевое приложение.
Рисунок 10. На панели общего доступа показан объект QuickLink, предоставленный целевым приложением "Почта" для контактов,
которым уже отправлялись сообщения с помощью этого целевого приложения
Целевое приложение может предоставить объект QuickLink, вызвав метод reportCompletedобъекта ShareOperation. Объект QuickLink должен иметь заголовок, значок и идентификатор. Заголовок (например, "Сообщение для мамы") и значок отображаются, когда пользователь касается чудо-кнопки "Общий доступ". Идентификатор используется приложением для доступа к любой пользовательской информации, например адресу электронной почты, расположению папки и т. п. Подробнее об этом средстве рассказано в статье, посвященной созданию объекта QuickLink.
Примечание. Объекты QuickLink удобно использовать, когда приложение поддерживает выполнение нескольких действий из получателя данных. Поскольку приложение "Ужин с друзьями" поддерживает в получателе данных только одно действие — Добавить в список предпочтений, объекты QuickLink в нем не используются.
Расширенный обмен данными и отчеты об ошибках
Иногда исходные приложения отправляют в общий доступ большие блоки данных, например фотографии, видео или файлы, что приводит к затягиванию передачи данных. Операции общего доступа такого типа называются расширенным обменом данными, при котором целевому приложению может потребоваться больше времени на прием и обработку данных.
Поскольку делиться информацией необходимо быстро и плавно, а представление получателя данных с упрощенной структурой размещается поверх основного приложения, пользователи могут вернуться в основное приложение из представления получателя данных. Поэтому целевые приложения не должны зависеть от выполнения пользователем действий в представлении получателя данных после начала процесса обмена данными или ожидать выполнения таких действий. Целевые приложения могут использовать объект ShareOperation и его методы, чтобы уведомить Windows о том, что приложение обрабатывает данные.
- reportStarted — вызовите этот метод, чтобы уведомить Windows о том, что приложение начало извлекать данные из объекта DataPackage исходного приложения.
- reportDataRetrieved — вызовите этот метод, чтобы уведомить Windows о том, что приложение закончило делиться данными.
- reportCompleted — вызовите этот метод, чтобы уведомить Windows о том, что приложение закончило операцию общего доступа.
Когда ваше приложение обрабатывает данные для расширенного обмена, выведите в представлении получателя данных индикатор хода выполнения. Он показывает пользователю, что его запрос принят, и позволяет отслеживать ход выполнения операции по предоставлению данных в общий доступ. Подробнее элементы управления ходом выполнения в Windows 8 рассматриваются в кратком руководстве по добавлению элементов управления ходом выполнения.
Рисунок 11. Представление получателя данных приложения "Почта" показывает индикатор хода выполнения расширенного обмена данными, например при отправке больших вложений
Если во время передачи данных возникают проблемы и целевому приложению приходится завершить операцию общего доступа, вы можете вызвать reportError, чтобы отправить сообщение об ошибке операционной системе Windows. Пользователь увидит это сообщение при проверке состояния операции обмена данными на панели общего доступа. После регистрации ошибки приложение закрывается, а операция обмена данными завершается. Для отправки контента в ваше приложение пользователю потребуется начать процедуру с начала.
Если в примере с получателем данных "Ужин с друзьями" приложению не удается найти в своей базе данных ресторан, соответствующий предоставленному в общий доступ из исходного приложения в формате Restaurant, приложение должно сообщить об ошибке.
Подведем итоги!
Совместное использование контента приложениями открывает широкие возможности для приложений, являющихся получателями данных. Если ваше приложение может принимать общий контент, оно приносит пользу даже тогда, когда пользователи заняты совершенно другим делом. Мы надеемся, что теперь вы лучше понимаете принципы проектирования, а также типы данных, классы и свойства, которые можно использовать для создания отличного получателя данных. Мы будем с радостью наблюдать, как ваши приложения будут преобразовывать общий контент и предоставлять пользователям более широкие и интересные возможности.
Если вы хотите больше узнать об общем доступе, ознакомьтесь со статьей об общем доступе к данным и обмене данными и примером целевого приложения для обмена контентом, которые помогут вам на начальном этапе.
Ишита Капур (Ishita Kapur)
Руководитель программы
Рабочая группа по взаимодействию с пользователями Windows