Entwickeln moderner Apps mit NFC

Entwicklerblog für Windows 8-Apps

Ein Einblick in die Entwicklung von Apps im Metro-Stil – präsentiert vom Windows 8-Entwicklerteam

Entwickeln moderner Apps mit NFC

Rate This
  • Comments 0

Nahfeldkommunikation (Near Field Communication, NFC) ist eine neue, immer häufiger verwendete Drahtlostechnologie mit kurzer Reichweite. Innerhalb einer Entfernung von genau 2 cm können Geräte von Benutzern physisch aneinander gekoppelt werden, um Inhalte zu senden bzw. zu empfangen. Kopplung bietet Ihnen die Möglichkeit, schnell etwas (oder jemanden) auswählen. Kopplung ist nicht nur schnell, es ist auch unkompliziert. Sobald Sie es einmal gesehen haben, haben Sie es verstanden – ganz ohne Handbuch.

Stellen Sie sich beispielsweise vor, Sie zeigen einer Freundin ein paar Fotos und sie möchte diese Bilder haben – mit NFC müssen Sie lediglich Ihr Gerät mit dem Computer Ihrer Freundin koppeln und können dann die Fotos versenden. So einfach ist das? Im Prinzip schon. NFC dient dazu, Inhalte schnell und einfach zwischen Geräten zu teilen.

'Nokia 360° Lautsprecher teilt seine Bluetooth-Kopplungsdaten mit einem Windows Phone

Abbildung 1: Nokia 360° Lautsprecher teilt seine Bluetooth-
Kopplungsdaten mit einem Windows Phone

Bei NFC handelt es sich ähnlich wie bei Bluetooth oder WLAN um ein Standard-Drahtlosprotokoll, das vom NFC-Forum definiert wird. Ihr Computer muss über ein NFC-Radio verfügen. In zahlreichen Windows 8-PCs sind NFC-Radios bereits direkt integriert. Wenn Ihr PC noch nicht über NFC verfügt, können Sie NFC-Dongles erwerben, um diese am PC anzuschließen.

NFC bietet einige tolle Funktionen. Benutzer können Ihr Gerät mit anderen Geräten koppeln und Fotos versenden, mit einer Speisekarte koppeln und ein Essen in einem Restaurant bestellen oder sogar mit einem Bluetooth-Gerät koppeln. Die Verwendungsmöglichkeiten sind also vielfältig, aber in allen Fällen müssen zunächst Ihr Gerät und der Empfänger aneinander gekoppelt werden, auch „Tappen“ genannt. NFC macht das Verbinden von vielen unterschiedlichen Geräten – PCs, SmartPhones, Lautsprecher, Headsets, Drahtlosbildschirme – intuitiver und damit benutzerfreundlicher. Bei NFC kommen außerdem auch RFID-Tags zum Einsatz, sehr kostengünstige, leichtgewichtige passive Antennen, die eine beträchtliche Menge an Daten speichern und so gut wie überall befestigt werden können, am häufigsten auf Plakaten. Zum Beispiel könnten Sie eine Kinokarte erwerben, indem Sie einfach Ihr Gerät mit dem Filmplakat koppeln. Diese werden als NFC-Tags bezeichnet. Wir erläutern ein einfaches Beispiel einer Kopplung mit einem NFC-Tag, um einige grundlegende Konzepte der NFC-API zu demonstrieren.

Aber werfen wir zunächst einmal einen Blick darauf, was das Koppeln von Geräten eigentlich bedeutet.

Definieren einer Kopplung

