Опубликован: 15.05.2013 | Доступ: свободный | Студентов: 264 / 9 | Длительность: 24:25:00
Специальности: Системный архитектор
Лекция 11:

NFC и API бесконтактного взаимодействия

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Аннотация: Здесь рассматриваются методики работы с API бесконтактного взаимодействия.

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

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

Технология Near Field Communication (NFC) – это один из ключевых способов, с помощью которых приложения могут подключаться к устройствам и взаимодействовать, исполняясь на разных устройствах. NFC работает с электромагнитными датчиками (включая RFID-метки, которые не имеют автономного питания), которые входят друг с другом в резонанс, находясь рядом, в пределах 3-4 сантиметров. Практически говоря, это означает, что устройства физически контактируют друг с другом, что позволяет эффективно инициировать цифровое рукопожатие, установление соединения, начинающее процесс обмена данными. Когда это происходит между двумя копиями приложения, исполняющимися на разных устройствах, этот процесс известен как образование пар, соединение (pairing), в итоге, у приложений появляется возможность вести непрерывный обмен данными.

Думая в этой связи об "устройствах", учтите, что они могут очень сильно различаться. Таким образом, устройства, которые устанавливают соединение, не должны быть одинаковыми. Одно устройство может быть, например, вашим планшетным компьютером, а другое – чем-то от большого, включающего в себя массу функций дисплея ПК, до простой RFID-метки, вмонтированной в плакат или в бейдж с именем.

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

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

Существуют три основных условия для использования возможностей бесконтактного взаимодействия (смотрите материал "Руководство по разработке с использованием бесконтактного взаимодействия" (http://msdn.microsoft.com/library/windows/apps/hh465215.aspx)):

  • Приложение должно объявить возможность Бесконтактное взаимодействие (Proximity) в манифесте.

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

API для работы с бесконтактного взаимодействия находятся в пространстве имен Windows.Networking.Proximity ( http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.aspx), как в примере "Бесконтактное взаимодействие" (http://code.msdn.microsoft.com/windowsapps/Proximity-Sample-88129731), с которым мы будем здесь работать. Понятно, что разработка для бесконтактного взаимодействия требует наличия двух компьютеров, оборудованных соответствующим образом (если только вы не работаете только с RFID-метками). Для NFC-соединения между двумя устройствами имеется пример драйвера в Windows Driver Kit, который имитирует NFC-соединение, используя обычное сетевое соединение. Для того, чтобы его использовать, учтите, что вам так же понадобится Visual Studio 2012 Ultimate Edition; Express-версия не поддерживает разработку драйверов. Больше смысла будет в том, чтобы просто приобрести несколько планшетных компьютеров, поддерживающих NFC.

В любом случае, для установки Windows Driver Kit, следуйте инструкциям о том, как это сделать (http://msdn.microsoft.com/en-US/windows/hardware/gg487428) после установки Visual Studio 2012 Ultimate. Когда вы начнете загрузку, не пугайтесь указанного размера в 1 Гб. Запустите установщик (его размер 937 Кб), и затем выберите опцию для получения набора для использования на другом компьютере (что, на самом деле, приводит к загрузке 307 Мб). Затем, следуя странице описания примера бесконтактного взаимодействия:

После того, как вы установите WDK и примеры, вы можете найти пример реализации драйвера бесконтактного взаимодействия в папке src\nfp там, куда вы установили примеры WDK. Просмотрите файл NetNfpProvider.html в папке src\nfp\net для того, чтобы найти инструкции по построению и запуску имитатора. [Примечание: не забудьте задать целью построения Windows 8]. После запуска имитатора, он выполняется в фоновом режиме, пока ваше приложение для работы с бесконтактным взаимодействием исполняется на переднем плане. Ваше приложение должно работать на переднем плане для того, чтобы имитация касания устройств могла работать.

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

Поиск одноранговых приложений

Для реализации поиска одноранговых приложений, приложение на одном из компьютеров может объявить о своей доступности, таким образом, приложения на других устройствах могут обнаружить экземпляры приложения, заявившие о себе и инициировать подключение через WiFi Direct или Bluetooth. Второй способ поиска заключается в использовании касания NFC. Оба метода показаны в Сценарии 1 примера "Бесконтактное взаимодействие" (http://code.msdn.microsoft.com/windowsapps/Proximity-Sample-88129731), но три различные функции: объявление, поиск и касание для соединения перемешаны, так как каждая из них использует и отдельные части класса Windows.Networking.Proximity.PeerFinder (http://msdn.microsoft.com/library/windows/apps/windows.networking.proximity.peerfinder.aspx), и, в то же время, некоторые общие для всех части.

В частности, общее у них статическое свойство PeerFinder.supportedDiscoveryTypes, которое указывает на то, как может быть выполнено подключение. Оно содержит комбинацию значений из перечисления PeerDiscoveryTypes и зависит от доступного на устройстве аппаратного обеспечения. Это следующие значения: browse (доступен WiFi Direct), triggered (доступно касание NFC), и none (нет возможности пользоваться PeerFinder). Вы можете использовать эти значения для выборочного включения или выключения определенных возможностей приложения. Сценарий 1 примера о бесконтактном взаимодействии, например, проверяет доступные типы подключения для установки некоторых флагов и включения кнопок для работы с NFC. В противном случае он просто показывает разочарующие сообщения (код взят из js/PeerFinder.js, и обратите внимание на переменную для пространства имен в верхней части):

    var ProxNS = Windows.Networking.Proximity;

    var supportedDiscoveryTypes = ProxNS.PeerFinder.supportedDiscoveryTypes;

    // Активировать интерфейс, предназначенный для реализации NFC-касаний при наличии поддержки аппаратного обеспечения
    if (supportedDiscoveryTypes pg ProxNS.PeerDiscoveryTypes.triggered) {
    triggeredConnectSupported = true;
    } else {
    peerFinderErrorMsg = "Tap based discovery of peers not supported \n";
    }

    // Активировать кнопки, связанные с просмотром только при наличии поддержки соответтсвующего аппаратного обеспечения
    if (supportedDiscoveryTypes pg ProxNS.PeerDiscoveryTypes.browse) {
      browseConnectSupported = true;
      // [Добавить прослушиватели к кнопкам, опущено]
      } else {
      // [Покаать сообщения, опущено]
      }

      if (triggeredConnectSupported || browseConnectSupported) {
      // [Настроить дополнительный пользовательский интерфейс]
      }

      // ...
      }

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

< Лекция 10 || Лекция 11: 123 || Лекция 12 >