Freigeben über


Core NFC in Xamarin.iOS

Lesen von Nfc-Tags (Near Field Communication) mit iOS 11

CoreNFC ist ein neues Framework in iOS 11, das den Zugriff auf das Near Field Communication (NFC)-Radio zum Lesen von Tags in Apps ermöglicht. CoreNFC arbeitet an i Telefon 7, i Telefon 7 Plus, i Telefon 8, i Telefon 8 Plus, i Telefon X, i Telefon XS und i Telefon 11 Modellen (während i Telefon 6 und i Telefon 6 Plus-Modelle NFC-Zahlungsfunktionen haben sie keine Unterstützung CoreNFC).

Der NFC-Tagleser in iOS-Geräten unterstützt alle NFC-Tagtypen 1 bis 5, die NFC Data Exchange Format (NDEF)-Informationen enthalten.

Es gibt einige Einschränkungen, die zu beachten sind:

  • CoreNFC unterstützt nur das Lesen von Tags (nicht schreiben oder formatieren).
  • Tagscans müssen vom Benutzer initiiert und nach 60 Sekunden timeout ausgeführt werden.
  • Apps müssen im Vordergrund zum Scannen sichtbar sein.
  • CoreNFC kann nur auf realen Geräten (nicht auf dem Simulator) getestet werden.

Auf dieser Seite wird die Konfiguration beschrieben, die für die Verwendung von CoreNFC erforderlich ist, und zeigt, wie die API verwendet wird.

Konfiguration

Um CoreNFC zu aktivieren, müssen Sie drei Elemente in Ihrem Projekt konfigurieren:

  • Ein Info.plist-Datenschutzschlüssel .
  • Ein Eintrag "Entitlements.plist ".
  • Ein Bereitstellungsprofil mit NFC-Tag-Lesefunktion .

Info.plist

Fügen Sie den NFCReaderUsageDescription-Datenschutzschlüssel und Text hinzu, der dem Benutzer beim Scannen angezeigt wird. Verwenden Sie eine für Ihre Anwendung geeignete Nachricht (z. B. erläutern Sie den Zweck des Scans):

<key>NFCReaderUsageDescription</key>
<string>NFC tag to read NDEF messages into the application</string>

Entitlements.plist

Ihre App muss die Near Field Communications Tag Reading-Funktion mithilfe des folgenden Schlüssel-Wert-Paars in Ihrer Berechtigungsliste anfordern:

<key>com.apple.developer.nfc.readersession.formats</key>
<array>
  <string>NDEF</string>
</array>

Bereitstellungsprofil

Erstellen Sie eine neue App-ID , und stellen Sie sicher, dass der NFC-Tag-Lesedienst abgehakt ist:

Seite

Anschließend sollten Sie ein neues Bereitstellungsprofil für diese App-ID erstellen und dann auf Ihrem Entwicklungs-Mac herunterladen und installieren.

Lesen eines Tags

Nachdem Ihr Projekt konfiguriert wurde, fügen Sie using CoreNFC; am Anfang der Datei hinzu, und führen Sie die folgenden drei Schritte aus, um die Lesefunktionalität von NFC-Tags zu implementieren:

1. Implementieren INFCNdefReaderSessionDelegate

Die Schnittstelle verfügt über zwei Zu implementierende Methoden:

  • DidDetect – Wird aufgerufen, wenn ein Tag erfolgreich gelesen wird.
  • DidInvalidate – Wird aufgerufen, wenn ein Fehler auftritt oder das Timeout von 60 Sekunden erreicht ist.

DidDetect

Im Beispielcode wird jede gescannte Nachricht zu einer Tabellenansicht hinzugefügt:

public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
    foreach (NFCNdefMessage msg in messages)
    {  // adds the messages to a list view
        DetectedMessages.Add(msg);
    }
    DispatchQueue.MainQueue.DispatchAsync(() =>
    {
        this.TableView.ReloadData();
    });
}

Diese Methode kann mehrmals aufgerufen werden (und ein Array von Nachrichten kann übergeben werden), wenn die Sitzung mehrere Taglesevorgänge zulässt. Dies wird mithilfe des dritten Parameters der Start Methode festgelegt (in Schritt 2 erläutert).

DidInvalidate

Eine Ungültigkeit kann aus einer Reihe von Gründen auftreten:

  • Fehler beim Scannen.
  • Die App wurde nicht mehr im Vordergrund angezeigt.
  • Der Benutzer hat sich entschieden, den Scan abzubrechen.
  • Der Scan wurde von der App abgebrochen.

Der folgende Code zeigt, wie ein Fehler behandelt wird:

public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
    var readerError = (NFCReaderError)(long)error.Code;
    if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
        readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
    {
      // some error handling
    }
}

Nachdem eine Sitzung ungültig wurde, muss ein neues Sitzungsobjekt erstellt werden, um es erneut zu überprüfen.

2. Starten eines NFCNdefReaderSession

Das Scannen sollte mit einer Benutzeranforderung beginnen, z. B. mit einem Tastendruck. Der folgende Code erstellt und startet eine Scansitzung:

Session = new NFCNdefReaderSession(this, null, true);
Session?.BeginSession();

Die Parameter für den NFCNdefReaderSession Konstruktor sind wie folgt:

  • delegate – Eine Umsetzung von INFCNdefReaderSessionDelegate. Im Beispielcode wird der Delegat im Tabellenansichtscontroller implementiert, daher this als Delegatparameter verwendet.
  • queue – Die Warteschlange, auf der Rückrufe verarbeitet werden. Dies kann nullin diesem Fall der Fall sein, dass Sie beim Aktualisieren von DispatchQueue.MainQueue Benutzeroberflächensteuerelementen (wie im Beispiel gezeigt) verwenden.
  • invalidateAfterFirstRead – Wenn trueder Scan nach dem ersten erfolgreichen Scan beendet wird. Wenn false die Überprüfung fortgesetzt wird und mehrere Ergebnisse zurückgegeben werden, bis der Scan abgebrochen wird oder das 60-sekunden-Timeout erreicht ist.

3. Abbrechen der Scansitzung

Der Benutzer kann die Scansitzung über eine vom System bereitgestellte Schaltfläche auf der Benutzeroberfläche abbrechen:

Schaltfläche 'Abbrechen' beim Scannen

Die App kann die Überprüfung programmgesteuert abbrechen, indem sie die InvalidateSession Methode aufruft:

Session.InvalidateSession();

In beiden Fällen wird die Methode der DidInvalidate Stellvertretung aufgerufen.

Zusammenfassung

CoreNFC ermöglicht Ihrer App das Lesen von Daten aus NFC-Tags. Es unterstützt das Lesen einer Vielzahl von Tagformaten (NDEF-Typen 1 bis 5), unterstützt jedoch nicht das Schreiben oder Formatieren.