Ob Sie Ihr Gerät mit einer Bluetooth-Maus koppeln oder mit einem anderen Gerät, um Fotos zu teilen: Für den Benutzer zählt, dass Geräte auf die gleiche Weise gekoppelt werden. Das „Tappen“, also das Koppeln eines PC mit einem anderen Gerät, ist für die meisten Benutzer neu und deshalb ungewohnt. Im Folgenden finden Sie einige Richtlinien für das Koppeln, mit deren Hilfe Benutzer informiert werden:

  1. Wo müssen die Geräte gekoppelt werden – Verwenden Sie einen Berührungspunkt (auch als „Koppeln und Aktion“-Logo bekannt), der anzeigt, wo sich die NFC-Antenne befindet. Je nach PC-Modell erfolgt die Kopplung an einer unterschiedlichen Stelle des PCs. Beispielsweise erfolgt möglicherweise die Kopplung bei einem Tablet an der Rückseite, bei einem All-in-One jedoch an der Vorderseite. Im Folgenden ist das Logo abgebildet, das sich auf allen Windows 8-PCs mit vorhandenem NFC befindet:
    „Koppeln und Aktion“-Logo

    Abbildung 2: „Koppeln und Aktion“-Logo

  2. Geräte kommunizieren miteinander – Während der Kopplung sollten die Benutzer darauf vertrauen können, dass tatsächlich etwas passiert, auch wenn Sie die Datenübertragung selbst nicht sehen. Deshalb wird von Windows ein Sound wiedergegeben, wenn sich Geräte innerhalb der Reichweite befinden und miteinander kommunizieren.

All das wird von Windows automatisch ausgeführt, sodass Sie sich darum keine Gedanken machen müssen. Weitere Informationen zu diesen Elementen der Benutzerfreundlichkeit finden Sie unter Windows 8 Near Field Proximity Implementation Specification. Sehen wir uns nun in Anbetracht dessen einige tollen Szenarien an, die Sie mit NFC erleben können.

Wann sollte NFC verwendet werden?

Verwenden Sie NFC, wenn in Ihrer App ein Benutzer etwas bzw. jemanden auswählen soll. NFC bietet eine intuitive Art und Weise des Auswählens, die häufig schneller (und interessanter) als die manuelle Suche ist. Durch die Kopplung wird ein Vorgang ausgelöst. Je nach App kann dies bedeuten, dass z. B. ein Foto empfangen oder eine Wiedergabeliste gestartet wird. Es gibt viele Möglichkeiten. Was nach der Kopplung passiert, hängt ganz von Ihrer App ab. Deshalb bezeichnen wir diese Vorgänge der Einfachheit halber als „Koppeln und Aktion“-Vorgänge.

Im Folgenden finden Sie ein paar Beispiele, um etwas mithilfe von NFC in einer App auszuwählen. Folgende Funktionen können mit Koppeln ausgeführt werden:

  • Abrufen von Informationen von einem Plakat: NFC-Tags sind leichte, kostengünstige RFID-Tags. Ihre Kosten liegen zwischen 0,15 und 1,00 US-Dollar (Preis abhängig von den Druckkosten). Sie sind vergleichbar mit QR-Codes, jedoch einfacher und schneller zu verwenden. Es ist bequemer, sich an ein Tag zu koppeln, als ein Foto des Barcodes aufzunehmen (und darauf zu hoffen, dass sich die Kamera im richtigen Winkel befunden hat). In Bereichen mit hoher Verkehrsdichte, z. B. Flughäfen, U-Bahn-Stationen und Bushaltestellen, integrieren immer mehr Hersteller Tags in Plakate. Tags können 48 B bis 4 KB an Daten speichern. Sie können einen Tag so programmieren, dass Ihre App mit einer bestimmten Seite gestartet wird.
  • Austauschen von Kontaktinformationen: Koppeln Sie Geräte zum Austauschen von Kontaktinformationen, anstatt sie einem Freund zu buchstabieren und zu hoffen, dass er sich an keiner Stelle verschreibt. Ähnlich wie oben können Sie Ihre Informationen in eine NFC-Visitenkarte bzw. in einen NFC-Tag programmieren oder sie direkt über eine App austauschen.
  • Wiedergeben der Lieblingsmusikstation: Ganz gleich, ob Sie gerade mit dem Training anfangen, ins Auto steigen oder sich einfach nur zu Hause entspannen – verwenden Sie einen NFC-Tag, um einen Radiosender einzuschalten. Sie können sich sogar verschiedene Musiksender für verschiedene Tags programmieren, beispielsweise jeweils einen Tag für das Fitnesscenter, einen zum Entspannen und einen für die Schlafenszeit.
  • Aufgeben von Bestellungen in einem gut besuchten Restaurant: In beliebten Restaurants müssen Sie manchmal bereits für das Aufgeben der Bestellung lange warten. Koppeln Sie stattdessen Ihr Gerät an einen Tag auf Ihrem Tisch, um das Essen zu bestellen.
  • Spielen eines Multiplayer-Spiels mit einem Freund: Sie können problemlos Multiplayer-Spiele wie Schiffe versenken, Schach oder Scrabble mit einem Freund verbinden, indem Sie die Geräte aneinander koppeln. Nach dem Koppeln wird die Verbindung über einen Out-of-Band-Transport mit einer größeren Reichweite und einem größeren Durchsatz beibehalten, beispielsweise über Bluetooth oder Wi-Fi Direct.

