我尝试使用 Android 设备(Android 13、Samsung S23+)向其他手机公开 URL,这样,每当用户在我的手机周围轻敲手机时,我就可以向他们发送一个“网站 NFC 标签”,他们可以单击在手机上的通知上打开 URL。我使用的测试接收设备是 iPhone 14。两台设备都开启了 NFC。
我正在使用 Web
NDEFReader()
和 write()
方法,但没有成功。我的(React JS)JavaScript代码如下:
class SignUpClass extends React.Component {
clickOnButton = async () => {
try {
if ('NDEFReader' in window) {
const ndef = new window.NDEFReader();
try {
await ndef.write({
records: [{ recordType: "url", data: "http://www.google.com/" }],
});
} catch {
console.log("Write failed :-( try again.");
}
} else {
console.log("Web NFC is not supported in this browser.");
}
} catch (error) {
console.log("Argh! " + error);
}
}
buttonForNfc = () => {
return <Button onClick={() => {this.clickOnButton()}}>Click me to test NFC</Button>
}
render() {
return(
<div>
{this.buttonForNfc()}
</div>
)
}
}
当我第一次使用此代码打开页面时,网页上出现了要求 NFC 权限的通知。这可以。然而,iPhone 上没有网站 NFC 标签,两个设备之间根本没有交互。
我到底错过了什么?
提前致谢!
您缺少的是,作为读取器/写入器与模拟 NFC 标签是完全不同的模式。两个读写器设备无法相互通信,其中一个必须模拟 NFC 标签。
在 Android 上,它可以是读取器/写入器或模拟 NFC 标签。
在 iOS 上,普通开发人员只能使用读取器/写入器模式,只有 Apple 和可能选定的特殊合作伙伴可以使用硬件来模拟 NFC 标签。
此外,这只是您可以使用更原生的语言(即 Android 上的 Java/Kotlin)执行的操作。
请参阅 https://github.com/underwindfall/NFCAndroid 了解工作示例。