在 Android Chrome 上设置 NDEF 消息

Set NDEF message on Android Chrome

如果我的网站是从 android chrome 打开的,我想在我的网站上设置一个 NDEF 消息,并使用 nfcpy 通过 NFC Reader 读取它。

根据https://developer.mozilla.org/en-US/docs/Web/API/NDEFMessage/NDEFMessage,我认为我应该可以做到这一点。

我的页面是这样的:

<button onclick="set_ndef()">Set NDEF msg</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 is not supported.");
  }
}

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

该网站使用 HTTPS,当我按下按钮时,一个 NDEFRecord 对象被打印到 div。

我有一个 acr122u NFC reader,我可以使用 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)

将我的 phone 放在 reader 之后(按下页面上的按钮后)我只能读取 phone 的 UID,但是 tag.ndefNone

我该怎么做(如果我能做到的话)?

应该给你一些背景知识,说明为什么这不起作用,Android Chrome NFC 是一个 NFC reader 和 2 readers不行。

虽然使用 acr122u NFC reader 通常可以配置为充当 NFC 标签,然后 Android Chrome 应该能够读取和写入 NDEF 消息(https://nfcpy.readthedocs.io/en/latest/topics/get-started.html#emulate-a-card)