Wir haben nun schon eine ganz gute Vorstellung davon, wie NFC funktioniert und wann es verwendet wird. Jetzt wird es spannend! Gehen wir in media res und erstellen eine App mithilfe unserer Windows 8-Näherungs (NFC)-APIs.

So implementieren Sie NFC

Wie Sie sehen, erleichtert NFC Endbenutzern viele alltägliche Aufgaben. Nehmen Sie die Einstellung eines Alarms als ein Beispiel. Ich bin mir sicher, dass beinahe jeder schon einmal versehentlich eine falsche Weckzeit für den nächsten Morgen eingestellt hat. Wenn es spät ist und man eigentlich nur noch einschlafen möchte, ist man gerne einmal etwas unaufmerksam. NFC macht dies leichter, da hier nur ein voreingestellter Tag getappt und bestätigt werden muss, um dann ohne Sorgen schlafen gehen zu können. Stellen wir uns also vor, dass Sie deshalb eine einfache Alarm-App geschrieben haben, mit der Benutzer einen Alarm mithilfe eines NFC-Tags einstellen können. Dabei lassen sich zwei Szenarien unterscheiden:

  1. Einstellen eines Alarms im Tag: NFC-Tags können wiederverwendet werden, daher sollte die App dem Benutzer eine Möglichkeit bieten, einen Alarm zu programmieren. Beispielsweise möchte ein Benutzer vielleicht verschiedene Alarme programmieren, einen für Werktage, einen für das Wochenende. Dies wird allgemein als Veröffentlichen in einem Tag bezeichnet.
  2. Einstellen eines Alarms vom Tag: Nachdem ein Benutzer einen Tag gekoppelt hat, sollte die App gestartet werden, um die Einstellung eines Alarms zu bestätigen. Dies bedeutet, dass die App mit Kontext oder Argumenten gestartet werden kann.

Die NFC-API bietet unterschiedliche Herangehensweisen für das gleiche Ziel, ich erläutere hier aber nur den einfachsten Weg zur Implementierung dieses Szenarios.

Im Folgenden werden die Schritte zum Einstellen eines Alarms auf einem NFC-Tag veranschaulicht:

  1. Jens startet die Alarm-App und gibt eine Uhrzeit an, z. B. 07:00 Uhr. Ein ganz normaler Vorgang, bei dem NFC noch keine Rolle spielt.
  2. Jens wählt die Option zum Einrichten eines Alarms in einem NFC-Tag aus. An dieser Stelle ruft App die NFC-APIs auf, um Daten an das NFC-Radio zu übertragen, genauer gesagt eine App-ID-Zeichenfolge: & 07:00. Bei NFC-Tags wird ein Standardnachrichtenformat mit der Bezeichnung NDEF (NFC Defined Exchange Format) verwendet. Die Formatierung der Daten in eine NDEF-Nachricht muss nicht von der App ausgeführt werden. Diesen Vorgang übernimmt Windows. Der Benutzer kann jetzt den NFC-Tag koppeln.
  3. Jens koppelt den Tag mit dem PC und die Programmierung des Tags wird von der App bestätigt. Nach der Kopplung des Tags sollten die Benutzer unbedingt darüber informiert werden, dass der Tag erfolgreich von der App programmiert wurde. Wie bereits erwähnt, stellt die Kopplung von PCs für die meisten Anwender ein neues Konzept dar. Durch die Bestätigung erhalten die Benutzer Gewissheit, dass der Vorgang funktioniert. Durch die Registrierung eines MessageTransmittedHandlers erkennt die App, dass eine Nachricht erfolgreich übermittelt wurde.

