Wie sieht man, was eine Anwendung und ein Tag wirklich austauschen?
Schneiden Sie es selbst mit: jeden gesendeten Befehl, jede empfangene Antwort, mit einem Zeitstempel, auf beiden Seiten der Schnittstelle, die die Aufrufe zum Funk umschließt. Android hält außerdem einen eigenen Mitschnitt des Verkehrs mit seinem Controller, voreingestellt gefiltert. iOS bietet nichts Gleichwertiges, nur Fehler.
Der Mitschnitt, den Sie schreiben
Der Mitschnitt, den es immer gibt, ist der, den Ihr Code erzeugt. Jeden Befehl als Bytes, jede Antwort als Bytes, die Ausnahme, wenn es eine gibt, und einen Zeitstempel an jeder Zeile: Das genügt, um einen Austausch erneut abzuspielen, die Wege hin und zurück zu zählen und zu sehen, wo ein Tag verloren ging.
Er gehört an dieselbe Trennlinie, die die Seite zum Testen empfiehlt, rings um die Aufrufe, die den Funk berühren, was heißt, dass er eine Stelle im Code kostet statt einer Zeile je Aufrufstelle. Halten Sie die Bytes hexadezimal und halten Sie sie ganz: Ein abgeschnittener Mitschnitt eines scheiternden Austauschs beantwortet nichts.
Der Mitschnitt, den Android führt
Die Plattform führt ihren eigenen. Androids eigener NCI-Mitschnitt, im quelloffenen NFC-Stack, hält die mit dem Controller ausgetauschten Pakete in einem Ringpuffer von 256 KB, in beiden Richtungen, jedes mit einem Zeitstempel, und der Dienst gibt ihn auf Anfrage aus.
Zwei Eigenschaften entscheiden, was darin steht. Die Betriebsart, persist.nfc.snoop_log_mode, ist gefiltert, sofern sie nicht auf voll steht, und eine Fassung für die Fehlersuche schreibt den Puffer außerdem in eine Datei unter /data/misc/nfc/logs. Auf einem gewöhnlichen Telefon aus dem Handel bekommen Sie also eine gefilterte Sicht; eine Fassung für die Entwicklung zeigt die Rahmen.
Das ist der Verkehr des Controllers und nicht die Aufrufe Ihrer Anwendung. Er beantwortet eine andere Frage, und die nützliche: ob der Befehl, den Ihr Code zu senden glaubt, der Befehl ist, der hinausging.
Was iOS Ihnen gibt
Core NFC meldet Fehler und keine Rahmen. Die Liste ist genau genug, um damit zu suchen, eine verlorene Verbindung, zu viele Wiederholungen, ein Tag, der mit einem Fehler geantwortet hat, ein Paket, das länger ist als der Tag annimmt, eine Sitzung, die unter dem Aufruf für ungültig erklärt wurde, und die Seite zur Ungültigkeit behandelt die Seite der Sitzung davon.
Unter iOS ist der Mitschnitt, den Sie schreiben, also der ganze Mitschnitt, was ein Argument dafür ist, ihn zu schreiben, bevor Sie ihn brauchen.
Lesen, was zurückkommt
Wissen Sie, was jedes Protokoll in eine Antwort legt. Eine APDU endet mit zwei Statusbytes, und 90 00 ist das einzige, das durchgelaufen heißt, was die Seite zur APDU auflistet. Eine Antwort nach ISO 15693 beginnt mit einem Flags-Byte, dessen unterstes Bit Fehler heißt, gefolgt von einem Code, wie die Seite zur 15693 beschreibt.
Und lesen Sie die Zeitstempel, nicht nur die Bytes. Eine Lücke von einigen zehn Millisekunden zwischen einem Befehl und dem nächsten ist Ihr eigener Code beim Nachdenken, und das ist der Teil eines langsamen Antippens, den Sie beheben können.
Häufige Fragen
Brauche ich ein Abhörgerät, um den Austausch zu sehen?
Für die meisten Fehler nicht. Ein Mitschnitt der Befehle und Antworten, die Ihr Code sendet und empfängt, beantwortet sie, und er arbeitet auf beiden Plattformen.
Was enthält der Mitschnitt von Android?
Die mit dem Controller ausgetauschten Pakete, in einem Ringpuffer, in beiden Richtungen mit Zeitstempel, gefiltert, sofern die Betriebsart nicht auf voll steht.
Gibt es etwas Gleichwertiges unter iOS?
Nein. Core NFC gibt Fehler statt Rahmen, der Mitschnitt unter iOS ist also der, den die Anwendung schreibt.
Was soll der Mitschnitt festhalten?
Die gesendeten Bytes, die empfangenen Bytes, die Ausnahme, falls es eine gibt, und einen Zeitstempel an jeder Zeile, ganz statt abgeschnitten.