es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Configurar mensaje NDEF en Chrome para Android

Me gustaría configurar un mensaje NDEF en mi sitio web si se abre desde Chrome en Android y leerlo con un lector NFC utilizando nfcpy.

Según https://developer.mozilla.org/en-US/docs/Web/API/NDEFMessage/NDEFMessage, creo que debería poder hacer esto.

Mi página se ve así:

<button onclick="set_ndef()">Establecer mensaje NDEF</button>
<pre id="log"></pre>

<script>
async function set_ndef() {
  if ("NDEFReader" in window) {
    try {
      const ndefmsg = new NDEFMessage({'records': [{'recordType': 'text', 'data': 'asd'}]});
      consoleLog(ndefmsg)
    } catch(error) {
      consoleLog(error);
    }
  } else {
    consoleLog("Web NFC no es compatible.");
  }
}

function consoleLog(data) {
    var logElement = document.getElementById('log');
    logElement.innerHTML += data + '\n';
}
</script>

El sitio web utiliza HTTPS, y cuando presiono el botón, se imprime un objeto NDEFRecord en el div.

Tengo un lector NFC acr122u, que pude configurar usando nfcpy:

import nfc
import time    

def on_connect(tag):
    print(tag.identifier.hex())
    tag_ident = tag.identifier.hex()[:8]
    print(tag.ndef)
    if tag.ndef:
        for record in tag.ndef:
            print(record)
    return True

while True:
    with nfc.ContactlessFrontend('usb') as clf:
        tag = clf.connect(rdwr={'on-connect': on_connect, 'beep-on-connect': True})
    time.sleep(1)

Después de colocar mi teléfono en el lector (después de presionar el botón en la página), solo puedo leer el UID del teléfono, pero tag.ndef es None.

¿Cómo puedo hacer esto (si es que puedo)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basado en el código proporcionado, parece que estás estableciendo correctamente un mensaje NDEF en tu sitio web utilizando la API NDEFMessage en JavaScript. Sin embargo, parece que cuando intentas leer el mensaje utilizando un lector NFC, solo puedes leer el UID del teléfono y no el mensaje NDEF.

    Una posible razón para esto podría ser que el formato del mensaje NDEF establecido en el sitio web no es compatible con el lector NFC o viceversa. Es importante asegurarse de que el mensaje NDEF esté correctamente formateado de acuerdo con las especificaciones del lector NFC que estás utilizando. Puede ser útil consultar la documentación o recursos de soporte para tu lector NFC específico para asegurarte de su compatibilidad.

    Otra posible razón podría ser un problema con la función on_connect en tu código de nfcpy. Es importante tener en cuenta que la función on_connect solo debe ser llamada cuando la etiqueta NFC que se está leyendo contiene un mensaje NDEF. Si la etiqueta no contiene un mensaje NDEF, la función no será llamada y el atributo tag.ndef será None. Puedes revisar si la etiqueta realmente contiene un mensaje NDEF antes de intentar leerlo, y ajustar tu código en consecuencia.

    Además, es importante asegurarse de que tu lector NFC esté correctamente configurado y sea capaz de leer y escribir mensajes NDEF. Algunos lectores NFC pueden requerir configuraciones adicionales o habilitar ciertos ajustes antes de que puedan leer o escribir mensajes NDEF.

    En general, es importante asegurarse de que tu mensaje NDEF esté correctamente formateado, que tu lector NFC esté configurado correctamente y que tu código esté escrito para manejar tanto el mensaje NDEF como el lector NFC correctamente. Con la configuración y el código adecuados, debería ser posible establecer un mensaje NDEF en un sitio web y leerlo con un lector NFC utilizando nfcpy.

Comments are closed.