Zum Inhalt springen
Sprache: DE

Was braucht eine iOS-Anwendung, um eine Karte zu emulieren?

Drei Dinge, die Apple bestimmt: die Berechtigung für die Kartensitzung, auf Antrag und unter einer geschäftlichen Vereinbarung erteilt; ein Gerät und eine Lage, die das System für tauglich hält; und Code, der die APDU aus dem Strom der Ereignisse der Sitzung beantwortet. Core NFC bietet CardSession ab iOS 17.4, hinter einem Fenster des Systems.

Die Berechtigungen kommen zuerst

CardSession, ab iOS 17.4, ist die Klasse, die eine Karte emuliert, und Apples Dokumentation führt auf, was sie im Europäischen Wirtschaftsraum abdeckt: Zahlungen im Geschäft, Autoschlüssel, Nahverkehr in geschlossenen Systemen, Firmenausweise, Hotelschlüssel, Kundenbindung und Eintrittskarten.

Drei Berechtigungen regeln sie. com.apple.developer.nfc.hce erlaubt die Schnittstelle überhaupt, und ohne sie löst das Anlegen einer Sitzung einen schweren Fehler aus. Die Berechtigung für die Präfixe der Kennungen führt auf, wofür die Anwendung antwortet: vollständige Anwendungskennungen, eingetragene Anbieterkennungen, oder Präfixe, die mindestens so lang sind wie die Anbieterkennung. Die Berechtigung für die kontaktlose Standardanwendung lässt eine Person die Anwendung in den Einstellungen als Standard für Kontaktloses wählen.

Jede der drei Seiten verweist auf dieselbe Stelle, ein Antragsformular für kontaktlose Vorgänge auf Grundlage von Host Card Emulation, für Bank- und Wallet-Anwendungen im Europäischen Wirtschaftsraum. Die geschäftliche Seite davon behandelt die Seite zur Emulation auf dem iPhone; die technische Folge ist, dass der Code unten nur dort läuft, wo Apple Ja gesagt hat.

Zwei Prüfungen, bevor etwas erscheint

Apple verlangt drei Werte, bevor eine Sitzung angelegt wird: NFCReaderSession.readingAvailable, CardSession.isSupported für das Gerät, und CardSession.isEligible für die gegenwärtige Lage, was asynchron ist. Die Referenz ist deutlich darin, warum jeder zählt: Eine Sitzung auf einem nicht unterstützten Gerät anzulegen löst einen schweren Fehler aus, und eine untaugliche würde umsonst eine Oberfläche für die Kartensitzung zeigen.

Die Prüfung gehört also vor die Schaltfläche und nicht dahinter. Eine Anwendung, die anbietet, eine Karte vorzuzeigen, und dann die Prüfung der Tauglichkeit nicht besteht, hat bereits etwas versprochen, das das System nicht liefern wird.

Die Sitzung, Ereignis für Ereignis

Eine Kartensitzung ist ein Strom und kein Delegat. Die Anwendung legt sie an, durchläuft eventStream, und erhält sessionStarted, sobald sie die NFC-Ressource hält, dann readerDetected, wenn das Gerät das Feld eines Lesegeräts spürt.

Die Emulation beginnt, wenn die Anwendung startEmulation() aufruft, was die modale Oberfläche des Systems zeigt, mit vorher gesetztem alertMessage. Von da an trägt jedes Ereignis eine APDU zum Verarbeiten und Beantworten mit respond(response:), und Apple warnt, dass ein Lesegerät eine späte Antwort als Ablauf behandeln kann. readerDeselected kommt an, wenn das Lesegerät geht, stopEmulation(status:) schaltet die Funkschnittstelle ab, mit einem letzten Status, der den Nutzenden gezeigt wird, und invalidate() gibt die Sitzung frei.

startEmulation() wirft dort, wo die Plattform sich weigert: Das System steht nicht zur Verfügung, der Zugang wurde nicht angenommen, die Tauglichkeit ist gescheitert, oder der Funk ist abgeschaltet. Diese vier Fälle verdienen verschiedene Meldungen, da nur einer davon ein Problem ist, das die Nutzenden beheben können.

Welche Anwendung ein Antippen erreicht

Die kontaktlose Standardanwendung beantwortet ein Antippen, sofern nicht eine andere Anwendung um das Feld bittet. NFCPresentmentIntentAssertion ist diese Bitte: aus dem Vordergrund erworben, hindert sie die Standardanwendung des Systems daran, auf eine Geste oder das Feld eines Lesegeräts hin zu starten, und Apple bindet sie daran, dass eine Person in Ihrer Anwendung aktiv einen Nachweis wählt.

Sie hält nicht an. Die Zusicherung läuft ab, wenn das Objekt abgebaut wird, wenn die Anwendung in den Hintergrund geht, oder nach fünfzehn Sekunden, und eine neue lässt sich erst nach fünfzehn Sekunden Abkühlung erwerben. Sie ist auch nicht nötig, bevor das Fenster gezeigt wird.

Android ordnet dieselbe Frage anders, mit einer Rolle der Wallet und einer Vorliebe des Vordergrunds, die jede Anwendung nutzen darf; die Seite zur Weiterleitung behandelt es. In einem Punkt stimmen die Plattformen überein: Die Nutzenden entscheiden, welche Anwendung spricht, nicht das Lesegerät.

Häufige Fragen

Kann jede iOS-Anwendung eine Karte emulieren?

Nein. Die Berechtigung für die Kartensitzung wird auf Antrag unter einer Vereinbarung mit Apple erteilt, und eine Sitzung ohne sie anzulegen löst einen schweren Fehler aus.

Welche Vorgänge führt Apple auf?

Zahlungen im Geschäft, Autoschlüssel, Nahverkehr in geschlossenen Systemen, Firmenausweise, Hotelschlüssel, Kundenbindung und Eintrittskarten, im Europäischen Wirtschaftsraum.

Sehen die Nutzenden während der Emulation etwas?

Ja. Die Emulation zu starten zeigt eine modale Oberfläche des Systems, und der Text darin ist die Meldung, die die Anwendung vorher setzt.

Wie lange hält eine Zusicherung der Vorzeigeabsicht?

Fünfzehn Sekunden, oder bis die Anwendung den Vordergrund verlässt oder das Objekt abgebaut wird, und eine neue wartet fünfzehn Sekunden Abkühlung ab.