Die NFC-APIs befinden sich im Windows.Networking.Proximity-Namespace. Diese APIs kommen in Schritt 2 zum Einsatz, nachdem der Benutzer die Option zum Einstellen eines Alarms auf einem NFC-Tag auswählt. Zunächst initialisiert die App ein Näherungs-Objekt. Anhand des Näherungs-Objekts kann ermittelt werden, ob sich ein Tag (oder Gerät) innerhalb oder außerhalb der Reichweite befindet. Anschließend wird der DeviceArrival-Ereignishandler hinzugefügt. Der Handler erkennt, ob der Tag gekoppelt wurde. Ist dies der Fall, können Informationen auf den Tag geschrieben werden. Die Benutzer sollten wissen, wenn auf den Tag geschrieben wird, damit sie ihn nicht außer Reichweite bewegen. Mit diesem Ereignis kann die Kopplung beliebiger Näherungs-Geräte erkannt werden.

Im folgenden Codeausschnitt wird das Initialisieren und Hinzufügen eines DeviceArrival-Ereignishandlers veranschaulicht.

JavaScript

var proximityDevice;

function initializeProximityDevice() {
proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();

if (proximityDevice) {
proximityDevice.addEventListener("devicearrived", proximityDeviceArrived);

}
else {
// No NFC radio on the PC, display an error message
}


function proximityDeviceArrived(device) {
// Let the user know we’re ‘Writing to Tag’

}
}

C#
private void InitializeProximityDevice()
{

Windows.Networking.Proximity.ProximityDevice proximityDevice;
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null) {
proximityDevice.DeviceArrived += ProximityDeviceArrived;

}
else
{
// No NFC radio on the PC, display an error message
}
}

private void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
// Let the user know we’re ‘Writing to Tag’

}


Im nächsten Schritt veröffentlichen wir Informationen auf dem Tag. Die App veröffentlicht zwei Komponenten: eine App-ID-Zeichenfolge (bestehend aus einer App-ID und App-Plattform) und Startargumente. Unter Windows 8 lautet die App-ID <Name der Paketfamilie>!<App-ID> und die App-Plattform „Windows“. Sie müssen den App-ID-Wert aus dem ID-Attribut des Anwendungselements in das Paketmanifest für Ihre App kopieren. Das Startargument lautet „07:00“ (der vom Benutzer festgelegte Alarm). Bezeichnen wir dieses Argument als die Nachricht.

Für plattformübergreifende Apps ermöglicht Windows das Veröffentlichen alternativer App-IDs und -Plattformen, sodass Sie denselben Tag mit anderen NFC-kompatiblen Geräten koppeln können, z. B. Windows Phone 8. Weitere Informationen zu Alternativen IDs finden Sie auf MSDN.

Die Daten werden von der App mithilfe der publishBinaryMessage-Methode auf dem Tag veröffentlicht. Die Methode akzeptiert drei Parameter: „messageType“, „message“ und eine messageTransmittedHandler-Funktion. „messageType“ wird auf „LaunchApp:WriteTag“ festgelegt, woran Windows erkennt, dass die App Daten auf einen NFC-Tag schreiben möchte. Bei „message“ handelt es sich lediglich um die zuvor definierte Nachricht (App-ID-Zeichenfolge und Startargumente). Die Nachricht muss als binäre Nachricht in einem Puffer gespeichert werden. Die messageTransmittedHandler-Funktion registriert Rückrufe. Hierdurch erkennt die App, dass die Nachricht erfolgreich auf den Tag geschrieben wurde. Auf diese Weise kann dem Benutzer Folgendes mitgeteilt werden: Die Nachricht wurde erfolgreich auf den Tag geschrieben und der Tag muss sich nicht mehr in Reichweite befinden.

