3.4. Swift NFC-Schreiber/-Leser mit DB Anmeldung

Eine einfache Authentifizierungs-App, die sowohl Login/Passwort als auch NFC-Methoden bereitstellt, um mit einer modernen und praktischen Benutzeroberfläche auf das persönliche Konto zuzugreifen.

Bemerkung

Dieser Teil wurde in Swift verfasst.

3.4.1. NFC-Schreiber/-Leser Anteil

Swift bietet eine einfache Möglichkeit, NFC-Tags mit dem Core NFC-Framework zu lesen und zu schreiben. Das Core NFC-Framework stellt APIs zur Kommunikation mit NFC-Tags und zum Lesen und Schreiben von Daten von/nach bereit.

Um NFC-Lesen und -Schreiben in Swift-Anwendung zu verwenden, muss man zunächst sicherstellen, dass das iOS-Gerät NFC unterstützt. Anschließend muss man das Core NFC-Framework in Projekt importieren und um Erlaubnis zur Verwendung der NFC-Hardware bitten. Dies erfordert ein spezielles Zertifikat von Apple und einige zusätzliche Einstellungen im Projekt selbst. Das Zertifikat kann nur von genehmigten Entwicklern über eine offizielle Apple-Website erhalten werden.

Hier ist ein Beispiel dafür, wie NFC-Daten in Swift gelesen werden können:

import CoreNFC

class NFCReader: NSObject, NFCNDEFReaderSessionDelegate {
    func startReading() {
        let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
        session.begin()
    }

    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        for message in messages {
            for record in message.records {
                print(String.init(data: record.payload, encoding: .utf8) ?? "")
            }
        }
    }

    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        print(error.localizedDescription)
    }
}

Dieses Beispiel zeigt, wie ein NFC-Session gestartet und NDEF-Nachrichten von NFC-Tags gelesen werden können. Wenn ein Tag erkannt wird, wird die Methode didDetectNDEFs aufgerufen, und die Nachricht sowie ihre Datensätze können aus dem messages-Array abgerufen werden.

Um Daten auf einen NFC-Tag zu schreiben, man kann die Klasse NFCNDEFTag verwenden, die APIs zum Lesen und Schreiben von NDEF-Nachrichten bereitstellt. Hier ist ein Beispiel dafür, wie eine NDEF-Nachricht auf einen NFC-Tag geschrieben wird:

import CoreNFC

class NFCWriter: NSObject, NFCNDEFReaderSessionDelegate {
    var messageToWrite: NFCNDEFMessage?

    func write(message: NFCNDEFMessage) {
        messageToWrite = message
        let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
        session.begin()
    }

    func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
        let tag = tags.first!
        tag.writeNDEF(messageToWrite!) { error in
            if error != nil {
                print(error!.localizedDescription)
            } else {
                print("Message written successfully!")
            }
            session.invalidate()
        }
    }

    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        print(error.localizedDescription)
    }
}

Dieses Beispiel zeigt, wie eine NDEF-Nachricht auf einen NFC-Tag geschrieben wird. Die Methode write nimmt einen NFCNDEFMessage-Parameter entgegen, der die Nachricht darstellt, die auf den Tag geschrieben werden soll. Wenn der Tag erkannt wird, wird die Methode writeNDEF aufgerufen, die die Nachricht auf den Tag schreibt. Wenn die Schreiboperation erfolgreich ist, wird die Nachricht “Message written successfully!” ausgegeben.

3.4.2. MySQL Verbindung

OHMySQL ist eine auf Swift basierende MySQL-Client-Bibliothek, die eine einfache, leichtgewichtige Schnittstelle bietet, um mit MySQL-Datenbanken zu verbinden und mit ihnen zu kommunizieren. Mit dieser Bibliothek können SQL-Abfragen ausgeführt, Daten aus Tabellen abgerufen und Daten in einer MySQL-Datenbank innerhalb einer Swift-Anwendung manipuliert werden.

Durch die Verwendung von OHMySQL können grundlegende CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) auf der MySQL-Datenbank ausgeführt werden. Die Bibliothek ist darauf ausgelegt, einfach bedienbar zu sein und kann in jedes auf Swift basierende Projekt integriert werden. Sie unterstützt auch Verbindungspooling, das die Leistung der Anwendung bei der Arbeit mit MySQL-Datenbanken verbessern kann.

Hier wird ein Beispiel gezeigt, wie die einfache Verbindung mit der Datenbank hergestellt werden kann:

import OHMySQL

// Verbindungsdetails für die MySQL-Datenbank
let user = "username"
let password = "password"
let dbName = "database_name"
let hostName = "localhost"
let port = 3306

// Erstellen der Verbindung
let configuration = OHMySQLConfiguration(
    username: user,
    password: password,
    databaseName: dbName,
    server: hostName,
    port: UInt16(port),
    socket: "/mysql/mysql.sock"
)

let coordinator = OHMySQLStoreCoordinator(configuration: configuration)

// Initialisieren der Verbindung
coordinator.connect()

// Definieren einer Tabelle, von der Daten abgerufen werden sollen
let selectQuery = OHMySQLQueryRequestFactory.select("students", condition: "1", orderBy: "id")

// Abrufen von Daten aus der Tabelle
if let response = try? coordinator.executeQueryRequestAndFetchResult(selectQuery) {
    let employees = response.map{ $0.ohm_JSONDictionary }
    print(employees)
}

// Trennen der Verbindung
coordinator.disconnect()

Wichtig

Es gibt ein Video, das diese Funktion demonstriert und ein Problem aufzeigt, das aufgrund eines schwerwiegenden iOS-Bugs während der Implementierung entsteht. Die endgültige Version hat NFC-/RFID-Funktionen implementiert, aber es ist aufgrund des Problems mit der iOS-Software nicht möglich, sie zu testen. Die Datenbankauthentifizierung funktioniert einwandfrei.