[Artikelserie] NFC unter Windows Phone – Teil 1: Lesen und Schreiben von Tags

NFC steht für Near Field Communication und ist ein Übertragungsstandard zum kontaktlosen Austausch von Daten über kurze Strecken von wenigen Zentimetern. Eine typische Anwendung im mobilen Bereich ist das Auslesen von NFC-Tags. Ein Tag ist ein passiver NFC-Chip, der beispielsweise in einer Visitenkarte enthalten sein kann. Dieser kann mehrere Kilobytes an Daten enthalten, die über ein NFC-fähiges Mobilgerät ausgelesen werden können.

In diesem ersten Teil der Artikelserie wird gezeigt, wie URIs zwischen einem Windows Phone und einem NFC-Tag ausgetauscht werden können. Dafür wird die in der Windows Runtime enthaltene Proximity API verwendet. Mit URIs ergeben sich bereits vielseitige Anwendungsmöglichkeiten, die nicht nur auf das Versenden von Website-Links beschränkt sind.

1. Szenarien für NFC-Tags

Es können beliebige Daten über NFC erfasst und je nach Inhaltstyp weiterverarbeitet werden. Übliche Inhalte für einen NFC-Tag sind:

  • Kontaktdaten
  • Termine
  • Links zu Websites (Firmenwebsite, Online Visitenkarten)
  • Links zu Apps im App-Store
  • Allgemeine Informationen (z.B. Objektbeschreibungen in Museen)
  • Kleinere Bilder
  • App Erweiterungen/zusätzliche Inhalte (Digitale Gegenstände in einem Spiel)

In diesem Artikel werden URIs als Inhaltstyp für die Beispiele verwendet. Durch URIs können neben einfachen Links zu Websites oder Links zu Apps im App-Store auch Apps mit bestimmten, im Tag hinterlegten Parametern gestartet werden. Die Möglichkeiten sind hierdurch sehr vielseitig und werden in Abschnitt 6 nochmal ausführlicher dargestellt.

2. Die Windows Proximity API

Die wichtigsten Klassen der Proximity API sind ProximityDevice und ProximityMessage.

ProximityDevice:

  • Kapselt die eigentliche Verbindung zur Hardware
  • Erkennt NFC Tags oder Geräte in der Nähe
  • Liest und schreibt NFC Nachrichten

ProximityMessage:

  • Kapselt die eigentliche NFC Nachricht, die empfangen oder versendet werden kann

Für die folgenden Beispiele wird ein NFC-fähiges Windows Phone benötigt. Die Proximity API wird standardmäßig nicht auf dem Windows Phone Emulator unterstützt.

3. Projekteinstellungen

Für die Verwendung von NFC ist wichtig, dass die nötigen Einstellungen im Package.appxmanifest vorgenommen werden. Hierzu muss unter dem Reiter „Funktionen“ die Option „Näherung“ ausgewählt werden. Dadurch wird der Zugriff auf das ProximityDevice möglich.

Näherung muss ausgewählt werden, damit NFC verwendet werden kann.

Die Option „Näherung“ muss ausgewählt werden, damit NFC verwendet werden kann.

Damit die App auch nur auf NFC-fähigen Geräten installiert werden kann, kann zudem unter dem Reiter „Anforderungen“ noch die Option „NFC“ ausgewählt werden.

NFC kann als Mindestanforderung für das Gerät ausgewählt werden.

NFC kann als Mindestanforderung für das Gerät festgelegt werden.

4. URI von Tag oder Gerät empfangen

Zum Empfangen von Inhalten über NFC sind drei Schritte notwendig:

1. NFC Proximity Device aktivieren

Über die statische Methode GetDefault() der oben vorgestellten Klasse ProximityDevice wird eine Instanz dieser Klasse erstellt und die NFC-Näherung aktiviert. Hierbei ist eine Überprüfung auf null notwendig, die zutrifft, falls kein entsprechendes Gerät vorhanden ist oder der Benutzer NFC deaktiviert hat.

2. Abonnieren eines Protokolls

Um Daten zu empfangen, wird über die Methode SubscribeForMessage ein beliebiges Protokoll abonniert und ein entsprechender EventHandler registriert. Falls sich ein NFC-Gerät oder Tag nähert, welcher das Protokoll bereitstellt, wird die Nachricht übertragen. In diesem Beispiel wird als Protokoll WindowsUri angegeben, welches auf alle Arten von URIs reagiert.

Als Rückgabewert wird eine eindeutig ID zurückgeliefert, die der jeweiligen Subscription zugeordnet ist. Zum Beenden der Subscription muss explizit StopSubscribingForMessage mit der jeweiligen ID aufgerufen werden:

3. Lesevorgang

Zum Lesen der Nachricht muss die ankommende ProximityMessage im ersten Schritt in ein Array konvertiert und daraufhin dekodiert werden. Hierzu wird der folgende Namespace benötigt, der die Erweiterungsmethoden bereitstellt, um aus dem ankommenden IBuffer ein Byte-Array zu erzeugen:

Der Lesevorgang erfolgt unabhängig vom UI-Thread. Dementsprechend muss der Dispatcher verwendet werden, um das Ergebnis auf der Seite auszugeben:

5. URI veröffentlichen

Um eine URI auf einen Tag zu schreiben, muss diese über das ProximityDevice mit dem entsprechenden Protokoll veröffentlicht werden. Wurde eine Nachricht über NFC ausgetauscht, kann das ProximityDevice automatisch ein Ereignis auslösen.

