Wie liest und schreibt man NFC aus eigenem Code?
Über die Schnittstelle der Plattform, auf der der Code läuft: das NFC-Framework unter Android, Core NFC auf dem iPhone, Web NFC in Chrome für Android und PC/SC für ein Lesegerät am Rechner. Jede entscheidet, was ein Programm an einen Tag senden darf, wann es auf einen warten darf, und was es vorher deklarieren muss.
Vier Zugänge, vier Regelwerke
Unter Android übergibt das NFC-Framework einen gefundenen Tag an eine Aktivität, die NDEF lesen und schreiben, rohe Befehle an den Tag senden oder über Host Card Emulation einem Lesegerät antworten kann.
Auf dem iPhone lässt Core NFC eine Anwendung innerhalb einer Sitzung lesen, die das System anzeigt und beendet, das Modell, das diese Seite auf der Seite zum Lesefenster beschreibt.
Im Browser liest und schreibt Web NFC NDEF aus einer Webseite heraus. Chrome dokumentiert es unter Android ab Chrome 89 und beschränkt es absichtlich auf NDEF: keine rohen Befehle, keine Kartenemulation.
Am Rechner wird ein USB-Lesegerät über PC/SC erreicht, die Spezifikation, mit der Rechner mit Chipkartenlesegeräten sprechen, und das Programm spricht über das Lesegerät mit dem Tag statt über ein Telefon.
Sie unterscheiden sich darin, was sie an einen Tag senden können, und noch stärker darin, wann sie lauschen dürfen. Dieser zweite Unterschied ist der, den eine Portierung von einer Plattform auf die andere falsch macht.
Was Code deklarieren muss
Keine von ihnen erreicht die Funkschnittstelle unangemeldet. Eine Android-Anwendung fordert android.permission.NFC an, die die Referenz der Berechtigungen als normal einstuft, sodass sie bei der Installation ohne Nachfrage erteilt wird.
Ab Android 17 muss eine Anwendung, die ein neueres SDK anvisiert, außerdem jede Aktivität, die Tags empfängt, mit android.permission.DISPATCH_NFC_MESSAGE schützen, so der Leitfaden zu den NFC-Grundlagen, damit nur der NFC-Dienst sie starten kann.
Eine iPhone-Anwendung deklariert die Fähigkeit zum Lesen von Tags und eine Nutzungsbeschreibung, bevor Core NFC eine Sitzung öffnet, und eine Tag-Sitzung, die ISO-7816-Tags liest, führt außerdem die Anwendungskennungen auf, die sie auswählen wird. Die Seite zu den Deklarationen behandelt alle drei.
Eine Webseite braucht einen sicheren Ursprung, einen Rahmen der obersten Ebene und eine Geste der Besucherin oder des Besuchers, etwa einen Druck auf eine Schaltfläche, bevor Chrome nach der Berechtigung nfc fragt.
Was das Feld mit dem Code macht
Ein Tag ist so lange da, wie eine Hand ihn ruhig hält, und der Code läuft in diesem Fenster. Die Referenz zu TagTechnology kennzeichnet jeden Austausch als blockierend und verbietet ihn im Hauptthread, und ein Tag, der mitten im Austausch verschwindet, löst TagLostException aus.
Tests am Schreibtisch verbergen das. Das Telefon liegt flach, der Tag bewegt sich nicht, und das Fenster schließt sich nie. Derselbe Code in der Hand eines Besuchers trifft auf ein Fenster, das auf halbem Weg zugeht, und Code, der diesen Fall nie erlebt hat, behandelt ihn als Absturz.
Der Tag ist auch nicht mehr das, was er vor einer Sekunde war. Android hält fest, was es beim Erkennen gelesen hat, und aktualisiert diese Werte nie, sodass ein Programm, das schreibt und dann der gemerkten Kopie vertraut, seine eigene Annahme zurückliest.
Prüfen, was der Code geschrieben hat
Lesen Sie das Ergebnis mit einem Werkzeug zurück, das nicht der Code ist, der geprüft wird. Ein Fehler, der den falschen Datensatztyp schreibt, kann ihn als den richtigen zurücklesen, weil derselbe Fehler ihn dekodiert.
NFC Tools, herausgegeben von demselben Unternehmen wie diese Seite, zeigt die Datensätze, die ein Tag trägt, und die Technologien, die er meldet, was die meisten Meinungsverschiedenheiten zwischen einem Programm und seinem Autor klärt.
Lesen Sie den Tag dann auf der anderen Plattform. Eine Nachricht, die ein Android-Parser annimmt, kann auf einem iPhone trotzdem nichts bewirken, eine Plattformentscheidung, die die Seite zu den iOS-Datensätzen behandelt.
Alle Leitfäden dieser Rubrik
- Android
- iOS und Core NFC
- Web NFC und plattformübergreifend
- Unterhalb von NDEF
- Kartenemulation im Code
- Lesegeräte und Geräte
- Testen und Fehlersuche
Android
- Lesemodus oder Vordergrund-Zustellung: was sollte eine Android-Anwendung nehmen?
- Wie deklariert man die Tags, die eine Android-Anwendung empfangen soll?
- Welche Technologieklasse sollte Android-Code für einen Tag öffnen?
- Wie schreibt man eine NDEF-Nachricht aus einer Android-Anwendung?
- Kann eine Android-Anwendung auf einen Tag reagieren, ohne einen Bildschirm zu zeigen?
- Wie behandelt man einen Tag, der bei offener Aktivität ankommt?
- Welche Grenzen des Controllers muss Android-Code zur Laufzeit prüfen?
iOS und Core NFC
- NDEF-Sitzung oder Tag-Sitzung: welche öffnet eine iOS-Anwendung?
- Was muss eine iOS-Anwendung deklarieren, bevor sie einen Tag liest?
- Wie schreibt und sperrt man einen NDEF-Tag aus einer iOS-Anwendung?
- Wie empfängt eine iOS-Anwendung einen im Hintergrund gelesenen Tag?
- Wie liest man mehrere Tags in einer iOS-Sitzung?
- Kann eine iOS-Anwendung die Kennung eines Tags lesen?
Web NFC und plattformübergreifend
Unterhalb von NDEF
- Wie sendet man einen rohen Befehl an einen Tag?
- Was ist eine APDU, und wann braucht Ihr Code eine?
- Wie liest man den Speicher eines Type-2-Tags Seite für Seite?
- Wie liest man die Blöcke eines ISO/IEC-15693-Tags?
- Wie findet Code die NDEF-Datei auf einem Type-4-Tag?
- Wie authentifiziert sich Code an einem passwortgeschützten Tag?
- Wie erkennt man, dass ein Tag das Feld verlassen hat?
- Wie schreibt man einen Tag, damit ein Abbruch nicht als gültig durchgeht?
- Wie schreibt man die Konfigurationsseiten eines Tags, ohne ihn zu ruinieren?
- Wie liest ein Server die Kennung, die ein Tag in seine URL spiegelt?
Kartenemulation im Code
- Wie emuliert eine Android-Anwendung eine Karte mit Host Card Emulation?
- Warum erreicht ein Lesegerät eine andere Anwendung als Ihre?
- Was braucht eine iOS-Anwendung, um eine Karte zu emulieren?
- Kann ein Telefon einen NDEF-Tag für ein anderes Telefon emulieren?
- Arbeitet Host Card Emulation bei ausgeschaltetem Bildschirm?
Lesegeräte und Geräte
- Wie spricht ein Rechner mit einem USB-NFC-Lesegerät?
- Welcher Lesechip passt zu einem Mikrocontroller-Projekt?
- Warum verfehlt ein Bastelmodul manche Tags?
- Was ist ein dynamischer Tag, und wann braucht ein Gerät einen?
- Kann ein Telefon ein ausgeschaltetes Gerät einstellen?
- Wie entwirft man eine NFC-Antenne für die eigene Platine?
- Kann ein eigenes Gerät für ein Telefon als Tag auftreten?
Testen und Fehlersuche
- Warum scheitert ein Lesevorgang mit dem Fehler Tag verloren?
- Warum endet eine Core-NFC-Sitzung von selbst?
- Warum läuft ein Befehl ab, und wie lange soll Code warten?
- Lässt sich NFC-Code ohne einen Tag in der Hand testen?
- Welche Tags sollte eine Entwicklung zum Testen behalten?
- Wie sieht man, was eine Anwendung und ein Tag wirklich austauschen?
- Was soll eine Anwendung tun, wenn NFC aus oder nicht vorhanden ist?
- Warum bricht Code für einen Chip auf einem anderen desselben Typs?
- Soll sich eine NFC-Anwendung auf Telefonen ohne NFC installieren?
Häufige Fragen
Welche Plattform sollte ein erstes NFC-Projekt anvisieren?
Android, wenn das Projekt mit dem Tag selbst sprechen muss. Sein Framework erreicht NDEF, rohe Befehle und Kartenemulation, und es lässt sich ohne Sitzung testen, die das System anzeigt.
Braucht das Lesen von Tags eine Berechtigungsabfrage?
Unter Android nicht, wo die NFC-Berechtigung eine normale ist und bei der Installation erteilt wird. Web NFC fragt die Besucherin oder den Besucher, und iOS zeigt bei jeder Sitzung ein Fenster.
Lässt sich NFC-Code ohne Telefon testen?
Das Zerlegen und Bauen von NDEF-Nachrichten schon. Alles, was vom Feld abhängt, etwa Zeitverhalten oder ein Tag, der verschwindet, braucht echte Hardware.
Woher kommen Befehle, die nur einen Chip betreffen?
Aus dem Datenblatt dieses Chips. Diese Rubrik behandelt die Befehle, die die Tag-Typen des NFC Forum definieren, und überlässt den Rest dem Hersteller.