Поддержка близкого взаимодействия и касания (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Назначение

Примечание  

Близкое взаимодействие предназначено для разработчиков, которые реализуют удобное подключение к приложениям посредством касания. Таким приложением может быть многопользовательская игра, в которой два пользователя соприкасаются устройствами, чтобы организовать общий сеанс игры. Это также может быть приложение, в котором пользователь касается устройства и получает ссылку на место, где можно узнать подробности или совершить покупку. Чтобы соединение между устройствами могло быть установлено с помощью жеста касания, оба устройства должны быть оснащены устройством близкого взаимодействия, например радиомодулем NFC.

 

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

Важно  

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

 

В этом разделе

Тема Описание

Краткое руководство. Соединение приложений с помощью касания или обзора

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

Краткое руководство: публикация сообщений с помощью касания и подписка на них

С помощью близкого взаимодействия вы можете обмениваться сообщениями (публиковать их и подписываться на них) между двумя устройствами, а также записывать статические теги на устройство одним касанием. Если два устройства находятся на расстоянии 3–4 сантиметра друг от друга, модуль близкого взаимодействия уведомляет систему. В этом разделе мы расскажем, как использовать близкое взаимодействие, чтобы опубликовать сообщение или подписаться на него.

Тестирование и диагностика близкого взаимодействия в приложениях

Этот раздел содержит правила для разработчиков приложений по тестированию и диагностике близкого взаимодействия перед отправкой приложения в Магазин.

 

Для разработчиков

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

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

Примечание  

Для приложений магазина Windows Phone настройка канала связи через Wi-Fi Direct не поддерживается. Долговременный коммуникационный канал можно установить только через Bluetooth или сеть с инфраструктурой.

Близкое взаимодействие поддерживается классами среды выполнения Windows в пространстве имен Windows.Networking.Proximity. Вы можете использовать класс ProximityDevice для связи с другими устройствами, находящимися на расстоянии не более 4 сантиметров, и обмена небольшими объемами данных во время касания. Класс PeerFinder обеспечивает связь с одноранговыми приложениями и настройку длительного подключения через сокеты. Одноранговое приложение — это другой экземпляр приложения, запущенный на отдельном устройстве.

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

function id(elementId) {
    return document.getElementById(elementId);
}

WinJS.Application.onmainwindowactivated = function (e) {
    if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {

        var proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

        if (proximityDevice != null) {
            proximityDevice.addEventListener("devicearrived", 
                                             proximityDeviceArrived, false);
            proximityDevice.addEventListener("devicedeparted", 
                                             proximityDeviceDeparted, false);
        }
        else {
            id("MessageBlock").innerHTML += "Failed to initialize proximity device.<br/>";
        }

    }
}
function proximityDeviceArrived() {
    id("MessageBlock").innerHTML += "Proximate device arrived.<br/>";
}

function proximityDeviceDeparted() {
    id("MessageBlock").innerHTML += "Proximate device departed.<br/>";
}

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

Важно  

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

 

Важно  

API близкого взаимодействия не выполняют проверку подлинности. Следует избегать обмена конфиденциальными данными посредством этих API.

 

Порядок определения поддержки близкого взаимодействия

Как упоминалось ранее, на устройстве должно быть установлено устройство, реализующее интерфейс близкого взаимодействия Windows, чтобы возможность близкого взаимодействия можно было использовать. (Информацию о реализации интерфейса близкого взаимодействия Windows см. в разделе Спецификация реализации близкого взаимодействия Windows 8.) Определить, установлено ли устройство, поддерживающее близкое взаимодействие, можно, либо проверив свойство PeerFinder.SupportedDiscoveryTypes, чтобы убедиться в поддержке подключений Triggered, либо проверив, возвращает ли метод GetDefault значение NULL, либо получив список всех устройств близкого взаимодействия и убедившись, что список включает не менее одного устройства. Пример получения списка всех установленных устройств близкого взаимодействия см. в методе GetDeviceSelector.

Близкое взаимодействие включается только когда приложение работает на переднем плане.

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

Активация приложений с помощью близкого взаимодействия

При использовании PeerFinder и касания для подключения приложения к одноранговому приложению на другом устройстве Windows напомнит пользователю этого устройства о необходимости активировать приложение, если оно еще не выполняется или не находится на переднем плане. Если приложение уже работает на переднем плане, событие активации будет создано без предварительного запроса пользователя. Можно также активировать приложение, не работающее на переднем плане, вызвав перегруженную версию метода PeerFinder.Start, принимающую параметр строки. Параметр строки для метода Start содержит сообщение, отсылаемое одноранговому приложению. Приложение активируется с передачей сообщения аргументам активации.

При активации однорангового приложения жестом касания вызывается событие Activated. Kind активации является Launch. Если активировать это событие путем отправки сообщения, используя метод PeerFinder.Start, текст сообщения можно извлечь из свойства Arguments аргументов запуска. Если приложение активируется для открытия StreamSocket, то свойство Arguments возвратит строку Windows.Networking.Proximity.PeerFinder:StreamSocket. В этом случае установите свойство TriggeredConnectionStateChanged на соответствующий обработчик событий и вызовите метод PeerFinder.Start, чтобы завершить подключение к сокету.

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
            // Call PeerFinder.Start to begin multi-user mode.
        }
        else {
            // Respond to the message string in args.detail.arguments
        }

        args.setPromise(WinJS.UI.processAll());
    }
}

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

Протокол взаимодействия сокетов

Когда вы отправляете данные одноранговому приложению с помощью объекта StreamSocket, вы должны определить протокол обмена информацией. Например, вы можете использовать формат XML, пары имен-значений с разделителями и т. д. Когда класс PeerFinder создает подключение между одноранговыми приложениями с помощью сокета, он подключает приложения вне зависимости от версии приложения. В результате две различные версии приложения могут взаимодействовать друг с другом. Например, если принимающее приложение ожидает два 4-байтных значения, а более новая версия приложения отправляет данные в виде двух 8-байтных значений, то принимающее приложение столкнется с ошибкой при обработке данных. Вам следует убедиться, что более новые версии приложения могут по-прежнему взаимодействовать с более старыми версиями с помощью протокола взаимодействия. Иначе говоря, убедитесь, что более старые версии приложения могут игнорировать информацию, отправляемую более новой версией, не сталкиваясь с проблемами.

Совет  

При взаимодействии одноранговых приложений вам часто придется определять, какое приложение отправит первое сообщение, а какое приложение будет его принимать. Один из способов, которым вы можете определить, является ли ваше приложение отправителем или получателем, это сравнение streamSocket.information.localAddress.canonicalName с streamSocket.information.remoteHostName.canonicalName. Проверяя, длиннее ли имя локального узла, чем имя удаленного узла, вы всегда будете получать противоположный результат от двух экземпляров вашего приложения.

 

Связанные разделы

Краткое руководство: подключение приложений с помощью касания или просмотра

Краткое руководство. Публикация сообщений и подписка на них с помощью касания

Руководство и контрольный список для близкого взаимодействия

Тестирование и диагностика близкого взаимодействия в приложениях

Windows.Networking.Proximity namespace

Примеры.

Пример близкого взаимодействия