Near Field Communications (NFC) erlaubt die Kommunikation auf kürzester Distanz zwischen zwei Endgeräten um kleinere Datenmengen auszutauschen oder andere Verbindungen auf Basis der NFC Verbindung herzustellen.

Beispiel Nokia Play 360

NFC wird bereits heute im Consumer Umfeld eingesetzt. Als Beispiel soll hier der Lautsprecher Nokia Play 360 dienen. Dieser wird mittels NFC mit einem Smartphone verbunden.

nokia-play-360-speakers

Ist die Initiale Verbindung hergestellt, so kommuniziert das Smartphone weiter über Bluetooth um seine Musik an den Lautsprecher zu streamen oder die Lautstärke anzupassen. Hier wird NFC also nur für eine Initiale Verbindung genutzt um die Einrichtung der Bluetooth Verbindung zu vereinfachen.

NFC Tags

Neben Geräten die per NFC angesprochen werden können, kann ein Smartphone auch mit einem NFC Tag kommunizieren. Ein solches Tag kann in verschiedenen Formen daherkommen: Armbänder, Schlüsselanhänger oder einfach nur als Papier Sticker.

ndef-tag

Auf ein solches Tag können unterschiedlich viele Informationen geschrieben werden, letztlich ist die Begrenzung nur anhand des verfügbaren Speicherplatzes beschränkt. Hier ist Speicher wirklich noch klein. Ich zum Beispiel habe NFC Tags mit einer Speichergröße von 168 Byte, es gibt aber auch 1k bzw. 4k Tags. Andere Größen mögen auch möglich sein, das sind die mir bekannten.

Einsatz von NFC Tags

Da die Datenmenge von solchen Tags stark begrenzt ist dienen diese häufig als Einstiegspunkt für andere Dienste. Ähnliches kennt man schon heute aus einem anderen Bereich: QR Codes. Mit QR Codes werden einfache Textinformationen dargestellt, in der Regel ist es eine URL. Anders als beim QR Code lässt sich Information auf einem NFC Tag auch verändern und neu beschreiben.

Das Equipment

Um nun mit NFC Tags kommunizieren zu können benötigt man zuerst einmal einige Dinge, ich gehe hier nun von meinem Beispiel aus

  • NFC Tags selbst
  • Windows Phone 8 mit NFC, z.B. Nokia Lumia 820
  • Visual Studio 2012

Einfach NFC Tags in die Suchmaschine seiner Wahl eingeben und einen geeigneten Shop suchen. Ich gebe hier mal keine Empfehlung, weil ich meine eigenen Tags von einem Kollegen geschenkt bekommen habe.

Um mit dem Windows Phone 8 NFC Tags anzuprogrammieren sollten diese NDEF formattiert sein. Raw Level Funktionen stellt die Windows Phone 8 API nicht zur Verfügung.

Das bringt uns gleich zu einem weiteren Problem das ich an dieser Stelle kurz erwähnen möchte. Die Tags lassen sich über die Plattform API’s nicht RAW beschreiben und damit kann man das Tag nicht schreibschützen. Wenn Ihr Szenarios habt die ein schreibgeschütztes Tag benötigen, so gibt es Händler die Tags bespielen und schreibgeschützt ausliefern. Auch hier einfach mal schauen was der einzelne an Angebote hat.

Schritt 1: Geräte und Tags erkennen

Im Namensbereich Windows.Networking.Proximity befindet sich der Einstiegspunkt um NFC Tags zu lesen, die wichtigste Klasse hierbei ist ProximityDevice. Bei dem Lumia zeigt der folgende Code NFC fähige Tags und Geräte an:

var proximityDevice = ProximityDevice.GetDefault();
proximityDevice.DeviceArrived += proximityDevice_DeviceArrived;

void proximityDevice_DeviceArrived(ProximityDevice sender)
{
if (sender != null)
{
Dispatcher.BeginInvoke(() =>
{
theOutput.Text = sender.DeviceId;
});
}
}