Nachrichten werden so lange veröffentlicht, bis die StopPublishingMessage-Funktion aufgerufen oder das ProximityDevice-Objekt freigegeben wird. In diesem Beispiel wird die Stop-Funktion verwendet. PublishBinaryMessage gibt eine Veröffentlichungs-ID zurück. Anhand dieser ID wird das Veröffentlichen der Nachricht auf dem NFC-Radio beendet.

Im nächsten Codeausschnitt wird das Schreiben von Daten auf einen NFC-Tag veranschaulicht:

JavaScript

var proximityDevice;

function getAlarmTime(){

// Grab time set by the user, call this variable ‘Alarm’
return Alarm;

}

function publishLaunchApp() {
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice) {
// The format of the app launch string is: "<args>\tWindows\t<AppName>".
// The string is tab or null delimited.

// The <args> string can be an empty string ("").
var launchArgs = getAlarmTime();

// The format of the AppName is: PackageFamilyName!PRAID.
var praid = "AlarmApp"; // The Application Id value from your package.appxmanifest.

var appName = Windows.ApplicationModel.Package.current.id.familyName + "!" + praid;

var launchAppMessage = launchArgs + "\tWindows\t" + appName;

var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.unicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.utf16LE;
dataWriter.writeString(launchAppMessage);
var launchAppPubId =
proximityDevice.publishBinaryMessage(
"LaunchApp:WriteTag",
dataWriter.detachBuffer(),
proximityWriteTagLaunchAppMessageTransmitCallback);

if (launchAppPubId != -1) {
// Stop publishing the message on NFC radio
proximityDevice.stopPublishingMessage(launchAppPubId);
}

}
}

function proximityWriteTagLaunchAppMessageTransmitCallback() {
// Inform the user that: the message has been successfully written to a tag & the tag no longer needs to be in range
}

C#
Windows.Networking.Proximity.ProximityDevice proximityDevice;

private string GetAlarmTime(){

// Grab time set by the user, call this variable ‘Alarm’
return Alarm;
}

private void PublishLaunchApp()
{
proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
{
// The format of the app launch string is: "<args>\tWindows\t<AppName>".
// The string is tab or null delimited.

// The <args> string can be an empty string ("").
string launchArgs = getAlarmTime();

// The format of the AppName is: PackageFamilyName!PRAID.
string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

string launchAppMessage = launchArgs + "\tWindows\t" + appName;

var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
dataWriter.WriteString(launchAppMessage);
var launchAppPubId =
proximityDevice.PublishBinaryMessage(
"LaunchApp:WriteTag", dataWriter.DetachBuffer(),
proximityWriteTagLaunchAppMessageTransmitCallback);

if (launchAppPubId!= -1)
{
proximityDevice.StopPublishingMessage(launchAppPubId);
// Stop publishing the message on NFC radio
}

}
}

private void proximityWriteTagLaunchAppMessageTransmitCallback(
Windows.Networking.Proximity.ProximityDevice sender,
long messageId)
{
// Inform the user that: the message has been successfully written to a tag & the tag no longer needs to be in range
}

So einfach ist das! Jetzt wissen Sie, wie über eine Windows Store-App Informationen auf einen NFC-Tag geschrieben werden können. Betrachten wir nun also das nächste Szenario, das Einstellen eines Alarms vom Tag. Im Folgenden werden die Schritte zum Lesen eines Alarms von einem NFC-Tag veranschaulicht:
  1. Jens betrachtet gerade den Startbildschirm, verfasst eine E-Mail, spielt ein Spiel oder nutzt Windows für eine beliebige andere Aufgabe, als ihm einfällt, dass er einen Alarm für Montag morgen einstellen muss. Er nimmt seinen „Wochentagsalarm“-Tag zur Hand und koppelt diesen mit seinem PC. Ein Aufforderung zum Starten der Alarm-App wird angezeigt. Bis zu diesem Punkt werden sämtliche Vorgänge von Windows ausgeführt, die App spielt noch keine Rolle.
  2. Jens stimmt zu und die App zeigt einen Bildschirm zum Bestätigen des Alarms um 07:00 Uhr an. Daraufhin werden die Startargumente (wie im obigen Beispiel) von Windows während der Aktivierung an die App übergeben. Dieser Vorgang wird als kontextgebundener Start bezeichnet und gleicht dem direkten Starten einer bestimmten Seite der App.
  3. Jens stellt den Alarm ein, ein ganz normaler Vorgang ohne Beteiligung von NFC.

