Zum Inhalt springen
Sprache: DE

NDEF-Sitzung oder Tag-Sitzung: welche öffnet eine iOS-Anwendung?

Eine NDEF-Sitzung, wenn die Anwendung nur Nachrichten liest oder schreibt: Sie deckt die Forum-Typen 1 bis 5 ab und braucht die wenigsten Deklarationen. Eine Tag-Sitzung, ab iOS 13, wenn die Anwendung über ISO-7816-APDU, ISO-15693-Blöcke, FeliCa- oder MIFARE-Befehle mit dem Chip selbst sprechen muss. Es ist immer nur eine Sitzung gleich welcher Art aktiv.

Was eine NDEF-Sitzung tut

Core NFC liest NDEF-Daten von Tags der Typen 1 bis 5, so die Übersicht zum Rahmenwerk von Apple, und NFCNDEFReaderSession ist die dafür gebaute Sitzung. Sie reicht jede Nachricht über readerSession(_:didDetectNDEFs:) an ihr Delegat weiter, ohne Tag-Objekt und ohne Befehl.

Ab iOS 13 kann dieselbe Sitzung auch die Tags selbst übergeben. Ein Delegat, das readerSession(_:didDetect:) umsetzt, erhält Objekte vom Typ NFCNDEFTag, verbindet sich mit einem davon und kann ihn abfragen, beschreiben und sperren, wie die Seite zum Schreiben beschreibt.

Der Schalter invalidateAfterFirstRead entscheidet, wie lange die Sitzung lebt. Auf wahr gesetzt endet sie nach dem ersten erfolgreich gelesenen Tag, auf falsch gesetzt liest sie weiter, bis sie abläuft oder abgebrochen wird. Apples Hinweis zum Initialisierer verlangt falsch für eine Sitzung, die schreibt.

Was eine Tag-Sitzung hinzufügt

NFCTagReaderSession, verfügbar ab iOS 13, erkennt Tags nach Funktechnologie statt nach Inhalt. Ihre Möglichkeiten der Suche wählen, wonach sie sucht: iso14443 für ISO-7816-verträgliche und MIFARE-Tags, iso15693 für Tags nach Vicinity-Norm, iso18092 für FeliCa, und ab iOS 16 eine Möglichkeit pace.

Jeder erkannte Tag kommt als Wert NFCTag an, dessen Fall das Protokoll angibt: NFCISO7816Tag für APDU, NFCISO15693Tag für Blockbefehle, NFCFeliCaTag, oder NFCMiFareTag für MIFARE-Befehle. Jeder davon entspricht auch NFCNDEFTag, sodass eine Tag-Sitzung ebenfalls NDEF liest und schreibt.

Der Preis liegt in den Deklarationen. Über die Berechtigung und die Nutzungsbeschreibung hinaus, die jede Core-NFC-Anwendung braucht, übergibt die Dokumentation der Klasse einen ISO-7816-Tag nur für die in Info.plist aufgeführten Anwendungskennungen, wie die Seite zu den Deklarationen erklärt.

Eine Sitzung auf einmal

Es kann immer nur eine Lesesitzung gleich welcher Art im System aktiv sein, sagt die Dokumentation der Basisklasse, und weitere Sitzungen warten in einer Warteschlange, die der Reihe nach bedient wird. Eine Anwendung, die eine zweite Sitzung startet, während die erste offen ist, wartet auf das Ende der ersten.

Eine Sitzung braucht außerdem die Hardware. readingAvailable antwortet, bevor irgendetwas angelegt wird, und Apple bittet Anwendungen, es zuerst zu prüfen; in Anwendungserweiterungen steht Core NFC überhaupt nicht zur Verfügung.

Und eine Sitzung endet endgültig. Einmal für ungültig erklärt, kann sie nicht erneut suchen, und die Anwendung legt eine neue an, was Apples Beispiel eines Tag-Lesegeräts nach jeder Ungültigkeit tut.

Die Wahl zwischen beiden

NDEF-Sitzung und Tag-Sitzung, Punkt für Punkt
FrageNDEF-SitzungTag-Sitzung
Verfügbar abiOS 11 zum Lesen, iOS 13 zum SchreibeniOS 13
Was sie übergibtNachrichten, oder NDEF-Tags über didDetectTags nach Protokoll, jeder davon NDEF-fähig
Befehle an den ChipKeineAPDU, ISO-15693-Blöcke, FeliCa- und MIFARE-Befehle
Zusätzliche DeklarationenKeineAnwendungskennungen für ISO 7816, Systemcodes für FeliCa

Nehmen Sie die NDEF-Sitzung, wenn der Tag eine Nachricht trägt und die Aufgabe der Anwendung diese Nachricht ist. Nehmen Sie die Tag-Sitzung, wenn die Anwendung den Chip braucht: eine Kennung, einen Zähler, ein Passwort, einen Speicherblock außerhalb von NDEF.

Häufige Fragen

Kann eine iOS-Anwendung einen Tag ohne das Lesefenster lesen?

Nein. Eine Lesesitzung zeigt das Lesefenster des Systems, solange sie läuft, und die Anwendung wählt darin nur den Text, über alertMessage.

Liest eine Tag-Sitzung auch NDEF?

Ja. Jeder Tag-Typ, den sie übergibt, entspricht auch NFCNDEFTag, sodass die Anwendung nach dem Verbinden NDEF lesen und schreiben kann.

Können zwei Sitzungen gleichzeitig laufen?

Nein. Es ist immer nur eine Lesesitzung gleich welcher Art im System aktiv, und die anderen warten in einer Warteschlange, die der Reihe nach bedient wird.

Warum endet meine NDEF-Sitzung nach dem ersten Tag?

invalidateAfterFirstRead steht auf wahr, und das Delegat erhält readerSessionInvalidationErrorFirstNDEFTagRead, wenn die Sitzung endet. Setzen Sie ihn auf falsch, um weiterzulesen oder zu schreiben.