Für den eigentlichen Datenstrom benötigt man noch einen Eventhandler der auf ndef Nachrichten lauscht.

NDEF steht für NFC Data Exchange Format

Hier lassen sich auch Daten für andere Plattformen erstellen und so Cross-Plattform Übergreifend auch nutzen.

proximityDevice.SubscribeForMessage("ndef", handler);

private void handler(ProximityDevice sender, ProximityMessage message)
{
// hier wird die Nachricht ausgewertet
}

Die Windows Phone 8 API untertstützt URI’s. Für NDEF gibt es auf Codeplex eine Bibliothek die man mittels Nuget installieren kann.

Schritt 2: NDEF Library installieren

Die NDEF Bibliothek von Andreas Jakl erleichtert die Auswertung von NDEF Nachrichten. Einziger Wehrmutstropfen: Das Package über Nuget lässt sich nicht in Visual Studio 2012 Express für Windows Phone 8 installieren. Grund dürfte hierfür die Portable Class Library sein mit der die Funktionalität bereitgestellt wird, bei der Installation wird darauf hingewiesen.

Schritt 3: Tags lesen

Die Inhalte der Tags lassen sich nun über den eingerichteten Handler mit Hilfe der NDEF Library einfach auslesen:

private void handler(ProximityDevice sender, ProximityMessage message)
{
StringBuilder builder = new StringBuilder();
builder.AppendLine();
var rawMessage = message.Data.ToArray();
var ndefMessage = NdefMessage.FromByteArray(rawMessage);

foreach (var record in ndefMessage)
{
builder.AppendFormat("Record type " + Encoding.UTF8.GetString(record.Type, 0, record.Type.Length));
}

Dispatcher.BeginInvoke(() =>
{
theOutput.Text += builder.ToString();
});
}

Meine Tags sind mit einer URL bespielt, so bekommt man als Ergebnis Record type U zurück. Auf einem Tag können mehrere Einträge vorhanden sein. Zum Beispiel könnten für jedes Smartphone Betriebssystem einzelne Datensätze zur eigenen Anwendung abgelegt sein um diese zu starten, um Features zu nutzen die für die jeweilige Plattform einzigartig sind.

Schritt 4: Inhalte schreiben

Die Inhalte werden anhand von einzelnen Datensätzen geschrieben. Ein Datensatz umfasst in der Regel das Protokoll das genutzt wird, z.B. tel für das Telefon, smsfür eine SMS, etc… Zum anderen können zusätzliche Informationen in einen solchen Datensatz gepackt werden um den Konsumenten des Tags anzuzeigen was passieren wird wenn er die Aktion des Tags annimmt.

Einen Telefonanruf kann man auf einen Tag folgendermaßen schreiben:

var phoneRecord = new NdefTelRecord();
phoneRecord.TelNumber = "0123456789";
phoneRecord.NfcAction = NdefSpActRecord.NfcActionType.DoAction;

var message = new NdefMessage
{
phoneRecord
};

proximityDevice.PublishBinaryMessage("NDEF:WriteTag", message.ToByteArray().AsBuffer());

Integration in eigene Szenarien

Das ist im Prinzip schon alles um auf Tags Informationen zu schreiben und zu lesen. Durch die NFC Technik werden manche Szenarien ermöglicht die bisher einen höheren technischen Aufwand bedeutet haben. Von Exponaten in Museen die mit NFC Tags angereichert sind um Textinformationen auf das Smartphone des Besuchers in seiner Sprache wiederzugeben, bis hin zu Spielen die reale Orte mit virtuellen Welten über NFC Tags verknüpfen können oder Kassensystemen die per NFC den Bezahlvorgang initiieren. Letztlich liegt es an den Szenarien ob sich eine Technologie verbreitet, NFC hat auf jeden Fall das Potential dazu.