我正在尝试使用 libnfc 和 PN532 模块模拟 url 标签。
ndef 文件适用于 IOS 的“GoToTags”,但不适用于“NFC Tools”或“NFC”。
如果我尝试在 Android 中后台读取它,即使可以使用 Chrome 打开任何 URL 标签,它也会说没有可用的应用程序。
对于 Android,我使用的是 Redmi 9C NFC
这个定义有什么问题吗?会不会是其他因素影响了阅读?
这是我目前正在使用的 NDEF 文件。我评论了我认为每个字节的含义,但如果有任何错误,请纠正。
uint8_t ndef_file[0xfffe] = {
0x00, //(Start Position) -> 0
32, //(End Position) -> 32 Positions after this one.
0xd1, //HEADER
0x02, //Payload Count
0x1b, //SIZE FROM 0x91 to END
0x53, 0x70,//SP
0x91, //UKNOWN
0x01, //UKNOWN
0x08, //Title Size (FROM 0x65 to 0x51)
0x54, //T
0x02, //2 bytes UTF-8
0x65, 0x6e, // Language (EN)
0x74, 0x63, 0x6b, 0x6e, 0x66, 0x63, //RcpNFC
0x01, //TNF Record Type 0x01 "NFC Forum Well-Known Type"
0x0b, //PAYLOAD SIZE FROM "URI IDENTIFIER" to END
0x55, //URI Records (0x55/'U')
0x04, // URI IDENTIFIER 0x03 http:// 0x04 https://
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d //PAYLOAD (google.com)
};
提前谢谢您。
编辑1: 这是我用来模拟标签的代码,即使对于默认代码也不起作用: https://github.com/nfc-tools/libnfc/blob/master/utils/nfc-emulate-forum-tag4.c
我调试了 Android 设备,出现以下消息:
NativeNfcTag: Check NDEF Failed - status = 3
以下是日志的相关部分: https://pastebin.com/zy884AMq
来自文档
为此,系统读取 NdefMessage 内的第一个 NdefRecord 以确定如何解释整个 NDEF 消息
如果你查看源代码
ndefUri = message.getRecords()[0].toUri();
它只查看 NDEF 记录 0
并且看起来(我没有完全匹配描述 NDEF 数据的方法),您的第一条记录(记录 0)在
Text
记录中,通常没有安装默认应用程序(而且绝对不会是一个网络浏览器)
默认情况下,Android 上的 Text
记录通常会导致系统 NFC 应用程序仅弹出一个对话框,显示
Text
记录中的文本。这可能与 iOS 的行为不同,iOS 可能会忽略任何非
URI's
原生 iOS 不支持智能海报记录,智能海报记录是 NDEF 文本记录(网站标题)+ URI 记录(网站 url)。 GoToTags 应用程序正常工作的原因是它显式处理智能海报。我们已直接向 NFC 论坛报告了此错误,并与 Apple 进行了沟通以解决该问题,但毫无进展。智能海报记录真的毫无意义。