1. Daten vorbereiten

Im ersten Schritt werden die Daten in den benötigten Buffer konvertiert. Hierzu muss ebenfalls der Namespace System.Runtime.InteropServices.WindowsRuntime eingebunden sein.

2. Daten veröffentlichen

Die Nachricht wird mit der Methode PublishBinaryMessage bereitgestellt, die als ersten Parameter das Protokoll der bereitzustellenden Daten erwartet und als zweiten Parameter die Daten in Form eines IBuffers. Das Protokoll gibt hier in dem Fall über WindowsUri:WriteTag an, dass eine URI für einen NFC-Tag veröffentlicht werden soll. Analog zum Abonnieren von Nachrichten, wird hier auch wieder eine eindeutige ID zurückgeliefert, über die der Veröffentlichungsvorgang wieder gestoppt werden kann.

Optional kann als dritter Parameter eine Callback-Funktion angegeben werden, die aufgerufen wird, wenn die Daten auf einen Tag geschrieben worden sind.

3. Callback-Funktion

Die Callback-Funktion kann optional bei der Veröffentlichung mit angegeben werden und wird aufgerufen, wenn die Nachricht auf einen Tag geschrieben wurde. Das kann beispielsweise dazu genutzt werden, um dem Nutzer eine Rückmeldung zu geben, dass der Schreibvorgang erfolgreich war. Hierzu wird in folgendem Codeausschnitt die Klasse VibrationDevice verwendet, um eine kurze Vibration zu erzeugen.

Die Veröffentlichung der Nachricht muss explizit über StopPublishingMessage wieder beendet werden. Hierzu kann ebenfalls die Callback-Funktion verwendet werden, falls die URI nur einmal geschrieben werden soll.

6. Vielseitige Einsatzmöglichkeiten von URIs in NFC Tags

Die Einsatzmöglichkeiten von URIs sind vielseitig und nicht nur auf den Aufruf von Websites beschränkt. Durch das Erfassen eines NFC-Tags können auch Apps mit im Tag hinterlegten Parametern gestartet werden. Diese Funktion kann beispielsweise auch für folgende Bereiche nützlich sein:

  • Eintragen eines Termins in eine Kalender-App
  • Öffnen einer E-Mail-App mit bestimmten Empfänger, Betreff oder Text
  • Starten einer Navigations-App mit einem bestimmten Ziel
  • Abspielen eines Musikstücks in einer Musik-App
  • Koordinaten in Geocaching-Apps
  • Spiele, in denen digitale Inhalte freigeschaltet werden

Allgemeine Aktionen, wie ein Anruf oder das Versenden von Emails sind zudem plattformunabhängig, so dass der Tag ebenfalls unter anderen mobilen Plattformen, wie beispielsweise Android verwendet werden kann. Ein paar Beispiele für Formate der URIs für bestimmte Anwendungen sind in folgender Tabelle dargestellt:

Anruf starten tel:+49170123123
E-Mail versenden mailto:someone@example.com?subject=This%20is%20the%20subject
Geo Tag http://m.ovi.me/?c=<latitude>,<longitude>
Nokia MixRadio zu einem Suchbegriff starten nokia-music://search/anything/?term=green%20day
Nokia Drive zum angegebenen Ziel starten ms-drive-to:?destination.latitude=<latitude>&destination.longitude=<longitude>
Bluetooth-Einstellungen öffnen ms-settings-bluetooth:
Wi-Fi-Einstellungen öffnen ms-settings-wifi:
Flugzeugmodus-Einstellungen öffnen ms-settings-airplanemode:

Eine komplette Liste der URIs für Windows Phone Apps ist unter folgendem Link zu finden: http://msdn.microsoft.com/en-us/library/windows/apps/jj662937.aspx

7. Beispiel Experience

Zum Empfang von Nachrichten über NFC muss in den Einstellungen NFC (auf Windows Phone 8 Tap+Send) aktiviert werden. Daraufhin wird der NFC-Sensor aktiv geschaltet und reagiert auf Tags, die an der Rückseite des Geräts erfasst werden können. Wird eine Nachricht auf dem Windows Phone empfangen, wird folgender Dialog angezeigt, mit der Möglichkeit die Nachricht zu akzeptieren oder abzulehnen:

NFC Experience

Seit Windows Phone 8.1 besteht zudem die Möglichkeit, die Nachrichten zu einem bestimmten Protokoll (z.B. ms-settings-wifi:) automatisch zu akzeptieren. Der Dialog wird somit nicht mehr angezeigt und die Benutzererfahrung wird durchgängiger.

8. Zusammenfassung

In diesem Artikel wurde gezeigt, wie URIs über NFC gelesen und geschrieben werden können. Hierzu wurde die Klasse ProximityDevice der ProximityAPI verwendet. Für Lese- und Schreibvorgänge mit NFC wird immer ein sogenanntes Protokoll angegeben, welches den Typ der Nachrichten angibt. Im Falle der URI war das beim Lesevorgang WindowsUri und beim Schreiben WindowsUri:WriteTag. Im nächsten Artikel der Serie wird gezeigt, welche anderen Protokolle man noch verwenden kann, um Inhalte über NFC bereitzustellen und zu empfangen.

Beispielprojekt: Lesen und Schreiben von Uris auf NFC-Tags

Den gesamten Quellcode gibt es in einer Beispielanwendung bei GitHub.

Veröffentlicht in Windows Phone, Windows Runtime Getagged mit: , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*