Skip to content

NFC-Integration

In diesem Beitrag erfahren Sie, wie Sie Ihre Seiten und Webanwendungen gestalten können, um eine optimale Interaktion mit dem TheFlex-Browser zu gewährleisten. Besonderes Augenmerk legen wir auf die Nutzung von NFC-Lese-/Schreibfähigkeiten, sofern diese auf dem Endgerät verfügbar sind. Die Library wird automatisch vom TheFlex-Browser hinzugefügt und muss nicht manuell eingebunden werden.

Aktivieren der NFC-Funktionalität

Hier ist ein Beispielcode, um NFC zu aktivieren:

javascript
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
  nfc.enabled(
    function () {
      console.log("NFC aktiviert!");
    },
    function (error) {
      console.log("Fehler beim Aktivieren von NFC: " + JSON.stringify(error));
    }
  );
}

Lesen von NFC-Daten mit ndef-reader

Sie können das ndef-reader-Plugin verwenden, um Daten zu lesen. Hier ist ein Beispielcode:

javascript
document.addEventListener("ndefReady", function (e) {
  nfc.addNdefListener(
    function (nfcEvent) {
      var message = nfcEvent.tag.ndefMessage;
      for (var i = 0; i < message.length; i++) {
        console.log(
          "Record " + i + ": " + nfc.bytesToString(message[i].payload)
        );
      }
    },
    function () {
      console.log("NDEF-Listener erfolgreich hinzugefügt.");
    },
    function (error) {
      console.log(
        "Fehler beim Hinzufügen des NDEF-Listeners: " + JSON.stringify(error)
      );
    }
  );
});

Schreiben von NFC-Daten mit ndef-reader

Sie können das ndef-reader-Plugin verwenden, um Daten zu schreiben. Hier ist ein Beispielcode:

javascript
function writeNfcTag(data) {
  const ndefMessage = [ndef.textRecord(data)];

  nfc.write(
    ndefMessage,
    function () {
      nfcData.innerText = "NFC-Tag beschrieben!";
    },
    function () {
      nfcData.innerText = "Fehler beim Beschreiben des NFC-Tags!";
    }
  );
}

Beispiel einer Website mit NFC-Funktionalität im TheFlex

html
<!DOCTYPE html>
<html>
  <head>
    <title>NFC Reader Beispiel</title>
    <!-- Viewport-Einstellungen für mobile Geräte -->
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <style>
      /* Styling für den Body */
      body {
        font-size: 20px; /* Ändern Sie die Schriftgröße nach Bedarf */
        text-align: center;
      }

      /* Styling für den Button */
      button {
        font-size: 30px; /* Ändern Sie die Schriftgröße des Buttons nach Bedarf */
        padding: 30px 40px; /* Ändern Sie die Größe des Buttons nach Bedarf */
        margin-bottom: 20px;
      }

      /* Styling für den Link zu den App-Einstellungen */
      #appSettingsLink {
        font-size: 20px;
      }

      /* Media Query für Bildschirmbreiten bis 300px */
      @media screen and (max-width: 300px) {
        body {
          font-size: 16px;
        }

        button {
          font-size: 20px;
          padding: 8px 16px;
        }

        #appSettingsLink {
          font-size: 14px;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <!-- Button zum Starten des NFC-Lesens -->
      <button id="startNFC">NFC Lesen starten</button>
      <!-- Anzeige der NFC-Tag-ID -->
      <p id="nfcTagID"></p>
      <!-- Anzeige der NFC-Daten -->
      <p id="nfcData"></p>
      <!-- Anzeige des NFC-Berechtigungsstatus -->
      <p id="nfcPermissionStatus"></p>
    </div>
    <script>
      // Funktion zum Initialisieren der NFC-Funktionalität
      function init() {
        // Elemente im HTML-Dokument abrufen
        const startNFCButton = document.getElementById("startNFC");
        const nfcDataParagraph = document.getElementById("nfcData");
        const nfcSerialParagraph = document.getElementById("nfcTagID");
        const nfcPermissionStatus = document.getElementById(
          "nfcPermissionStatus"
        );

        // Überprüfen, ob das Cordova NFC API verfügbar ist
        if (window.nfc) {
          // Funktion, die aufgerufen wird, wenn ein NFC-Tag erkannt wird
          var readingEvent = function (nfcEvent) {
            const tag = nfcEvent.tag;
            const ndefMessage = tag.ndefMessage;
            const serialNumber = nfc.bytesToHexString(tag.id);

            // Extrahiere den Text aus dem NDEF-Nachrichtenarray
            if (ndefMessage && ndefMessage.length > 0) {
              const textRecord = ndefMessage[0];
              const message = ndef.textHelper.decodePayload(textRecord.payload);

              // Anzeige der NFC-Daten und der Seriennummer (UID)
              nfcDataParagraph.textContent = `NFC-Daten: ${message}`;
            } else {
              nfcDataParagraph.textContent = "Leeres NFC-Tag!";
            }

            // Ausgabe der Seriennummer in der Konsole
            console.log(`NFC-Tag erkannt: ${serialNumber}`);
            nfcSerialParagraph.textContent = `Seriennummer (UID): ${serialNumber}`;
          };

          // Event-Listener für den Button zum Starten des NFC-Lesens
          startNFCButton.addEventListener("click", async () => {
            try {
              // Hinzufügen eines NFC-Tag-Listeners, um NFC-Tags zu erkennen
              nfc.addNdefListener(readingEvent);
              nfcDataParagraph.textContent = "NFC-Lesen gestartet";
            } catch (error) {
              nfcDataParagraph.textContent =
                "Fehler beim Starten des NFC-Lesens: " + JSON.stringify(error);
            }
          });
        } else {
          // NFC-Unterstützung ist nicht verfügbar
          console.error(
            "Cordova NFC API wird auf diesem Gerät nicht unterstützt."
          );
          startNFCButton.disabled = true;
        }
      }

      // Event-Listener für das Cordova 'deviceready'-Ereignis
      document.addEventListener("deviceready", init, false);
    </script>
  </body>
</html>