Die Startargumente können problemlos vom NFC-Tag abgerufen werden. Der kontextgebundene Start über einen NFC-Tag muss jedoch von der App ausgeführt werden. Bei einem kontextgebundenen Start handelt es sich um eine andere Bezeichnung für das direkte Starten einer bestimmten Seite der App. In den Startargumenten ist der Alarm „07:00 Uhr“ angegeben, der von der App als Alarmvorschlag angezeigt wird. Fall die App nicht auf dem PC installiert ist, bietet Windows Jens außerdem die Option, die App automatisch aus dem Windows Store installieren zu lassen.

Im folgenden Codeausschnitt ist die Implementierung des kontextgebundenen Starts veranschaulicht.

JavaScript

app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
//do nothing here.
}
else {
// Use args.detail.arguments to parse out ’07.00’ string, and display to the user
}

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

C#
async protected override void OnLaunched(LaunchActivatedEventArgs args)
{
if (args.Arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket")
{
_isLaunchedByTap = true;
}
else
{
// Use args.Arguments to parse out ’07.00’ string, and display to the user

}
Window.Current.Activate();
}


Das ist alles, was eine App zur Unterstützung von Lese- und Schreibvorgängen auf einen NFC-Tag benötigt – ziemlich einfach für ein Szenario mit modernster Technologie. Vor der Zusammenfassung möchte ich noch auf einige schützende Maßnahmen eingehen – Fehlerbehandlung.

Fehlerbehandlung

Im Folgenden finden Sie einige häufige Fehler, die in dieser App auftreten können.

  • Der gekoppelte Tag liegt nicht im NDEF-Format vor. Die automatische Neuformatierung eines Tags in NDEF wird von Windows 8 nicht unterstützt, daher müssen Sie eine NDEF-Formatierungsanwendung herunterladen und installieren.
  • Der gekoppelte Tag ist schreibgeschützt. Einige NFC-Tags sind möglicherweise schreibgeschützt (ähnliche wie alte VHS-Kassetten).
  • Der gekoppelte Tag ist zu klein und bietet nicht genügend Platz für sämtliche Daten.
  • Der Benutzer-PC verfügt nicht über NFC. Wie anfangs erwähnt, handelt es sich bei NFC um eine neue, noch nicht weit verbreitete Technologie, die jedoch in zunehmendem Maße eingesetzt wird. Verwenden Sie die ProximityDevice.getDefault()-Methode, um zu ermitteln, ob Näherung von einem PC unterstützt wird. Wenn keine NFC-Radios installiert sind, gibt die Methode NULL zurück.

Einfach und intuitiv

NFC ist endlich für den Endverbrauchermarkt bereit, und Windows bietet das entsprechende Ökosystem sowie eine hervorragende Benutzerfreundlichkeit für sämtliche zugehörige Vorgänge. Die Technologie bietet ein enormes Potenzial zur Entwicklung unglaublich interaktiver Apps und Geräte – einfach und intuitiv.

NFC ist ein großer Themenbereich: Sie können also auf weitere Blogbeiträge über andere interessante Erfahrungen im Rahmen der NFC-Entwicklung unter Windows 8 gespannt sein.

Weitere Informationen zu NFC und Näherung finden Sie in den folgenden Ressourcen.

Ressourcen

Vielen Dank!

Priya Dandawate
Programmmanager, Devices and Networking

Unter Mitarbeit von: Max Morris, Marzena Makuta, Mike Loholt, Jake Sabulsky und Vishal Mhatre

  • Loading...
Leave a Comment
  • Please add 8 and 5 and type the answer here:
  • Post